fix: account for thought tokens on gemini models

This commit is contained in:
Thiago Moretto
2026-01-07 09:03:44 -03:00
parent 0ccc155457
commit c08f218bf8
3 changed files with 8 additions and 0 deletions

View File

@@ -569,6 +569,10 @@ class BaseLLM(ABC):
or usage_data.get("input_tokens")
or 0
)
+ (
usage_data.get("thoughts_token_count")
or 0
)
completion_tokens = (
usage_data.get("completion_tokens")

View File

@@ -982,6 +982,7 @@ class GeminiCompletion(BaseLLM):
usage = response.usage_metadata
return {
"prompt_token_count": getattr(usage, "prompt_token_count", 0),
"thoughts_token_count": getattr(usage, "thoughts_token_count", 0),
"candidates_token_count": getattr(usage, "candidates_token_count", 0),
"total_token_count": getattr(usage, "total_token_count", 0),
"total_tokens": getattr(usage, "total_token_count", 0),

View File

@@ -79,6 +79,7 @@ def test_gemini_tool_use_conversation_flow():
mock_response.text = "Based on the weather data, it's a beautiful day in San Francisco with sunny skies and 75°F temperature."
mock_response.usage_metadata = Mock()
mock_response.usage_metadata.prompt_token_count = 100
mock_response.usage_metadata.thoughts_token_count = 50
mock_response.usage_metadata.candidates_token_count = 50
mock_response.usage_metadata.total_token_count = 150
@@ -630,6 +631,7 @@ def test_gemini_token_usage_tracking():
mock_response.candidates = []
mock_response.usage_metadata = MagicMock(
prompt_token_count=50,
thoughts_token_count=25,
candidates_token_count=25,
total_token_count=75
)
@@ -643,6 +645,7 @@ def test_gemini_token_usage_tracking():
# Verify token usage was extracted
usage = llm._extract_token_usage(mock_response)
assert usage["prompt_token_count"] == 50
assert usage["thoughts_token_count"] == 25
assert usage["candidates_token_count"] == 25
assert usage["total_token_count"] == 75
assert usage["total_tokens"] == 75