Skip to content

Commit 54095a2

Browse files
Merge pull request #15015 from anthony-liner/fix/langfuse-total-tokens
fix: set usage_details.total in langfuse integration
2 parents 0910622 + 9ca73d5 commit 54095a2

File tree

3 files changed

+11
-0
lines changed

3 files changed

+11
-0
lines changed

litellm/integrations/langfuse/langfuse.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ def _log_langfuse_v2( # noqa: PLR0915
690690
}
691691
usage_details = LangfuseUsageDetails(input=_usage_obj.prompt_tokens,
692692
output=_usage_obj.completion_tokens,
693+
total=_usage_obj.total_tokens,
693694
cache_creation_input_tokens=_usage_obj.get('cache_creation_input_tokens', 0),
694695
cache_read_input_tokens=_usage_obj.get('cache_read_input_tokens', 0))
695696

litellm/types/integrations/langfuse.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ class LangfuseLoggingConfig(TypedDict):
1212
class LangfuseUsageDetails(TypedDict):
1313
input: Optional[int]
1414
output: Optional[int]
15+
total: Optional[int]
1516
cache_creation_input_tokens: Optional[int]
1617
cache_read_input_tokens: Optional[int]

tests/test_litellm/integrations/test_langfuse.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,26 +109,30 @@ def test_langfuse_usage_details_type(self):
109109
usage_details: LangfuseUsageDetails = {
110110
"input": 10,
111111
"output": 20,
112+
"total": 30,
112113
"cache_creation_input_tokens": 5,
113114
"cache_read_input_tokens": 3
114115
}
115116

116117
# Verify all fields are present
117118
self.assertEqual(usage_details["input"], 10)
118119
self.assertEqual(usage_details["output"], 20)
120+
self.assertEqual(usage_details["total"], 30)
119121
self.assertEqual(usage_details["cache_creation_input_tokens"], 5)
120122
self.assertEqual(usage_details["cache_read_input_tokens"], 3)
121123

122124
# Test with all fields (all fields are required in TypedDict by default)
123125
minimal_usage_details: LangfuseUsageDetails = {
124126
"input": 10,
125127
"output": 20,
128+
"total": 30,
126129
"cache_creation_input_tokens": 0,
127130
"cache_read_input_tokens": 0
128131
}
129132

130133
self.assertEqual(minimal_usage_details["input"], 10)
131134
self.assertEqual(minimal_usage_details["output"], 20)
135+
self.assertEqual(minimal_usage_details["total"], 30)
132136

133137
def test_log_langfuse_v2_usage_details(self):
134138
"""Test that usage_details in _log_langfuse_v2 is correctly typed and assigned"""
@@ -183,13 +187,15 @@ def test_langfuse_usage_details_optional_fields(self):
183187
usage_details: LangfuseUsageDetails = {
184188
"input": 10,
185189
"output": 20,
190+
"total": 30,
186191
"cache_creation_input_tokens": None,
187192
"cache_read_input_tokens": None
188193
}
189194

190195
# Verify fields can be None
191196
self.assertEqual(usage_details["input"], 10)
192197
self.assertEqual(usage_details["output"], 20)
198+
self.assertEqual(usage_details["total"], 30)
193199
self.assertIsNone(usage_details["cache_creation_input_tokens"])
194200
self.assertIsNone(usage_details["cache_read_input_tokens"])
195201

@@ -202,19 +208,22 @@ def test_langfuse_usage_details_structure(self):
202208
usage_details = {
203209
"input": 15,
204210
"output": 25,
211+
"total": 40,
205212
"cache_creation_input_tokens": 7,
206213
"cache_read_input_tokens": 4
207214
}
208215

209216
# Verify the structure matches what we expect
210217
self.assertIn("input", usage_details)
211218
self.assertIn("output", usage_details)
219+
self.assertIn("total", usage_details)
212220
self.assertIn("cache_creation_input_tokens", usage_details)
213221
self.assertIn("cache_read_input_tokens", usage_details)
214222

215223
# Verify the values
216224
self.assertEqual(usage_details["input"], 15)
217225
self.assertEqual(usage_details["output"], 25)
226+
self.assertEqual(usage_details["total"], 40)
218227
self.assertEqual(usage_details["cache_creation_input_tokens"], 7)
219228
self.assertEqual(usage_details["cache_read_input_tokens"], 4)
220229

0 commit comments

Comments
 (0)