diff --git a/libs/core/langchain_core/utils/_merge.py b/libs/core/langchain_core/utils/_merge.py index 8ddc797f62..e3539cbdf5 100644 --- a/libs/core/langchain_core/utils/_merge.py +++ b/libs/core/langchain_core/utils/_merge.py @@ -61,6 +61,11 @@ def merge_dicts(left: dict[str, Any], *others: dict[str, Any]) -> dict[str, Any] and merged[right_k] == right_v ): continue + if right_k == "status": + # Enum-like state (e.g. "in_progress" -> "completed") that a + # later chunk overwrites, not accumulated text. + merged[right_k] = right_v + continue merged[right_k] += right_v elif isinstance(merged[right_k], dict): merged[right_k] = merge_dicts(merged[right_k], right_v) diff --git a/libs/core/tests/unit_tests/utils/test_utils.py b/libs/core/tests/unit_tests/utils/test_utils.py index 95c7cf50a0..0c6b9d61ab 100644 --- a/libs/core/tests/unit_tests/utils/test_utils.py +++ b/libs/core/tests/unit_tests/utils/test_utils.py @@ -129,6 +129,11 @@ def test_check_package_version( # Other integer fields should still be summed (e.g., token counts) ({"tokens": 10}, {"tokens": 5}, {"tokens": 15}), ({"count": 1}, {"count": 2}, {"count": 3}), + # 'status' is enum-like state that a later chunk overwrites, not + # accumulated text (e.g. streamed Responses API items going from + # "in_progress" to "completed"). + ({"status": "in_progress"}, {"status": "completed"}, {"status": "completed"}), + ({"status": "completed"}, {"status": "completed"}, {"status": "completed"}), ], ) def test_merge_dicts(