Skip to content

Commit 4a096ab

Browse files
authored
fix: Fix tool calling with legacy agent (#712)
1 parent 36baedc commit 4a096ab

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

libs/genai/langchain_google_genai/chat_models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ def _convert_to_parts(
303303

304304
def _convert_tool_message_to_part(message: ToolMessage | FunctionMessage) -> Part:
305305
"""Converts a tool or function message to a google part."""
306-
name = message.name
306+
# Legacy agent stores tool name in message.additional_kwargs instead of message.name
307+
name = message.name or message.additional_kwargs.get("name")
307308
response: Any
308309
if not isinstance(message.content, str):
309310
response = message.content

libs/genai/tests/unit_tests/test_chat_models.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
from langchain_google_genai.chat_models import (
3030
ChatGoogleGenerativeAI,
31+
_convert_tool_message_to_part,
3132
_parse_chat_history,
3233
_parse_response_candidate,
3334
)
@@ -622,3 +623,23 @@ def test_serialize() -> None:
622623
llm.client = None
623624
llm_loaded.client = None
624625
assert llm == llm_loaded
626+
627+
628+
@pytest.mark.parametrize(
629+
"tool_message",
630+
[
631+
ToolMessage(name="tool_name", content="test_content", tool_call_id="1"),
632+
# Legacy agent does not set `name`
633+
ToolMessage(
634+
additional_kwargs={"name": "tool_name"},
635+
content="test_content",
636+
tool_call_id="1",
637+
),
638+
],
639+
)
640+
def test__convert_tool_message_to_part__sets_tool_name(
641+
tool_message: ToolMessage,
642+
) -> None:
643+
part = _convert_tool_message_to_part(tool_message)
644+
assert part.function_response.name == "tool_name"
645+
assert part.function_response.response == {"output": "test_content"}

0 commit comments

Comments
 (0)