From 3510b3b4bda1c569bad2b292dd7b05d937ccae3b Mon Sep 17 00:00:00 2001 From: funnycups <105932603+funnycups@users.noreply.github.com> Date: Wed, 28 May 2025 10:28:06 +0800 Subject: [PATCH] Fix reasoning not done right before function calling. --- backend/open_webui/utils/middleware.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index ce6ae2aca..32ecce40c 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1748,7 +1748,15 @@ async def process_chat_response( delta = choices[0].get("delta", {}) delta_tool_calls = delta.get("tool_calls", None) - + if delta_tool_calls and content_blocks and content_blocks[-1]["type"] == "reasoning" and "duration" not in content_blocks[-1]: + reasoning_block = content_blocks[-1] + reasoning_block["ended_at"] = time.time() + reasoning_block["duration"] = int(reasoning_block["ended_at"] - reasoning_block["started_at"]) + content_blocks.append({"type": "text", "content": ""}) + await event_emitter({ + "type": "chat:completion", + "data": {"content": serialize_content_blocks(content_blocks)}, + }) if delta_tool_calls: for delta_tool_call in delta_tool_calls: tool_call_index = delta_tool_call.get(