Roo Code: Bedrock custom ARN caching (#11983)
Target
src/api/providers/bedrock.ts → guessModelInfoFromId() in
RooCodeInc/Roo-Code.
Tracked upstream as issue #11983; PR #11984 proposes a fix but status uncertain at audit time.
Symptom
When a user configures Bedrock with a custom ARN instead of one of
Roo's hardcoded model IDs, guessModelInfoFromId() returns
{ supportsPromptCache: true } but omits cachableFields. Downstream
the Bedrock provider checks for cachableFields and skips caching
entirely when empty. Net effect: silent 0% cache hit on custom ARNs.
Users hit this when:
- Routing through a Bedrock-hosted Claude model with non-standard ARN
- Using cross-region inference profiles
- Provisioned throughput ARNs
Fix
--- a/src/api/providers/bedrock.ts
+++ b/src/api/providers/bedrock.ts
@@ guessModelInfoFromId(modelId: string)
if (/* claude pattern match */) {
- return { supportsPromptCache: true }
+ return {
+ supportsPromptCache: true,
+ cachableFields: ["system", "messages", "tools"],
+ }
}
Apply this to every branch in guessModelInfoFromId() that returns
supportsPromptCache: true without populating cachableFields.
If PR #11984 is already merged at apply time, verify the fix
matches this shape and skip the diff.
Verify
- Configure Roo with a custom Claude ARN (any ARN not in the declared model list).
- Enable prompt caching in Roo settings.
- Capture wire via mitmproxy.
- Inspect outbound Bedrock Converse API request body:
- Before fix: no
cachePointmarkers anywhere in the request - After fix:
cachePoint: { type: "default" }blocks on system and last stable message
- Before fix: no
- Inspect response
usage:cacheWriteInputTokenCount > 0on cold turncacheReadInputTokenCount > 0on warm turn
Background
Bedrock's Converse API uses a different field name (cachePoint)
than direct Anthropic (cache_control). Roo handles the translation
correctly for declared models but the custom-ARN detection path is
incomplete.
See docs/concepts/bedrock.md. Full audit: audits/roo-code.md.