From a268711a9cb76e839e26daffc501c8222a25c50b Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:20:21 -0500 Subject: [PATCH 1/6] feat(opencode): configure Cohere North model --- packages/opencode/src/provider/transform.ts | 9 +++++ .../opencode/test/provider/transform.test.ts | 36 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 411afc81b7dd..6cbde3ad9f2d 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -826,6 +826,11 @@ export function variants(model: Provider.Model): Record [effort, { reasoningEffort: effort }]), + ) + } const efforts = [...WIDELY_SUPPORTED_EFFORTS] if (model.api.id.toLowerCase().includes("deepseek-v4")) { efforts.push("max") @@ -1105,6 +1110,10 @@ export function options(input: { } const modelId = input.model.api.id.toLowerCase() + if (modelId === "north-mini-code-1-0" && input.model.api.npm === "@ai-sdk/openai-compatible") { + result["citation_options"] = { mode: "off" } + } + // MiniMax's Anthropic interface defaults thinking off, unlike Chat Completions. if (modelId.includes("minimax-m3") && input.model.api.npm === "@ai-sdk/anthropic") { result["thinking"] = { type: "adaptive" } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index d9a980d966ac..0f453c6a7243 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2483,6 +2483,25 @@ describe("ProviderTransform.message - cache control on gateway", () => { }) }) +describe("ProviderTransform.options - Cohere North", () => { + test("disables citations by default for north-mini-code-1-0", () => { + const result = ProviderTransform.options({ + model: { + id: "cohere/north-mini-code-1-0", + providerID: "cohere", + api: { + id: "north-mini-code-1-0", + url: "https://api.cohere.com/compatibility/v1", + npm: "@ai-sdk/openai-compatible", + }, + capabilities: { reasoning: true }, + } as any, + sessionID: "test-session-123", + }) + expect(result.citation_options).toEqual({ mode: "off" }) + }) +}) + describe("ProviderTransform.variants", () => { const createMockModel = (overrides: Partial = {}): any => ({ id: "test/test-model", @@ -3209,6 +3228,23 @@ describe("ProviderTransform.variants", () => { expect(result.low).toEqual({ reasoningEffort: "low" }) expect(result.high).toEqual({ reasoningEffort: "high" }) }) + + test("north-mini-code-1-0 returns only none and high", () => { + const model = createMockModel({ + id: "cohere/north-mini-code-1-0", + providerID: "cohere", + api: { + id: "north-mini-code-1-0", + url: "https://api.cohere.com/compatibility/v1", + npm: "@ai-sdk/openai-compatible", + }, + }) + const result = ProviderTransform.variants(model) + expect(result).toEqual({ + none: { reasoningEffort: "none" }, + high: { reasoningEffort: "high" }, + }) + }) }) describe("@ai-sdk/azure", () => { From e2999e0779e4846b8cdd2a9681065b326594f808 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:22:20 -0500 Subject: [PATCH 2/6] fix(opencode): loosen Cohere North model match --- packages/opencode/src/provider/transform.ts | 4 ++-- packages/opencode/test/provider/transform.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 6cbde3ad9f2d..14b6afff1a29 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -826,7 +826,7 @@ export function variants(model: Provider.Model): Record [effort, { reasoningEffort: effort }]), ) @@ -1110,7 +1110,7 @@ export function options(input: { } const modelId = input.model.api.id.toLowerCase() - if (modelId === "north-mini-code-1-0" && input.model.api.npm === "@ai-sdk/openai-compatible") { + if (modelId.includes("north-mini-code") && input.model.api.npm === "@ai-sdk/openai-compatible") { result["citation_options"] = { mode: "off" } } diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 0f453c6a7243..29d19edca732 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2490,7 +2490,7 @@ describe("ProviderTransform.options - Cohere North", () => { id: "cohere/north-mini-code-1-0", providerID: "cohere", api: { - id: "north-mini-code-1-0", + id: "North-Mini-Code-1-0-latest", url: "https://api.cohere.com/compatibility/v1", npm: "@ai-sdk/openai-compatible", }, @@ -3234,7 +3234,7 @@ describe("ProviderTransform.variants", () => { id: "cohere/north-mini-code-1-0", providerID: "cohere", api: { - id: "north-mini-code-1-0", + id: "North-Mini-Code-1-0-latest", url: "https://api.cohere.com/compatibility/v1", npm: "@ai-sdk/openai-compatible", }, From eee0b2f00cd03b545005d34a38c3f8ef6773c897 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:23:28 -0500 Subject: [PATCH 3/6] fix(opencode): default Cohere North temperature --- packages/opencode/src/provider/transform.ts | 1 + packages/opencode/test/provider/transform.test.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 14b6afff1a29..cc6d6ba3e196 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -478,6 +478,7 @@ export function message(msgs: ModelMessage[], model: Provider.Model, options: Re export function temperature(model: Provider.Model) { const id = model.id.toLowerCase() + if (id.includes("north-mini-code")) return 1.0 if (id.includes("qwen")) return 0.55 if (id.includes("claude")) return undefined if (id.includes("gemini")) return 1.0 diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 29d19edca732..2fe4af0a116e 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2502,6 +2502,12 @@ describe("ProviderTransform.options - Cohere North", () => { }) }) +describe("ProviderTransform.temperature - Cohere North", () => { + test("defaults north-mini-code models to 1.0", () => { + expect(ProviderTransform.temperature({ id: "cohere/North-Mini-Code-1-0-latest" } as any)).toBe(1.0) + }) +}) + describe("ProviderTransform.variants", () => { const createMockModel = (overrides: Partial = {}): any => ({ id: "test/test-model", From bb75a000cfe1b7053fd74d74568a4d0db99f2ad4 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:37:26 -0500 Subject: [PATCH 4/6] fix issue --- packages/opencode/src/provider/transform.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index cc6d6ba3e196..f787729235c0 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -828,9 +828,7 @@ export function variants(model: Provider.Model): Record [effort, { reasoningEffort: effort }]), - ) + return Object.fromEntries(["none", "high"].map((effort) => [effort, { reasoningEffort: effort }])) } const efforts = [...WIDELY_SUPPORTED_EFFORTS] if (model.api.id.toLowerCase().includes("deepseek-v4")) { @@ -1112,7 +1110,7 @@ export function options(input: { const modelId = input.model.api.id.toLowerCase() if (modelId.includes("north-mini-code") && input.model.api.npm === "@ai-sdk/openai-compatible") { - result["citation_options"] = { mode: "off" } + result["options"] = { citation_options: { mode: "disabled" } } } // MiniMax's Anthropic interface defaults thinking off, unlike Chat Completions. From d7af83827c553fb6a29a1d41acbe788b91879f6b Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:42:09 -0500 Subject: [PATCH 5/6] fix test oops --- packages/opencode/test/provider/transform.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 2fe4af0a116e..c56b24bed1eb 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2498,7 +2498,7 @@ describe("ProviderTransform.options - Cohere North", () => { } as any, sessionID: "test-session-123", }) - expect(result.citation_options).toEqual({ mode: "off" }) + expect(result.citation_options).toEqual({ mode: "disabled" }) }) }) From 84f5e33bbfe584565f5bea28fc232d3a4b0b7553 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 9 Jun 2026 10:53:40 -0500 Subject: [PATCH 6/6] whoops again --- packages/opencode/test/provider/transform.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index c56b24bed1eb..382d38757d3b 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2498,7 +2498,7 @@ describe("ProviderTransform.options - Cohere North", () => { } as any, sessionID: "test-session-123", }) - expect(result.citation_options).toEqual({ mode: "disabled" }) + expect(result.options).toEqual({ citation_options: { mode: "disabled" } }) }) })