fix: improve OpenAI forced tool-call fallback parsing
This commit is contained in:
16
app/main.py
16
app/main.py
@@ -44,6 +44,7 @@ from .http.tool_bridge import (
|
|||||||
_anthropic_tool_result_block,
|
_anthropic_tool_result_block,
|
||||||
_anthropic_tool_use_block,
|
_anthropic_tool_use_block,
|
||||||
_extract_function_call_event_from_text,
|
_extract_function_call_event_from_text,
|
||||||
|
_forced_tool_fallback_event,
|
||||||
_json_string,
|
_json_string,
|
||||||
_openai_forced_tool_name,
|
_openai_forced_tool_name,
|
||||||
_openai_tool_call,
|
_openai_tool_call,
|
||||||
@@ -660,10 +661,17 @@ async def v1_chat_completions(req: ChatCompletionsRequest, request: Request):
|
|||||||
yield _text_payload(text)
|
yield _text_payload(text)
|
||||||
|
|
||||||
if buffered_text_parts and forced_tool_name and not saw_tool_call:
|
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(
|
inferred = _extract_function_call_event_from_text(
|
||||||
"".join(buffered_text_parts),
|
merged_text,
|
||||||
forced_tool_name=forced_tool_name,
|
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:
|
if inferred is not None:
|
||||||
tool_id = "call_inferred_0"
|
tool_id = "call_inferred_0"
|
||||||
tool_call_indexes[tool_id] = 0
|
tool_call_indexes[tool_id] = 0
|
||||||
@@ -805,6 +813,12 @@ async def v1_chat_completions(req: ChatCompletionsRequest, request: Request):
|
|||||||
message_content,
|
message_content,
|
||||||
forced_tool_name=forced_tool_name,
|
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:
|
if inferred is not None:
|
||||||
tool_calls.append(
|
tool_calls.append(
|
||||||
_openai_tool_call(inferred, forced_id="call_inferred_0")
|
_openai_tool_call(inferred, forced_id="call_inferred_0")
|
||||||
|
|||||||
Reference in New Issue
Block a user