fix: improve OpenAI forced tool-call fallback parsing

This commit is contained in:
mmc
2026-05-06 13:16:53 +08:00
parent 433dfbbade
commit 4c7f6cc0a1

View File

@@ -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")