Skip to content

fix(anthropic): cached token double-counting in OpenAI-to-Anthropic response transformation #351

Description

@praxis-bot

build_usage in apis/src/anthropic/to_openai/response.rs sets Anthropic
input_tokens to OpenAI prompt_tokens (which includes cached tokens),
then separately sets cache_read_input_tokens. In Anthropic's API contract,
input_tokens excludes cached tokens.

Downstream parse_anthropic in token_usage/providers.rs sums
input_tokens + cache_read_input_tokens, double-counting cached tokens.
Clients receiving this transformed response also see inflated input_tokens.

Impact: Incorrect token counts in billing dashboards and cost tracking
for Anthropic-translated responses.

Fix: Subtract cached_tokens from prompt_tokens when building
input_tokens:

let input_tokens = if let Some(cached) = cache_read {
    prompt_tokens.saturating_sub(cached)
} else {
    prompt_tokens
};

Metadata

Metadata

Assignees

Labels

HUMAN REVIEWEDHas been reviewed by a human and considered a valid buggood first issueGood for newcomers

Type

Fields

No fields configured for Bug.

Projects

Status
Done

Relationships

None yet

Development

No branches or pull requests

Issue actions