From 31dc97b68b05ce0a99568c1759f51f1fbd53c0ad Mon Sep 17 00:00:00 2001 From: Shirasawa <764798966@qq.com> Date: Wed, 19 Nov 2025 15:07:56 +0800 Subject: [PATCH] feat: Add image handling in middleware for delta updates (#19073) * feat: Add image handling in middleware for delta updates * refactor: optimize the code logic --- backend/open_webui/utils/middleware.py | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 9a3b7bea70..a3e34e746b 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -742,6 +742,27 @@ def get_last_images(message_list): return images +def extract_and_process_urls(delta_images, request, metadata, user) -> list[str]: + if not isinstance(delta_images, list): + return [] + + processed_urls = [] + for img in delta_images: + if not isinstance(img, dict) or img.get("type") != "image_url": + continue + + url = img.get("image_url", {}).get("url") + if not url: + continue + + if url.startswith("data:image/png;base64"): + url = get_image_url_from_base64(request, url, metadata, user) + + processed_urls.append(url) + + return processed_urls + + async def chat_image_generation_handler( request: Request, form_data: dict, extra_params: dict, user ): @@ -2581,6 +2602,25 @@ async def process_chat_response( "arguments" ] += delta_arguments + processed_image_urls = extract_and_process_urls( + delta.get("images", []), request, metadata, user + ) + if processed_image_urls: + await event_emitter( + { + "type": "files", + "data": { + "files": [ + { + "type": "image", + "url": url, + } + for url in processed_image_urls + ] + }, + } + ) + value = delta.get("content") reasoning_content = (