From 397d11e2ee90da1bcaf23412e698217c2f693767 Mon Sep 17 00:00:00 2001 From: Jah-yee Date: Wed, 18 Mar 2026 09:27:19 +0800 Subject: [PATCH] fix: add float support to merge_dicts and merge_obj - Changed isinstance(merged[right_k], int) to isinstance(merged[right_k], (int, float)) - Added numeric type handling in merge_obj for int and float - Fixes issue #36011: merge_dicts raises TypeError for float values during streaming chunk aggregation --- libs/core/langchain_core/utils/_merge.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/core/langchain_core/utils/_merge.py b/libs/core/langchain_core/utils/_merge.py index 6a0cb38f07850..1234f4beff0e9 100644 --- a/libs/core/langchain_core/utils/_merge.py +++ b/libs/core/langchain_core/utils/_merge.py @@ -68,7 +68,7 @@ def merge_dicts(left: dict[str, Any], *others: dict[str, Any]) -> dict[str, Any] merged[right_k] = merge_lists(merged[right_k], right_v) elif merged[right_k] == right_v: continue - elif isinstance(merged[right_k], int): + elif isinstance(merged[right_k], (int, float)): # Preserve identification and temporal fields using last-wins strategy # instead of summing: # - index: identifies which tool call a chunk belongs to @@ -199,6 +199,9 @@ def merge_obj(left: Any, right: Any) -> Any: return merge_dicts(left, right) if isinstance(left, list): return merge_lists(left, right) + if isinstance(left, (int, float)): + # For numeric types, sum the values (consistent with merge_dicts behavior) + return left + right if left == right: return left msg = (