Why did OpenTelemetry split its token-usage metric into separate counters?

Because the metric it replaced, gen_ai.client.token.usage, silently mixed input and output tokens into one histogram keyed by a gen_ai.token.type attribute, so summing it without filtering by that type double-counted every call, and it had no way to record cache or reasoning tokens at all. A September 2026 change split it into five separate, monotonic per-modality counters, input, output, cache-read input, cache-write input, and reasoning output, plus two per-operation histograms for the distribution across calls rather than a running total.

The gap mattered because those two blind spots are exactly what makes a bill hard to reason about. Reasoning tokens on an extended-thinking call and cache reads on a repeated prompt each cost differently from a plain input token, and tracking what actually drives an agent’s spend needs to see each of those on its own rather than folded into one number a type filter has to unpack first.

The change removes the old histogram and its gen_ai.token.type attribute outright rather than keeping both, so a collector still reading the old field against an updated exporter gets nothing. Embeddings usage, which the old histogram covered, has no replacement yet; it’s left uncovered until its own follow-up metric ships.

sources

keep reading

More on this.

Two ways to run Tessary.

Tessary is an open-source agent reliability platform. Cloud and self-hosted run the same workflow on the OpenTelemetry traces your agent already emits.

Tessary Cloud

We host it for you. Send your first trace with nothing to deploy and no model key.

what's includedper organization
traces
10,000 per calendar month
stored trace data
1 GB
retention
30 days
model credit
$10, one-time, for triage and root-cause analysis
credit card
not required

Self-hosted Tessary

Run the open-source code on your own infrastructure with one command. Add your own model key for triage and root-cause analysis.

Self-host Tessary for me by following https://github.com/tessaryai/tessary/blob/main/setup.md

docker compose -f oci://docker.io/tessaryai/tessary:compose up -d -y