From 02bb5d43cc732e1c3abe96d91d5efa976bc5ad49 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Thu, 19 Feb 2026 14:49:51 +0900 Subject: [PATCH] refactor(models): expand provider listings for robust fuzzy matching Add alternative providers to free-tier and cross-provider models: - k2p5: add friendli as alternative to kimi-for-coding - kimi-k2.5-free, minimax-m2.5-free, big-pickle, gpt-5-nano: add opencode-zen-abuse - grok-code-fast-1: add venice as alternative to github-copilot - glm-5: add opencode as alternative to zai-coding-plan --- .../__snapshots__/model-fallback.test.ts.snap | 20 ++++----- src/shared/model-requirements.ts | 42 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/cli/__snapshots__/model-fallback.test.ts.snap b/src/cli/__snapshots__/model-fallback.test.ts.snap index 07a15ffe6..eb339823c 100644 --- a/src/cli/__snapshots__/model-fallback.test.ts.snap +++ b/src/cli/__snapshots__/model-fallback.test.ts.snap @@ -83,7 +83,7 @@ exports[`generateModelConfig single native provider uses Claude models when only "variant": "max", }, "multimodal-looker": { - "model": "anthropic/claude-haiku-4-5", + "model": "opencode/big-pickle", }, "oracle": { "model": "anthropic/claude-opus-4-6", @@ -145,7 +145,7 @@ exports[`generateModelConfig single native provider uses Claude models with isMa "variant": "max", }, "multimodal-looker": { - "model": "anthropic/claude-haiku-4-5", + "model": "opencode/big-pickle", }, "oracle": { "model": "anthropic/claude-opus-4-6", @@ -325,7 +325,7 @@ exports[`generateModelConfig single native provider uses Gemini models when only "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { "atlas": { - "model": "google/gemini-3-pro", + "model": "opencode/big-pickle", }, "explore": { "model": "opencode/gpt-5-nano", @@ -386,7 +386,7 @@ exports[`generateModelConfig single native provider uses Gemini models with isMa "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json", "agents": { "atlas": { - "model": "google/gemini-3-pro", + "model": "opencode/big-pickle", }, "explore": { "model": "opencode/gpt-5-nano", @@ -617,7 +617,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models when on "variant": "medium", }, "multimodal-looker": { - "model": "opencode/gemini-3-flash", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "opencode/gpt-5.2", @@ -691,7 +691,7 @@ exports[`generateModelConfig fallback providers uses OpenCode Zen models with is "variant": "medium", }, "multimodal-looker": { - "model": "opencode/gemini-3-flash", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "opencode/gpt-5.2", @@ -1025,7 +1025,7 @@ exports[`generateModelConfig mixed provider scenarios uses Claude + OpenCode Zen "variant": "medium", }, "multimodal-looker": { - "model": "opencode/gemini-3-flash", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "opencode/gpt-5.2", @@ -1300,7 +1300,7 @@ exports[`generateModelConfig mixed provider scenarios uses all fallback provider "variant": "medium", }, "multimodal-looker": { - "model": "github-copilot/gemini-3-flash-preview", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "github-copilot/gpt-5.2", @@ -1374,7 +1374,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers togethe "variant": "medium", }, "multimodal-looker": { - "model": "google/gemini-3-flash", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "openai/gpt-5.2", @@ -1448,7 +1448,7 @@ exports[`generateModelConfig mixed provider scenarios uses all providers with is "variant": "medium", }, "multimodal-looker": { - "model": "google/gemini-3-flash", + "model": "opencode/kimi-k2.5-free", }, "oracle": { "model": "openai/gpt-5.2", diff --git a/src/shared/model-requirements.ts b/src/shared/model-requirements.ts index b8b8a40a9..d012952bf 100644 --- a/src/shared/model-requirements.ts +++ b/src/shared/model-requirements.ts @@ -16,10 +16,10 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { sisyphus: { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, - { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, - { providers: ["zai-coding-plan"], model: "glm-5" }, - { providers: ["opencode"], model: "big-pickle" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "kimi-k2.5-free" }, + { providers: ["zai-coding-plan", "opencode"], model: "glm-5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "big-pickle" }, ], requiresAnyModel: true, }, @@ -38,23 +38,23 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { }, librarian: { fallbackChain: [ - { providers: ["opencode"], model: "minimax-m2.5-free" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "minimax-m2.5-free" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, - { providers: ["opencode"], model: "big-pickle" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "big-pickle" }, ], }, explore: { fallbackChain: [ - { providers: ["github-copilot"], model: "grok-code-fast-1" }, - { providers: ["opencode"], model: "minimax-m2.5-free" }, + { providers: ["github-copilot", "venice"], model: "grok-code-fast-1" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "minimax-m2.5-free" }, { providers: ["anthropic", "opencode"], model: "claude-haiku-4-5" }, - { providers: ["opencode"], model: "gpt-5-nano" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "gpt-5-nano" }, ], }, "multimodal-looker": { fallbackChain: [ - { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "kimi-k2.5-free" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" }, { providers: ["zai-coding-plan"], model: "glm-4.6v" }, @@ -64,16 +64,16 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" }, - { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "kimi-k2.5-free" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-pro" }, ], }, metis: { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, - { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "kimi-k2.5-free" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-pro", variant: "high" }, ], @@ -87,8 +87,8 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { }, atlas: { fallbackChain: [ - { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "kimi-k2.5-free" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" }, ], @@ -99,9 +99,9 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record = { "visual-engineering": { fallbackChain: [ { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-pro", variant: "high" }, - { providers: ["zai-coding-plan"], model: "glm-5" }, + { providers: ["zai-coding-plan", "opencode"], model: "glm-5" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, - { providers: ["kimi-for-coding"], model: "k2p5" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, ], }, ultrabrain: { @@ -131,7 +131,7 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record = { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, - { providers: ["opencode"], model: "gpt-5-nano" }, + { providers: ["opencode", "opencode-zen-abuse"], model: "gpt-5-nano" }, ], }, "unspecified-low": { @@ -150,7 +150,7 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record = { }, writing: { fallbackChain: [ - { providers: ["kimi-for-coding"], model: "k2p5" }, + { providers: ["kimi-for-coding", "friendli"], model: "k2p5" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }, ],