diff --git a/libs/core/langchain_core/utils/_merge.py b/libs/core/langchain_core/utils/_merge.py index ba7df2043cb..6a0cb38f078 100644 --- a/libs/core/langchain_core/utils/_merge.py +++ b/libs/core/langchain_core/utils/_merge.py @@ -121,9 +121,9 @@ def merge_lists(left: list | None, *others: list | None) -> list | None: "index" in e_left and e_left["index"] == e["index"] # index matches and ( # IDs not inconsistent - e_left.get("id") is None - or e.get("id") is None - or e_left["id"] == e["id"] + e_left.get("id") in (None, "") + or e.get("id") in (None, "") + or e_left.get("id") == e.get("id") ) ) ] diff --git a/libs/core/tests/unit_tests/test_messages.py b/libs/core/tests/unit_tests/test_messages.py index 1955cef093b..a13fdc62a6f 100644 --- a/libs/core/tests/unit_tests/test_messages.py +++ b/libs/core/tests/unit_tests/test_messages.py @@ -122,6 +122,34 @@ def test_message_chunks() -> None: ], ) + assert ( + AIMessageChunk( + content="", + tool_call_chunks=[ + create_tool_call_chunk(name="tool1", args="", id="1", index=0) + ], + ) + + AIMessageChunk( + content="", + tool_call_chunks=[ + create_tool_call_chunk(name=None, args='{"arg1": "val', id="", index=0) + ], + ) + + AIMessageChunk( + content="", + tool_call_chunks=[ + create_tool_call_chunk(name=None, args='ue"}', id="", index=0) + ], + ) + ) == AIMessageChunk( + content="", + tool_call_chunks=[ + create_tool_call_chunk( + name="tool1", args='{"arg1": "value"}', id="1", index=0 + ) + ], + ) + assert ( AIMessageChunk( content="",