From 88c8ea883cd2142b70925a08790ea089946d37e0 Mon Sep 17 00:00:00 2001 From: 2underscores Date: Wed, 11 Jun 2025 17:16:27 +1000 Subject: [PATCH] Isolated fix to single section --- backend/open_webui/utils/middleware.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index d3ea27299..ea04ee8f3 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1980,28 +1980,38 @@ async def process_chat_response( tools = metadata.get("tools", {}) results = [] + for tool_call in response_tool_calls: tool_call_id = tool_call.get("id", "") tool_name = tool_call.get("function", {}).get("name", "") + tool_call_args = tool_call.get("function", {}).get("arguments", "{}") tool_function_params = {} try: # json.loads cannot be used because some models do not produce valid JSON tool_function_params = ast.literal_eval( - tool_call.get("function", {}).get("arguments", "{}") + tool_call_args ) except Exception as e: log.debug(e) # Fallback to JSON parsing try: tool_function_params = json.loads( - tool_call.get("function", {}).get("arguments", "{}") + tool_call_args ) except Exception as e: - log.debug( - f"Error parsing tool call arguments: {tool_call.get('function', {}).get('arguments', '{}')}" + log.error( + f"Error parsing tool call arguments: {tool_call_args}" ) + # Mutate the original tool call response params as they are passed back to the passed + # back to the LLM via the content blocks. If they are in a json block and are invalid json, + # this can cause downstream LLM integrations to fail (e.g. bedrock gateway) where response + # params are not valid json. + # Main case so far is no args = "" = invalid json. + log.debug(f"Parsed args from {tool_call_args} to {tool_function_params}") + tool_call.setdefault("function", {})["arguments"] = json.dumps(tool_function_params) + tool_result = None if tool_name in tools: