[PR #21504] [CLOSED] fix: include chat attachment images in OpenAI payload #64964

Closed
opened 2026-05-06 10:42:30 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/open-webui/pull/21504
Author: @Plutarch01
Created: 2/17/2026
Status: Closed

Base: devHead: fix/chat-files-image-forwarding


📝 Commits (10+)

📊 Changes

3 files changed (+232 additions, -0 deletions)

View changed files

backend/open_webui/test/util/test_middleware_images.py (+124 -0)
backend/open_webui/utils/chat_image_payload.py (+95 -0)
📝 backend/open_webui/utils/middleware.py (+13 -0)

📄 Description

Pull Request Checklist

Note to first-time contributors: Please open a discussion post in Discussions to discuss your idea/fix with the community before creating a pull request, and describe your changes before submitting a pull request.

This is to ensure large feature PRs are discussed with the community first, before starting work on it. If the community does not want this feature or it is not relevant for Open WebUI as a project, it can be identified in the discussion before working on the feature and submitting the PR.

Before submitting, make sure you've checked the following:

  • Target branch: Verify that the pull request targets the dev branch. PRs targeting main will be immediately closed.
  • Description: Provide a concise description of the changes made in this pull request down below.
  • Changelog: Ensure a changelog entry following the format of Keep a Changelog is added at the bottom of the PR description.
  • Documentation: Add docs in Open WebUI Docs Repository. Document user-facing behavior, environment variables, public APIs/interfaces, or deployment steps.
  • Dependencies: No new dependencies were added.
  • Testing: Performed manual verification and targeted regression tests (details below).
  • Agentic AI Code: This PR has gone through additional human review and manual testing before submission.
  • Code review: Performed self-review and ensured only one logical change is included.
  • Design & Architecture: Uses existing payload pipeline, no new settings added.
  • Git Hygiene: PR is atomic and only includes the image forwarding fix + tests.
  • Title Prefix: fix

Changelog Entry

Description

  • Fixes OpenAI-compatible chat payload construction so DB-backed message image attachments (message.files) are forwarded as messages[].content image_url parts.

Added

  • backend/open_webui/utils/chat_image_payload.py helper to append image attachment parts from chat history.
  • Regression tests in backend/open_webui/test/util/test_middleware_images.py.

Changed

  • backend/open_webui/utils/middleware.py now calls the helper after convert_url_images_to_base64(...) when chat_id + parent_message_id are available.

Deprecated

  • None.

Removed

  • None.

Fixed

  • Prevents image attachments that are stored in chat DB files from being dropped in OpenAI-compatible outbound payloads.
  • Avoids duplicate image insertion when content already has image_url parts.

Security

  • No security scope change.

Breaking Changes

  • BREAKING CHANGE: None.

Additional Information

  • Why this matters: in some flows, frontend sends text content while attachment images remain in DB files; downstream providers/gateways then receive no image content unless these files are lifted into message parts.
  • The helper intentionally ignores non-image files and no-ops when parent message context is missing.

Screenshots or Videos

  • Not applicable (backend payload fix).

Testing Performed

Manual:

  • Verified end-to-end by sending image-attached chat requests through OpenAI-compatible endpoint and confirming downstream receives image_url content parts.

Automated:

  • python -m py_compile backend/open_webui/utils/middleware.py backend/open_webui/utils/chat_image_payload.py backend/open_webui/test/util/test_middleware_images.py
  • python -c "import sys,pytest; sys.path.insert(0,'backend'); raise SystemExit(pytest.main(['backend/open_webui/test/util/test_middleware_images.py']))"

Contributor License Agreement

By submitting this pull request, I confirm that I have read and fully agree to the Contributor License Agreement (CLA), and I am providing my contributions under its terms.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/open-webui/pull/21504 **Author:** [@Plutarch01](https://github.com/Plutarch01) **Created:** 2/17/2026 **Status:** ❌ Closed **Base:** `dev` ← **Head:** `fix/chat-files-image-forwarding` --- ### 📝 Commits (10+) - [`fe6783c`](https://github.com/open-webui/open-webui/commit/fe6783c16699911c7be17392596d579333fb110c) Merge pull request #19030 from open-webui/dev - [`fc05e0a`](https://github.com/open-webui/open-webui/commit/fc05e0a6c5d39da60b603b4d520f800d6e36f748) Merge pull request #19405 from open-webui/dev - [`e3faec6`](https://github.com/open-webui/open-webui/commit/e3faec62c58e3a83d89aa3df539feacefa125e0c) Merge pull request #19416 from open-webui/dev - [`9899293`](https://github.com/open-webui/open-webui/commit/9899293f050ad50ae12024cbebee7e018acd851e) Merge pull request #19448 from open-webui/dev - [`140605e`](https://github.com/open-webui/open-webui/commit/140605e660b8186a7d5c79fb3be6ffb147a2f498) Merge pull request #19462 from open-webui/dev - [`6f1486f`](https://github.com/open-webui/open-webui/commit/6f1486ffd0cb288d0e21f41845361924e0d742b3) Merge pull request #19466 from open-webui/dev - [`d95f533`](https://github.com/open-webui/open-webui/commit/d95f533214e3fe5beb5e41ec1f349940bc4c7043) Merge pull request #19729 from open-webui/dev - [`a727153`](https://github.com/open-webui/open-webui/commit/a7271532f8a38da46785afcaa7e65f9a45e7d753) 0.6.43 (#20093) - [`6adde20`](https://github.com/open-webui/open-webui/commit/6adde203cd292a9e3af9c64a2ae36b603fed096a) Merge pull request #20394 from open-webui/dev - [`f9b0534`](https://github.com/open-webui/open-webui/commit/f9b0534e0c442631d1cb7205169588b9b6204179) Merge pull request #20522 from open-webui/dev ### 📊 Changes **3 files changed** (+232 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `backend/open_webui/test/util/test_middleware_images.py` (+124 -0) ➕ `backend/open_webui/utils/chat_image_payload.py` (+95 -0) 📝 `backend/open_webui/utils/middleware.py` (+13 -0) </details> ### 📄 Description # Pull Request Checklist ### Note to first-time contributors: Please open a discussion post in [Discussions](https://github.com/open-webui/open-webui/discussions) to discuss your idea/fix with the community before creating a pull request, and describe your changes before submitting a pull request. This is to ensure large feature PRs are discussed with the community first, before starting work on it. If the community does not want this feature or it is not relevant for Open WebUI as a project, it can be identified in the discussion before working on the feature and submitting the PR. **Before submitting, make sure you've checked the following:** - [x] **Target branch:** Verify that the pull request targets the `dev` branch. **PRs targeting `main` will be immediately closed.** - [x] **Description:** Provide a concise description of the changes made in this pull request down below. - [x] **Changelog:** Ensure a changelog entry following the format of [Keep a Changelog](https://keepachangelog.com/) is added at the bottom of the PR description. - [ ] **Documentation:** Add docs in [Open WebUI Docs Repository](https://github.com/open-webui/docs). Document user-facing behavior, environment variables, public APIs/interfaces, or deployment steps. - [x] **Dependencies:** No new dependencies were added. - [x] **Testing:** Performed manual verification and targeted regression tests (details below). - [x] **Agentic AI Code:** This PR has gone through additional human review and manual testing before submission. - [x] **Code review:** Performed self-review and ensured only one logical change is included. - [x] **Design & Architecture:** Uses existing payload pipeline, no new settings added. - [x] **Git Hygiene:** PR is atomic and only includes the image forwarding fix + tests. - [x] **Title Prefix:** `fix` # Changelog Entry ### Description - Fixes OpenAI-compatible chat payload construction so DB-backed message image attachments (`message.files`) are forwarded as `messages[].content` `image_url` parts. ### Added - `backend/open_webui/utils/chat_image_payload.py` helper to append image attachment parts from chat history. - Regression tests in `backend/open_webui/test/util/test_middleware_images.py`. ### Changed - `backend/open_webui/utils/middleware.py` now calls the helper after `convert_url_images_to_base64(...)` when `chat_id` + `parent_message_id` are available. ### Deprecated - None. ### Removed - None. ### Fixed - Prevents image attachments that are stored in chat DB `files` from being dropped in OpenAI-compatible outbound payloads. - Avoids duplicate image insertion when content already has `image_url` parts. ### Security - No security scope change. ### Breaking Changes - **BREAKING CHANGE**: None. --- ### Additional Information - Why this matters: in some flows, frontend sends text content while attachment images remain in DB `files`; downstream providers/gateways then receive no image content unless these files are lifted into message parts. - The helper intentionally ignores non-image files and no-ops when parent message context is missing. ### Screenshots or Videos - Not applicable (backend payload fix). ### Testing Performed Manual: - Verified end-to-end by sending image-attached chat requests through OpenAI-compatible endpoint and confirming downstream receives `image_url` content parts. Automated: - `python -m py_compile backend/open_webui/utils/middleware.py backend/open_webui/utils/chat_image_payload.py backend/open_webui/test/util/test_middleware_images.py` - `python -c "import sys,pytest; sys.path.insert(0,'backend'); raise SystemExit(pytest.main(['backend/open_webui/test/util/test_middleware_images.py']))"` ### Contributor License Agreement By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](https://github.com/open-webui/open-webui/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT), and I am providing my contributions under its terms. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-05-06 10:42:30 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#64964