Skip to content

Commit 2ec64df

Browse files
committed
fix(opencode-go): reconcile model protocols with zen (CL-10534)
1 parent 40e19ce commit 2ec64df

5 files changed

Lines changed: 51 additions & 13 deletions

File tree

‎packages/opencode-go/src/endpoint.test.ts‎

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ describe("protocolForGoModel", () => {
1616
expect(protocolForGoModel("gpt-5.6-luna")).toBe("responses");
1717
expect(protocolForGoModel("muse-spark-1.3-contributor")).toBe("responses");
1818
expect(protocolForGoModel("muse-spark-1.2-contributor")).toBe("responses");
19-
expect(protocolForGoModel("minimax-m3")).toBe("messages");
19+
expect(protocolForGoModel("minimax-m3")).toBe("chat-completions");
20+
expect(protocolForGoModel("minimax-m2.7")).toBe("chat-completions");
21+
expect(protocolForGoModel("minimax-m2.5")).toBe("chat-completions");
22+
expect(protocolForGoModel("qwen3.8-max")).toBe("chat-completions");
23+
expect(protocolForGoModel("grok-4.5")).toBe("responses");
24+
expect(protocolForGoModel("qwen3.7-max")).toBe("messages");
2025
});
2126

2227
test("returns undefined for unknown models", () => {
@@ -25,7 +30,7 @@ describe("protocolForGoModel", () => {
2530

2631
test("catalog covers chat-completions and messages at minimum", () => {
2732
const protocols = new Set(
28-
["kimi-k2.7-code", "gpt-5.6-luna", "minimax-m3"].map((id) =>
33+
["kimi-k2.7-code", "gpt-5.6-luna", "qwen3.7-max"].map((id) =>
2934
protocolForGoModel(id),
3035
),
3136
);
@@ -63,12 +68,35 @@ describe("resolveGoEndpoint", () => {
6368
});
6469

6570
test("routes messages models to anthropic base", () => {
66-
const ep = resolveGoEndpoint("minimax-m3");
71+
const ep = resolveGoEndpoint("qwen3.7-max");
6772
expect(ep.adapter).toBe("anthropic");
6873
expect(ep.protocol).toBe("messages");
6974
expect(ep.baseURL).toBe("https://opencode.ai/zen/go");
7075
});
7176

77+
test("routes MiniMax models to openai-compatible base (CL-10534)", () => {
78+
for (const id of ["minimax-m3", "minimax-m2.7", "minimax-m2.5"]) {
79+
const ep = resolveGoEndpoint(id);
80+
expect(ep.adapter).toBe("openai-compatible");
81+
expect(ep.protocol).toBe("chat-completions");
82+
expect(ep.baseURL).toContain("/zen/go/v1");
83+
}
84+
});
85+
86+
test("routes grok-4.5 to openai-responses adapter (CL-10534)", () => {
87+
const ep = resolveGoEndpoint("grok-4.5");
88+
expect(ep.adapter).toBe("openai-responses");
89+
expect(ep.protocol).toBe("responses");
90+
expect(ep.baseURL).toContain("/zen/go/v1");
91+
});
92+
93+
test("routes qwen3.8-max to openai-compatible base (CL-10534)", () => {
94+
const ep = resolveGoEndpoint("qwen3.8-max");
95+
expect(ep.adapter).toBe("openai-compatible");
96+
expect(ep.protocol).toBe("chat-completions");
97+
expect(ep.baseURL).toContain("/zen/go/v1");
98+
});
99+
72100
test("unknown models default to chat-completions", () => {
73101
const ep = resolveGoEndpoint("future-model");
74102
expect(ep.adapter).toBe("openai-compatible");
@@ -135,7 +163,8 @@ describe("buildGoCatalogEntry", () => {
135163
const entry = buildGoCatalogEntry();
136164
expect(entry.name).toBe("opencode-go");
137165
expect(entry.models.length).toBeGreaterThan(0);
138-
expect(entry.protocols["minimax-m3"]).toBe("messages");
166+
expect(entry.protocols["minimax-m3"]).toBe("chat-completions");
167+
expect(entry.protocols["qwen3.7-max"]).toBe("messages");
139168
expect(entry.protocols["kimi-k2.7-code"]).toBe("chat-completions");
140169
});
141170
});

‎packages/opencode-go/src/models.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ interface GoModel {
1212
}
1313

1414
export const OPENCODE_GO_MODELS = [
15-
{ id: "grok-4.5", name: "Grok 4.5", protocol: "chat-completions" },
15+
{ id: "grok-4.5", name: "Grok 4.5", protocol: "responses" },
1616
{ id: "gpt-5.6-luna", name: "GPT 5.6 Luna", protocol: "responses" },
1717
{
1818
id: "muse-spark-1.3-contributor",
@@ -45,10 +45,10 @@ export const OPENCODE_GO_MODELS = [
4545
},
4646
{ id: "mimo-v2.5", name: "MiMo-V2.5", protocol: "chat-completions" },
4747
{ id: "mimo-v2.5-pro", name: "MiMo-V2.5-Pro", protocol: "chat-completions" },
48-
{ id: "minimax-m3", name: "MiniMax M3", protocol: "messages" },
49-
{ id: "minimax-m2.7", name: "MiniMax M2.7", protocol: "messages" },
50-
{ id: "minimax-m2.5", name: "MiniMax M2.5", protocol: "messages" },
51-
{ id: "qwen3.8-max", name: "Qwen3.8 Max", protocol: "messages" },
48+
{ id: "minimax-m3", name: "MiniMax M3", protocol: "chat-completions" },
49+
{ id: "minimax-m2.7", name: "MiniMax M2.7", protocol: "chat-completions" },
50+
{ id: "minimax-m2.5", name: "MiniMax M2.5", protocol: "chat-completions" },
51+
{ id: "qwen3.8-max", name: "Qwen3.8 Max", protocol: "chat-completions" },
5252
{ id: "qwen3.7-max", name: "Qwen3.7 Max", protocol: "messages" },
5353
{ id: "qwen3.7-plus", name: "Qwen3.7 Plus", protocol: "messages" },
5454
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus", protocol: "messages" },

‎src/config/inference-sources.test.ts‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,15 @@ describe("protocol flag routing", () => {
470470
expect(chat?.baseURL).toBe("https://opencode.ai/zen/go/v1");
471471
expect(chat?.model).toBe("kimi-k2.7-code");
472472

473+
const minimax = buildInferenceSourceForRef(
474+
{ provider: "opencode-go", model: "minimax-m3" },
475+
ctx,
476+
undefined,
477+
);
478+
expect(minimax?.provider).toBe("opencode-go");
479+
expect(minimax?.baseURL).toBe("https://opencode.ai/zen/go/v1");
480+
expect(minimax?.model).toBe("minimax-m3");
481+
473482
const responses = buildInferenceSourceForRef(
474483
{ provider: "opencode-go", model: "gpt-5.6-luna" },
475484
ctx,
@@ -479,13 +488,13 @@ describe("protocol flag routing", () => {
479488
expect(responses?.baseURL).toBe("https://opencode.ai/zen/go/v1");
480489

481490
const messages = buildInferenceSourceForRef(
482-
{ provider: "opencode-go", model: "minimax-m3" },
491+
{ provider: "opencode-go", model: "qwen3.7-max" },
483492
ctx,
484493
undefined,
485494
);
486495
expect(messages?.provider).toBe("opencode-go-messages");
487496
expect(messages?.baseURL).toBe("https://opencode.ai/zen/go");
488-
expect(messages?.model).toBe("minimax-m3");
497+
expect(messages?.model).toBe("qwen3.7-max");
489498
});
490499
});
491500

‎src/provider/cache-ttl.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ describe("anthropic cache-write stamp", () => {
115115
}),
116116
buildGoSource({
117117
id: "opencode-go",
118-
model: "minimax-m3",
118+
model: "qwen3.7-max",
119119
sessionId: "sess-go",
120120
}),
121121
buildAnthropicSource({

‎src/session/cache-ttl-resume.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ describe("resumed Anthropic cache write does not compact", () => {
280280
}),
281281
buildGoSource({
282282
id: "opencode-go",
283-
model: "minimax-m3",
283+
model: "qwen3.7-max",
284284
sessionId: "sess-go",
285285
}),
286286
buildAnthropicSource({

0 commit comments

Comments
 (0)