diff --git a/libs/partners/anthropic/langchain_anthropic/chat_models.py b/libs/partners/anthropic/langchain_anthropic/chat_models.py index 251afb015c5..dd55d4062c6 100644 --- a/libs/partners/anthropic/langchain_anthropic/chat_models.py +++ b/libs/partners/anthropic/langchain_anthropic/chat_models.py @@ -118,9 +118,13 @@ def _merge_messages( for curr in messages: curr = curr.model_copy(deep=True) if isinstance(curr, ToolMessage): - if isinstance(curr.content, list) and all( - isinstance(block, dict) and block.get("type") == "tool_result" - for block in curr.content + if ( + isinstance(curr.content, list) + and curr.content + and all( + isinstance(block, dict) and block.get("type") == "tool_result" + for block in curr.content + ) ): curr = HumanMessage(curr.content) # type: ignore[misc] else: diff --git a/libs/partners/anthropic/tests/unit_tests/test_chat_models.py b/libs/partners/anthropic/tests/unit_tests/test_chat_models.py index 90906edf547..fd84fd338b1 100644 --- a/libs/partners/anthropic/tests/unit_tests/test_chat_models.py +++ b/libs/partners/anthropic/tests/unit_tests/test_chat_models.py @@ -162,6 +162,13 @@ def test__merge_messages() -> None: "text": None, "name": "blah", }, + { + "tool_input": {"a": "c"}, + "type": "tool_use", + "id": "3", + "text": None, + "name": "blah", + }, ] ), ToolMessage("buz output", tool_call_id="1", status="error"), # type: ignore[misc] @@ -178,6 +185,7 @@ def test__merge_messages() -> None: ], tool_call_id="2", ), # type: ignore[misc] + ToolMessage([], tool_call_id="3"), # type: ignore[misc] HumanMessage("next thing"), # type: ignore[misc] ] expected = [ @@ -201,6 +209,13 @@ def test__merge_messages() -> None: "text": None, "name": "blah", }, + { + "tool_input": {"a": "c"}, + "type": "tool_use", + "id": "3", + "text": None, + "name": "blah", + }, ] ), HumanMessage( # type: ignore[misc] @@ -226,6 +241,12 @@ def test__merge_messages() -> None: "tool_use_id": "2", "is_error": False, }, + { + "type": "tool_result", + "content": [], + "tool_use_id": "3", + "is_error": False, + }, {"type": "text", "text": "next thing"}, ] ),