fix(core): ensure InjectedToolCallId always overrides LLM-generated values (#32766)

This commit is contained in:
Zhou Jing
2025-09-10 00:25:52 +09:00
committed by GitHub
parent c124e67325
commit dcc517b187
2 changed files with 24 additions and 8 deletions

View File

@@ -659,10 +659,7 @@ class ChildTool(BaseTool):
return tool_input
if issubclass(input_args, BaseModel):
for k, v in get_all_basemodel_annotations(input_args).items():
if (
_is_injected_arg_type(v, injected_type=InjectedToolCallId)
and k not in tool_input
):
if _is_injected_arg_type(v, injected_type=InjectedToolCallId):
if tool_call_id is None:
msg = (
"When tool includes an InjectedToolCallId "
@@ -677,10 +674,7 @@ class ChildTool(BaseTool):
result_dict = result.model_dump()
elif issubclass(input_args, BaseModelV1):
for k, v in get_all_basemodel_annotations(input_args).items():
if (
_is_injected_arg_type(v, injected_type=InjectedToolCallId)
and k not in tool_input
):
if _is_injected_arg_type(v, injected_type=InjectedToolCallId):
if tool_call_id is None:
msg = (
"When tool includes an InjectedToolCallId "

View File

@@ -2349,6 +2349,28 @@ def test_tool_injected_tool_call_id() -> None:
) == ToolMessage(0, tool_call_id="bar") # type: ignore[arg-type]
def test_tool_injected_tool_call_id_override_llm_generated() -> None:
"""Test that InjectedToolCallId overrides LLM-generated values."""
@tool
def foo(x: int, tool_call_id: Annotated[str, InjectedToolCallId]) -> ToolMessage:
"""Foo."""
return ToolMessage(x, tool_call_id=tool_call_id) # type: ignore[arg-type]
# Test that when LLM generates the tool_call_id, it gets overridden
result = foo.invoke(
{
"type": "tool_call",
"args": {"x": 0, "tool_call_id": "fake_llm_id"}, # LLM generated this
"name": "foo",
"id": "real_tool_call_id", # This should be used instead
}
)
# The tool should receive the real tool call ID, not the LLM-generated one
assert result == ToolMessage(0, tool_call_id="real_tool_call_id") # type: ignore[arg-type]
def test_tool_uninjected_tool_call_id() -> None:
@tool
def foo(x: int, tool_call_id: str) -> ToolMessage: