From 8f49725aa5f2d9b87e559e7d3f02f037335b7914 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 23 Feb 2026 12:17:36 -0600 Subject: [PATCH] refac --- backend/open_webui/utils/middleware.py | 5 +++-- backend/open_webui/utils/misc.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 763d74bd13..7823605bfd 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -86,6 +86,7 @@ from open_webui.utils.misc import ( get_message_list, add_or_update_system_message, add_or_update_user_message, + set_last_user_message_content, get_last_user_message, get_last_user_message_item, get_last_assistant_message, @@ -4241,8 +4242,8 @@ async def streaming_chat_response_handler(response, ctx): all_tool_call_sources.extend(tool_call_sources) if all_tool_call_sources and user_message: # Restore original user message before re-applying to avoid recursive nesting - form_data["messages"] = add_or_update_user_message( - user_message, form_data["messages"], append=False + set_last_user_message_content( + user_message, form_data["messages"] ) form_data["messages"] = apply_source_context_to_messages( request, diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index 447e334227..ced6fd74a8 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -277,6 +277,26 @@ def get_last_user_message(messages: list[dict]) -> Optional[str]: return get_content_from_message(message) +def set_last_user_message_content( + content: str, messages: list[dict] +) -> list[dict]: + """ + Replace the text content of the last user message in-place. + Handles both plain-string and list-of-parts content formats. + """ + for message in reversed(messages): + if message.get("role") == "user": + if isinstance(message.get("content"), list): + for item in message["content"]: + if item.get("type") == "text": + item["text"] = content + break + else: + message["content"] = content + break + return messages + + def get_last_assistant_message_item(messages: list[dict]) -> Optional[dict]: for message in reversed(messages): if message["role"] == "assistant":