summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorNicholas Hansen <[email protected]>2026-03-24 18:42:20 +0000
committerGitHub <[email protected]>2026-03-24 13:42:20 -0500
commit024979f3fd7bd570526d69ed56151a8b82530a56 (patch)
treee0706e3957bca0d6dd98df88ac0533aef0d47982 /packages
parentbc608fb081d08850a55409443bef66e86bf36bf7 (diff)
downloadopencode-024979f3fd7bd570526d69ed56151a8b82530a56.tar.gz
opencode-024979f3fd7bd570526d69ed56151a8b82530a56.zip
feat(bedrock): Add token caching for any amazon-bedrock provider (#18959)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/provider/transform.ts5
-rw-r--r--packages/opencode/test/provider/transform.test.ts37
2 files changed, 41 insertions, 1 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index 8298351ae..c37a542a6 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -194,7 +194,10 @@ export namespace ProviderTransform {
}
for (const msg of unique([...system, ...final])) {
- const useMessageLevelOptions = model.providerID === "anthropic" || model.providerID.includes("bedrock")
+ const useMessageLevelOptions =
+ model.providerID === "anthropic" ||
+ model.providerID.includes("bedrock") ||
+ model.api.npm === "@ai-sdk/amazon-bedrock"
const shouldUseContentOptions = !useMessageLevelOptions && Array.isArray(msg.content) && msg.content.length > 0
if (shouldUseContentOptions) {
diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts
index 370edeed3..5ed94e27c 100644
--- a/packages/opencode/test/provider/transform.test.ts
+++ b/packages/opencode/test/provider/transform.test.ts
@@ -1629,6 +1629,43 @@ describe("ProviderTransform.message - claude w/bedrock custom inference profile"
})
})
+describe("ProviderTransform.message - bedrock caching with non-bedrock providerID", () => {
+ test("applies cache options at message level when npm package is amazon-bedrock", () => {
+ const model = {
+ id: "aws/us.anthropic.claude-opus-4-6-v1",
+ providerID: "aws",
+ api: {
+ id: "us.anthropic.claude-opus-4-6-v1",
+ url: "https://bedrock-runtime.us-east-1.amazonaws.com",
+ npm: "@ai-sdk/amazon-bedrock",
+ },
+ name: "Claude Opus 4.6",
+ capabilities: {},
+ options: {},
+ headers: {},
+ } as any
+
+ const msgs = [
+ {
+ role: "system",
+ content: [{ type: "text", text: "You are a helpful assistant" }],
+ },
+ {
+ role: "user",
+ content: [{ type: "text", text: "Hello" }],
+ },
+ ] as any[]
+
+ const result = ProviderTransform.message(msgs, model, {}) as any[]
+
+ // Cache should be at the message level and not the content-part level
+ expect(result[0].providerOptions?.bedrock).toEqual({
+ cachePoint: { type: "default" },
+ })
+ expect(result[0].content[0].providerOptions?.bedrock).toBeUndefined()
+ })
+})
+
describe("ProviderTransform.message - cache control on gateway", () => {
const createModel = (overrides: Partial<any> = {}) =>
({