diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 407c2687825d..e226a7ebc1ca 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -180,7 +180,7 @@ export namespace ProviderTransform { cacheControl: { type: "ephemeral" }, }, openrouter: { - cacheControl: { type: "ephemeral" }, + cacheControl: { type: "ephemeral", ttl: "1h" }, }, bedrock: { cachePoint: { type: "default" }, diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 9dde1a7131e8..f8a16395ec14 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -101,6 +101,20 @@ describe("ProviderTransform.options - setCacheKey", () => { }) expect(result.store).toBe(false) }) + + test("should set prompt_cache_key for openrouter provider", () => { + const model = { + ...mockModel, + providerID: "openrouter", + api: { + id: "anthropic/claude-sonnet-4-5", + url: "https://openrouter.ai/api/v1", + npm: "@openrouter/ai-sdk-provider", + }, + } + const result = ProviderTransform.options({ model, sessionID, providerOptions: {} }) + expect(result.prompt_cache_key).toBe(sessionID) + }) }) describe("ProviderTransform.options - gpt-5 textVerbosity", () => { @@ -1608,6 +1622,7 @@ describe("ProviderTransform.message - cache control on gateway", () => { openrouter: { cacheControl: { type: "ephemeral", + ttl: "1h", }, }, bedrock: {