fix(opencode-zen): keep legacy aliases + rationale (#669) (thanks @magimetal)
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
- Onboarding/Models: add first-class Z.AI (GLM) auth choice (`zai-api-key`) + `--zai-api-key` flag.
|
||||
- Agents: add human-delay pacing between block replies (modes: off/natural/custom, per-agent configurable). (#446) — thanks @tony-freedomology.
|
||||
- Onboarding/Models: add catalog-backed default model picker to onboarding + configure. (#611) — thanks @jonasjancarik.
|
||||
- Agents/OpenCode Zen: update fallback models + defaults, keep legacy alias mappings. (#669) — thanks @magimetal.
|
||||
|
||||
### Fixes
|
||||
- Auto-reply: prefer `RawBody` for command/directive parsing (WhatsApp + Discord) and prevent fallback runs from clobbering concurrent session updates. (#643) — thanks @mcinteerj.
|
||||
|
||||
@@ -12,6 +12,14 @@ describe("resolveOpencodeZenAlias", () => {
|
||||
expect(resolveOpencodeZenAlias("opus")).toBe("claude-opus-4-5");
|
||||
});
|
||||
|
||||
it("keeps legacy aliases working", () => {
|
||||
expect(resolveOpencodeZenAlias("sonnet")).toBe("claude-opus-4-5");
|
||||
expect(resolveOpencodeZenAlias("haiku")).toBe("claude-opus-4-5");
|
||||
expect(resolveOpencodeZenAlias("gpt4")).toBe("gpt-5.1");
|
||||
expect(resolveOpencodeZenAlias("o1")).toBe("gpt-5.2");
|
||||
expect(resolveOpencodeZenAlias("gemini-2.5")).toBe("gemini-3-pro");
|
||||
});
|
||||
|
||||
it("resolves gpt5 alias", () => {
|
||||
expect(resolveOpencodeZenAlias("gpt5")).toBe("gpt-5.2");
|
||||
});
|
||||
@@ -88,5 +96,12 @@ describe("OPENCODE_ZEN_MODEL_ALIASES", () => {
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.gemini).toBe("gemini-3-pro");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.glm).toBe("glm-4.7-free");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.minimax).toBe("minimax-m2.1-free");
|
||||
|
||||
// Legacy aliases (kept for backward compatibility).
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.sonnet).toBe("claude-opus-4-5");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.haiku).toBe("claude-opus-4-5");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.gpt4).toBe("gpt-5.1");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES.o1).toBe("gpt-5.2");
|
||||
expect(OPENCODE_ZEN_MODEL_ALIASES["gemini-2.5"]).toBe("gemini-3-pro");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -27,12 +27,29 @@ export const OPENCODE_ZEN_MODEL_ALIASES: Record<string, string> = {
|
||||
// Claude
|
||||
opus: "claude-opus-4-5",
|
||||
"opus-4.5": "claude-opus-4-5",
|
||||
"opus-4": "claude-opus-4-5",
|
||||
|
||||
// Legacy Claude aliases (OpenCode Zen rotates model catalogs; keep old keys working).
|
||||
sonnet: "claude-opus-4-5",
|
||||
"sonnet-4": "claude-opus-4-5",
|
||||
haiku: "claude-opus-4-5",
|
||||
"haiku-3.5": "claude-opus-4-5",
|
||||
|
||||
// GPT-5.x family
|
||||
gpt5: "gpt-5.2",
|
||||
"gpt-5": "gpt-5.2",
|
||||
"gpt-5.1": "gpt-5.1",
|
||||
|
||||
// Legacy GPT aliases (keep old config/docs stable; map to closest current equivalents).
|
||||
gpt4: "gpt-5.1",
|
||||
"gpt-4": "gpt-5.1",
|
||||
"gpt-mini": "gpt-5.1-codex-mini",
|
||||
|
||||
// Legacy O-series aliases (no longer in the Zen catalog; map to a strong default).
|
||||
o1: "gpt-5.2",
|
||||
o3: "gpt-5.2",
|
||||
"o3-mini": "gpt-5.1-codex-mini",
|
||||
|
||||
// Codex family
|
||||
codex: "gpt-5.1-codex",
|
||||
"codex-mini": "gpt-5.1-codex-mini",
|
||||
@@ -45,6 +62,11 @@ export const OPENCODE_ZEN_MODEL_ALIASES: Record<string, string> = {
|
||||
flash: "gemini-3-flash",
|
||||
"gemini-flash": "gemini-3-flash",
|
||||
|
||||
// Legacy Gemini 2.5 aliases (map to the nearest current Gemini tier).
|
||||
"gemini-2.5": "gemini-3-pro",
|
||||
"gemini-2.5-pro": "gemini-3-pro",
|
||||
"gemini-2.5-flash": "gemini-3-flash",
|
||||
|
||||
// GLM (free + alpha)
|
||||
glm: "glm-4.7-free",
|
||||
"glm-free": "glm-4.7-free",
|
||||
@@ -161,6 +183,7 @@ function buildModelDefinition(modelId: string): ModelDefinitionConfig {
|
||||
id: modelId,
|
||||
name: formatModelName(modelId),
|
||||
api: resolveOpencodeZenModelApi(modelId),
|
||||
// Treat Zen models as reasoning-capable so defaults pick thinkLevel="low" unless users opt out.
|
||||
reasoning: true,
|
||||
input: supportsImageInput(modelId) ? ["text", "image"] : ["text"],
|
||||
cost: MODEL_COSTS[modelId] ?? DEFAULT_COST,
|
||||
|
||||
Reference in New Issue
Block a user