Skip to content

fix(aiclient): count Claude streaming usage once - #3247

Open
alexcastgonz (pcbeingused333) wants to merge 1 commit into
microsoft:mainfrom
pcbeingused333:fix/claude-usage-double-count
Open

alexcastgonz (pcbeingused333) wants to merge 1 commit into
microsoft:mainfrom
pcbeingused333:fix/claude-usage-double-count

Conversation

@pcbeingused333

Copy link
Copy Markdown

Claude (Messages API) streaming token usage and cost were counted twice.

Root cause

MessagesWireApiProvider's stream decoder returned a usage piece for both message_start (input/cache counts, output ≈ 1) and message_delta (cumulative output). The streaming loop in openai.ts adds every piece's usage to TokenCounter and the usage callback, so Claude streams counted the input (and cache) tokens twice, inflating token totals and cost.

Fix

The decoder remembers the message_start usage and emits a single combined usage on message_delta (input/cache from the start event unless the delta supplies them, output from the delta).

Test

Added a decoder test in providerAdapter.spec.ts feeding message_start then message_delta: no usage on start, one combined usage on delta. Fails before the change (usage emitted on start), passes after.


This change was prepared with the assistance of an AI coding agent (Claude).

The Messages stream decoder emitted usage on both message_start and
message_delta, so TokenCounter and usage callbacks added the input
tokens twice. Keep the message_start usage and emit one combined usage
on message_delta.
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant