diff options
| author | Nicholas Hansen <[email protected]> | 2026-03-24 18:42:20 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-24 13:42:20 -0500 |
| commit | 024979f3fd7bd570526d69ed56151a8b82530a56 (patch) | |
| tree | e0706e3957bca0d6dd98df88ac0533aef0d47982 /packages | |
| parent | bc608fb081d08850a55409443bef66e86bf36bf7 (diff) | |
| download | opencode-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.ts | 5 | ||||
| -rw-r--r-- | packages/opencode/test/provider/transform.test.ts | 37 |
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> = {}) => ({ |
