Fix empty tool-call delta handling

This commit is contained in:
Yanli 盐粒
2026-01-25 23:22:13 +08:00
parent 0b44d6e584
commit 85a916a0b9
2 changed files with 34 additions and 1 deletions

View File

@ -53,10 +53,23 @@ def _get_or_create_tool_call(
If `tool_call_id` is empty, returns the most recently created tool call.
"""
if not tool_call_id:
return existing_tools_calls[-1]
if existing_tools_calls:
return existing_tools_calls[-1]
tool_call = AssistantPromptMessage.ToolCall(
id="",
type="function",
function=AssistantPromptMessage.ToolCall.ToolCallFunction(name="", arguments=""),
)
existing_tools_calls.append(tool_call)
return tool_call
tool_call = next((tool_call for tool_call in existing_tools_calls if tool_call.id == tool_call_id), None)
if tool_call is None:
if existing_tools_calls and not existing_tools_calls[-1].id:
existing_tools_calls[-1].id = tool_call_id
return existing_tools_calls[-1]
tool_call = AssistantPromptMessage.ToolCall(
id=tool_call_id,
type="function",

View File

@ -97,3 +97,23 @@ def test__increase_tool_call():
mock_id_generator.side_effect = [_exp_case.id for _exp_case in EXPECTED_CASE_4]
with patch("core.model_runtime.model_providers.__base.large_language_model._gen_tool_call_id", mock_id_generator):
_run_case(INPUTS_CASE_4, EXPECTED_CASE_4)
def test__increase_tool_call__no_id_no_name_first_delta():
inputs = [
ToolCall(id="", type="function", function=ToolCall.ToolCallFunction(name="", arguments='{"arg1": ')),
ToolCall(id="", type="function", function=ToolCall.ToolCallFunction(name="func_foo", arguments='"value"}')),
]
expected = [
ToolCall(
id="RANDOM_ID_1",
type="function",
function=ToolCall.ToolCallFunction(name="func_foo", arguments='{"arg1": "value"}'),
),
]
mock_id_generator = MagicMock()
mock_id_generator.side_effect = ["RANDOM_ID_1"]
with patch("core.model_runtime.model_providers.__base.large_language_model._gen_tool_call_id", mock_id_generator):
_run_case(inputs, expected)