From 4c7f6cc0a18e234ef5332f409d5190c7e19e5485 Mon Sep 17 00:00:00 2001 From: mmc <853506518@qq.com> Date: Wed, 6 May 2026 13:16:53 +0800 Subject: [PATCH] fix: improve OpenAI forced tool-call fallback parsing --- app/main.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/main.py b/app/main.py index 6182397..bb455f3 100644 --- a/app/main.py +++ b/app/main.py @@ -44,6 +44,7 @@ from .http.tool_bridge import ( _anthropic_tool_result_block, _anthropic_tool_use_block, _extract_function_call_event_from_text, + _forced_tool_fallback_event, _json_string, _openai_forced_tool_name, _openai_tool_call, @@ -660,10 +661,17 @@ async def v1_chat_completions(req: ChatCompletionsRequest, request: Request): yield _text_payload(text) if buffered_text_parts and forced_tool_name and not saw_tool_call: + merged_text = "".join(buffered_text_parts) inferred = _extract_function_call_event_from_text( - "".join(buffered_text_parts), + merged_text, forced_tool_name=forced_tool_name, ) + if inferred is None: + inferred = _forced_tool_fallback_event( + merged_text, + forced_tool_name=forced_tool_name, + tools=req.tools, + ) if inferred is not None: tool_id = "call_inferred_0" tool_call_indexes[tool_id] = 0 @@ -805,6 +813,12 @@ async def v1_chat_completions(req: ChatCompletionsRequest, request: Request): message_content, forced_tool_name=forced_tool_name, ) + if inferred is None: + inferred = _forced_tool_fallback_event( + message_content, + forced_tool_name=forced_tool_name, + tools=req.tools, + ) if inferred is not None: tool_calls.append( _openai_tool_call(inferred, forced_id="call_inferred_0")