From 827469c725aa0f0931b1ee211d7db1413c132dc9 Mon Sep 17 00:00:00 2001 From: Dominik Engelhardt Date: Fri, 25 Jul 2025 18:19:44 +0200 Subject: [PATCH] fix: apply content-level caching for non-anthropic providers (#1305) --- packages/opencode/src/provider/transform.ts | 41 +++++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 9f3cf620..50f9bbfa 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -7,21 +7,38 @@ export namespace ProviderTransform { const system = msgs.filter((msg) => msg.role === "system").slice(0, 2) const final = msgs.filter((msg) => msg.role !== "system").slice(-2) + const providerOptions = { + anthropic: { + cacheControl: { type: "ephemeral" }, + }, + openrouter: { + cache_control: { type: "ephemeral" }, + }, + bedrock: { + cachePoint: { type: "ephemeral" }, + }, + openaiCompatible: { + cache_control: { type: "ephemeral" }, + }, + } + for (const msg of unique([...system, ...final])) { + const shouldUseContentOptions = providerID !== "anthropic" && Array.isArray(msg.content) && msg.content.length > 0 + + if (shouldUseContentOptions) { + const lastContent = msg.content[msg.content.length - 1] + if (lastContent && typeof lastContent === "object") { + lastContent.providerOptions = { + ...lastContent.providerOptions, + ...providerOptions, + } + continue + } + } + msg.providerOptions = { ...msg.providerOptions, - anthropic: { - cacheControl: { type: "ephemeral" }, - }, - openrouter: { - cache_control: { type: "ephemeral" }, - }, - bedrock: { - cachePoint: { type: "ephemeral" }, - }, - openaiCompatible: { - cache_control: { type: "ephemeral" }, - }, + ...providerOptions, } } }