Repository navigation
fix: count Gemini thoughtsTokenCount as output tokens - #154
Merged
lich0821 merged 1 commit intoOct 27, 2026
Merged
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Gemini reports reasoning tokens in
usageMetadata.thoughtsTokenCount, separate fromcandidatesTokenCount, and bills them as output. The converters only readcandidatesTokenCount, so with a thinking model the output usage reported to the client (and recorded for stats) left the reasoning tokens out.GeminiResponse/GeminiStreamChunkusage metadata now carriesthoughtsTokenCount, and a small helpergeminiOutputTokensreturns candidates plus thoughts. It is used by the non-streaming Claude, OpenAI chat and OpenAI Responses conversions and bysyncGeminiUsageMetadatafor all the streaming ones.total_tokensis untouched: it already comes from Gemini'stotalTokenCount, which includes the thoughts.New tests send a Gemini response with 3 candidate and 7 thought tokens through
GeminiRespToClaude,GeminiRespToOpenAIandGeminiStreamToClaudeand expect 10 output tokens. All three fail onmasterand pass with the change, together with the rest of./internal/transformer/.... Not run against the live Gemini API.This change was prepared with AI assistance (Claude Code).
🤖 Generated with Claude Code