Skip to content

Commit 9287208

Browse files
estsauverCopilot
andauthored
Bugfix: Ensure keys in both entities are merged (#8238)
* Bugfix: Ensure keys in both entities are merged This PR fixes asymmetric merging in _merge_usage_entries so keys existing only in the first entry are now preserved. * Update dspy/utils/usage_tracker.py Accepted copilot suggestion Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
1 parent 3c1dc16 commit 9287208

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

dspy/utils/usage_tracker.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,11 @@ def _merge_usage_entries(self, usage_entry1, usage_entry2) -> dict[str, dict[str
3737

3838
result = dict(usage_entry2)
3939
for k, v in usage_entry1.items():
40-
if k in result:
41-
if isinstance(v, dict):
42-
result[k] = self._merge_usage_entries(result[k], v)
43-
else:
44-
result[k] = result[k] or 0
45-
result[k] += v if v else 0
40+
current_v = result.get(k)
41+
if isinstance(v, dict):
42+
result[k] = self._merge_usage_entries(current_v, v)
43+
else:
44+
result[k] = (current_v or 0) + (v or 0)
4645
return result
4746

4847
def add_usage(self, lm: str, usage_entry: dict):

tests/utils/test_usage_tracker.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,16 @@ def test_track_usage_context_manager():
157157
assert "openai/gpt-4o-mini" in total_usage
158158
assert len(total_usage.keys()) == 1
159159
assert isinstance(total_usage["openai/gpt-4o-mini"], dict)
160+
161+
162+
def test_merge_usage_entries_with_new_keys():
163+
"""Ensure merging usage entries preserves unseen keys."""
164+
tracker = UsageTracker()
165+
166+
tracker.add_usage("model-x", {"prompt_tokens": 5})
167+
tracker.add_usage("model-x", {"completion_tokens": 2})
168+
169+
total_usage = tracker.get_total_tokens()
170+
171+
assert total_usage["model-x"]["prompt_tokens"] == 5
172+
assert total_usage["model-x"]["completion_tokens"] == 2

0 commit comments

Comments
 (0)