Skip to content

Commit b80b254

Browse files
committed
GitContribute issue #38366
1 parent e495651 commit b80b254

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

libs/core/langchain_core/utils/_merge.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,18 @@ def merge_dicts(left: dict[str, Any], *others: dict[str, Any]) -> dict[str, Any]
5757
# "all dicts."
5858
# )
5959
if (right_k == "index" and merged[right_k].startswith("lc_")) or (
60-
right_k in {"id", "output_version", "model_provider"}
60+
right_k
61+
in {
62+
"id",
63+
"output_version",
64+
"model_provider",
65+
"model_name",
66+
"finish_reason",
67+
"native_finish_reason",
68+
"object",
69+
"system_fingerprint",
70+
"format",
71+
}
6172
and merged[right_k] == right_v
6273
):
6374
continue

libs/core/tests/unit_tests/utils/test_utils.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,44 @@ def test_merge_dicts(
148148
assert right == right_copy
149149

150150

151+
@pytest.mark.parametrize(
152+
"key",
153+
[
154+
"model_name",
155+
"finish_reason",
156+
"native_finish_reason",
157+
"object",
158+
"system_fingerprint",
159+
"format",
160+
],
161+
)
162+
def test_merge_dicts_dedupes_repeated_stable_string_metadata(key: str) -> None:
163+
actual = merge_dicts({key: "same"}, {key: "same"})
164+
165+
assert actual == {key: "same"}
166+
167+
168+
def test_merge_dicts_dedupes_repeated_nested_stable_string_metadata() -> None:
169+
actual = merge_dicts(
170+
{"reasoning_details": {"format": "unknown"}},
171+
{"reasoning_details": {"format": "unknown"}},
172+
)
173+
174+
assert actual == {"reasoning_details": {"format": "unknown"}}
175+
176+
177+
def test_merge_dicts_concatenates_different_stable_string_metadata() -> None:
178+
actual = merge_dicts({"model_name": "first"}, {"model_name": "second"})
179+
180+
assert actual == {"model_name": "firstsecond"}
181+
182+
183+
def test_merge_dicts_concatenates_unrecognized_equal_strings() -> None:
184+
actual = merge_dicts({"content": "same"}, {"content": "same"})
185+
186+
assert actual == {"content": "samesame"}
187+
188+
151189
@pytest.mark.parametrize(
152190
("left", "right", "expected"),
153191
[

0 commit comments

Comments
 (0)