From 42bd981fb03d0f41a9dd1899dd1c88795444f4b1 Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Wed, 15 Apr 2026 06:31:37 +0100 Subject: [PATCH 1/2] fix (core): Enable prompt caching for openai-compatible by default unless disabled. --- packages/opencode/src/provider/transform.ts | 9 +++++- .../opencode/test/provider/transform.test.ts | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index bab056dae784..6abf441c1e85 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -788,7 +788,14 @@ export namespace ProviderTransform { } } - if (input.model.providerID === "openai" || input.providerOptions?.setCacheKey) { + if ( + input.model.providerID === "openai" || + ( + input.model.api.npm === "@ai-sdk/openai-compatible" && + input.providerOptions?.setCacheKey !== false + ) || + input.providerOptions?.setCacheKey === true + ) { result["promptCacheKey"] = input.sessionID } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 1b750d1b932f..0b661dd57d16 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -85,6 +85,36 @@ describe("ProviderTransform.options - setCacheKey", () => { expect(result.promptCacheKey).toBe(sessionID) }) + test("should set promptCacheKey for openai-compatible provider when setCacheKey not present", () => { + const openaiModel = { + ...mockModel, + providerID: "openai-compatible", + api: { + id: "gpt-4", + url: "https://api.openai.com", + npm: "@ai-sdk/openai-compatible", + }, + } + const result = ProviderTransform.options({ model: openaiModel, sessionID, providerOptions: {} }) + expect(result.promptCacheKey).toBe(sessionID) + }) + + test("should not set promptCacheKey for openai-compatible provider when setCacheKey is false", () => { + const openaiModel = { + ...mockModel, + providerID: "openai-compatible", + api: { + id: "gpt-4", + url: "https://api.openai.com", + npm: "@ai-sdk/openai-compatible", + }, + providerOptions: { setCacheKey: false }, + } + const result = ProviderTransform.options({ model: openaiModel, sessionID, providerOptions: {} }) + expect(result.promptCacheKey).toBeUndefined() + }) + + test("should set store=false for openai provider", () => { const openaiModel = { ...mockModel, From d8d1de1bdd7d232a4037cdcb2c600721ce8c741b Mon Sep 17 00:00:00 2001 From: Shantur Rathore Date: Wed, 15 Apr 2026 15:26:29 +0100 Subject: [PATCH 2/2] Fix tests --- packages/opencode/src/provider/transform.ts | 3 +++ packages/opencode/test/provider/transform.test.ts | 9 ++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 6abf441c1e85..a9edde9908a6 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -797,6 +797,9 @@ export namespace ProviderTransform { input.providerOptions?.setCacheKey === true ) { result["promptCacheKey"] = input.sessionID + if ("setCacheKey" in input.providerOptions) { + delete input.providerOptions["setCacheKey"] + } } if (input.model.api.npm === "@ai-sdk/google" || input.model.api.npm === "@ai-sdk/google-vertex") { diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 0b661dd57d16..c917c05db646 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -85,7 +85,7 @@ describe("ProviderTransform.options - setCacheKey", () => { expect(result.promptCacheKey).toBe(sessionID) }) - test("should set promptCacheKey for openai-compatible provider when setCacheKey not present", () => { + test("should set promptCacheKey for openai-compatible provider when setCacheKey not present and setCacheKey not present", () => { const openaiModel = { ...mockModel, providerID: "openai-compatible", @@ -99,7 +99,7 @@ describe("ProviderTransform.options - setCacheKey", () => { expect(result.promptCacheKey).toBe(sessionID) }) - test("should not set promptCacheKey for openai-compatible provider when setCacheKey is false", () => { + test("should not set promptCacheKey for openai-compatible provider when setCacheKey is false and setCacheKey not present in result", () => { const openaiModel = { ...mockModel, providerID: "openai-compatible", @@ -107,10 +107,9 @@ describe("ProviderTransform.options - setCacheKey", () => { id: "gpt-4", url: "https://api.openai.com", npm: "@ai-sdk/openai-compatible", - }, - providerOptions: { setCacheKey: false }, + } } - const result = ProviderTransform.options({ model: openaiModel, sessionID, providerOptions: {} }) + const result = ProviderTransform.options({ model: openaiModel, sessionID, providerOptions: { setCacheKey: false } }) expect(result.promptCacheKey).toBeUndefined() })