Skip to content

Commit e364e30

Browse files
estsauverEarl St Sauver
authored and
Earl St Sauver
committed
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.
1 parent 5e17bcf commit e364e30

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

dspy/utils/usage_tracker.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ 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
45+
result[k] += v if v else 0
4646
return result
4747

4848
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)