From bfca8c518884679eeebc129035b424c4c9d292f2 Mon Sep 17 00:00:00 2001 From: hariomlohardev Date: Mon, 10 Aug 2026 20:51:57 +0000 Subject: [PATCH] fix(middleware): collect OpenAPI data URIs without mutating iterated list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use remaining_tool_result accumulator instead of list.remove() during iteration — list.remove() shifts later elements so the item after each extracted data: URI was skipped. Fixes #28394. Closes #28394 --- backend/open_webui/utils/middleware.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 1daccff6ad..16e4c2b494 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1051,6 +1051,10 @@ async def process_tool_result( tool_response.append(resource.get('uri')) tool_result = tool_response[0] if len(tool_response) == 1 else tool_response else: # OpenAPI + # Collect into a new list instead of removing from the list being + # iterated: list.remove() shifts every later element down by one, + # so the item after each extracted one is skipped entirely. + remaining_tool_result = [] for item in tool_result: if isinstance(item, str) and item.startswith('data:'): tool_result_files.append( @@ -1059,7 +1063,9 @@ async def process_tool_result( 'content': item, } ) - tool_result.remove(item) + else: + remaining_tool_result.append(item) + tool_result = remaining_tool_result if isinstance(tool_result, list): tool_result = {'results': tool_result}