diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index bab056dae784..a9edde9908a6 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -788,8 +788,18 @@ 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 + 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 1b750d1b932f..c917c05db646 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -85,6 +85,35 @@ describe("ProviderTransform.options - setCacheKey", () => { expect(result.promptCacheKey).toBe(sessionID) }) + test("should set promptCacheKey for openai-compatible provider when setCacheKey not present and 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 and setCacheKey not present in result", () => { + 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: { setCacheKey: false } }) + expect(result.promptCacheKey).toBeUndefined() + }) + + test("should set store=false for openai provider", () => { const openaiModel = { ...mockModel,