Repository navigation
Conversation
123XieC
requested review from
SergeyMenshykh,
Eduard van Valkenburg (eavanvalkenburg),
Roger Barreto (rogerbarreto) and
westey (westey-m)
as code owners
November 3, 2026 03:15
123XieC
temporarily deployed
to
github-app-auth
November 3, 2026 03:15 — with
GitHub Actions
Inactive
123XieC
requested review from
Darren Cohen (dargilco),
Jose Alvarez (jpalvarezl) and
sophia-ramsey
as code owners
November 3, 2026 03:15
123XieC
had a problem deploying
to
github-app-auth
November 3, 2026 03:15 — with
GitHub Actions
Error
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues were identified in the Bedrock and Claude cache-token accounting changes.
No open issues 🎉
What changed in this PR
Extends the cache-token accounting fix from #9859 to the Bedrock and Claude connectors, addressing #9988 and aligning input usage with other providers.
Changes:
- Include cache read and write/creation tokens in both connectors’
input_token_count, preserving separate cache counters. - Compute Claude’s
total_token_countfrom the inclusive input count plus output tokens. - Update existing cache-token tests to assert the corrected counts.
| File | Description |
|---|---|
python/packages/claude/tests/test_claude_agent.py |
Updates expected input and total counts to include cached tokens. |
python/packages/claude/agent_framework_claude/_agent.py |
Includes cache creation and read tokens in input and total usage. |
python/packages/bedrock/tests/test_bedrock_client.py |
Updates the expected input count to include cached tokens. |
python/packages/bedrock/agent_framework_bedrock/_chat_client.py |
Includes cache read and write tokens in input usage. |
Review effort: Balanced
This branch was successfully deployed
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.
Motivation & Context
Same root cause as #9808 (AnthropicClient, fixed by #9859), in two more connectors that #9859 did not touch.
BedrockChatClient._parse_usagemaps ConverseinputTokenstoinput_token_count. With prompt caching, Bedrock reports cache reads/writes separately incacheReadInputTokens/cacheWriteInputTokens, andinputTokenscovers only the uncached part. So on main the usage is internally inconsistent (input 12 + output 40 but total 9352).ClaudeAgentbuildsinput_token_countfrom the Claude Agent SDKResultMessage.usage["input_tokens"], which is Anthropic's uncached-only field, and computestotal_token_count = input + output, so both undercount.input_token_countis total input for the OpenAI and Gemini clients and is exported asgen_ai.usage.input_tokens, which the OTel GenAI semconv says should include cached tokens.Description & Review Guide
_parse_usage): sumcacheReadInputTokens+cacheWriteInputTokensintoinput_token_count. Cache-specific fields are unchanged.ClaudeAgent): sumcache_creation_input_tokens+cache_read_input_tokensintoinput_token_count, and derivetotal_token_countfrom the inclusive input total. Cache-specific fields are unchanged.test_parse_usage_surfaces_cache_tokens:input_token_count10 → 21.test_run_captures_result_message_usage_and_finish_reason:input_token_count42 → 50,total_token_count60 → 68.No new tests were added because the existing tests already cover the cache-token paths and their updated assertions verify the fix.
Verification
python -m pytest python/packages/bedrock/tests/test_bedrock_client.py -q→ all pass, including the updatedtest_parse_usage_surfaces_cache_tokens.python -m pytest python/packages/claude/tests/test_claude_agent.py -q→ all pass, including the updatedtest_run_captures_result_message_usage_and_finish_reason.Related Issue
Fixes #9988
AI Assistance
AI assistance details: locating the two connectors' usage parsing, and drafting the minimal change following the already-merged #9859 pattern. I reproduced the undercount locally and ran the updated tests myself.