[bot] Anthropic Messages API: `usage.output_tokens_details.thinking_tokens` not captured in span metrics
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- ruby
- Ambito
- observability
Direzione di ricerca
Inizia da Common.parse_usage_tokens in lib/braintrust/contrib/anthropic/instrumentation/common.rb, quindi segui i relativi chiamanti in messages.rb e beta_messages.rb, inclusa la finalizzazione dello streaming. Conferma come i campi di utilizzo esistenti diventano metriche dello span e verifica che output_tokens_details.thinking_tokens venga acquisito sia per la strumentazione stabile sia per quella beta della Messages API.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Anthropic SDK v1.44.0 added usage.output_tokens_details to Messages API responses. This nested object contains thinking_tokens — the number of output tokens consumed by extended thinking/reasoning. The Braintrust Ruby SDK does not capture this field. Users who enable extended thinking via anthropic.messages.create(thinking: {...}, ...) or via the beta messages API have no visibility into their thinking token consumption.
This is distinct from issue #164 (RubyLLM extended thinking), which covers the ruby_llm gem. This issue covers the direct anthropic gem instrumentation.
What is missing
The Anthropic Messages API now returns:
"usage": {
"input_tokens": 2095,
"output_tokens": 503,
"cache_creation_input_tokens": 2051,
"cache_read_input_tokens": 2051,
"output_tokens_details": {
"thinking_tokens": 312
}
}
output_tokens_details.thinking_tokens is the count of tokens the model generated as internal reasoning (always ≤ output_tokens). Capturing it allows users to:
- Attribute cost to extended thinking vs. standard output
- Diagnose cases where reasoning dominates total output tokens
- Compare thinking token spend across requests
Why it is dropped today
Common.parse_usage_tokens in lib/braintrust/contrib/anthropic/instrumentation/common.rb iterates over the top-level usage hash and skips any value that is not Numeric:
usage_hash.each do |key, value|
next unless value.is_a?(Numeric) # ← skips output_tokens_details (a Hash)
...
end
output_tokens_details maps to {thinking_tokens: 312}, which fails the Numeric check and is silently dropped. No field in the existing field_map covers it.
The same gap applies to both the stable Messages API instrumentation (messages.rb) and the beta Messages API instrumentation (beta_messages.rb), since both delegate to Common.parse_usage_tokens.
Braintrust docs status
not_found — The Braintrust Anthropic integration docs at https://www.braintrust.dev/docs/providers/anthropic list prompt_tokens, completion_tokens, and cache metrics as captured but do not mention thinking tokens or output_tokens_details.
Upstream sources
- Anthropic Messages API reference —
usage.output_tokens_details.thinking_tokensfield: https://platform.claude.com/docs/en/api/messages - Anthropic Ruby SDK changelog — v1.44.0 added
output_tokens_detailsand mid-conversation usage details: https://github.com/anthropics/anthropic-sdk-ruby/blob/main/CHANGELOG.md
Local files inspected
lib/braintrust/contrib/anthropic/instrumentation/common.rb—parse_usage_tokensmethod (lines 14–48): 4-fieldfield_map;Numericguard silently drops nested objects likeoutput_tokens_detailslib/braintrust/contrib/anthropic/instrumentation/messages.rb—set_metrics(line 132) callsCommon.parse_usage_tokens; also captures streaming output viafinalize_stream_spanlib/braintrust/contrib/anthropic/instrumentation/beta_messages.rb— sameparse_usage_tokenscall pattern
- Lingua principale
- Ruby
- Stelle
- 9
- Fork
- 10
- Merge medio
- 6h 8m
- PR unite (30g)
- 3
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di braintrustdata/braintrust-sdk-ruby
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
[BOT ISSUE] OpenAI Chat Completions missing reasoning model and web search metadata parameters Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
Tutte le issue di braintrustdata/braintrust-sdk-ruby
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
simp/pupmod-simp-simp#395 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
simp/pupmod-simp-rsyslog#219 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
simp/pupmod-simp-pupmod#256 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
simp/pupmod-simp-sudo#150 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100