diff --git a/src/cli/model-fallback-requirements.ts b/src/cli/model-fallback-requirements.ts index 5a2082145..5641d8bc3 100644 --- a/src/cli/model-fallback-requirements.ts +++ b/src/cli/model-fallback-requirements.ts @@ -9,7 +9,6 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record = { 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-4.7" }, { providers: ["opencode"], model: "glm-4.7-free" }, ], @@ -45,12 +44,9 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record = { "multimodal-looker": { fallbackChain: [ { providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" }, - { 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" }, { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, - { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" }, + { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, + { providers: ["zai-coding-plan"], model: "glm-4.6v" }, { providers: ["opencode"], model: "gpt-5-nano" }, ], }, @@ -58,7 +54,6 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record = { 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: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }, ], @@ -67,7 +62,6 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record = { 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: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" }, ], @@ -82,7 +76,6 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record = { atlas: { fallbackChain: [ { providers: ["kimi-for-coding"], model: "k2p5" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-5" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }, diff --git a/src/shared/model-requirements.test.ts b/src/shared/model-requirements.test.ts index 7ea027dde..f0fa96f65 100644 --- a/src/shared/model-requirements.test.ts +++ b/src/shared/model-requirements.test.ts @@ -31,7 +31,7 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { // #then - fallbackChain has claude-opus-4-6 first, big-pickle last expect(sisyphus).toBeDefined() expect(sisyphus.fallbackChain).toBeArray() - expect(sisyphus.fallbackChain).toHaveLength(4) + expect(sisyphus.fallbackChain).toHaveLength(3) expect(sisyphus.requiresAnyModel).toBe(true) const primary = sisyphus.fallbackChain[0] @@ -39,7 +39,7 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(primary.model).toBe("claude-opus-4-6") expect(primary.variant).toBe("max") - const last = sisyphus.fallbackChain[3] + const last = sisyphus.fallbackChain[2] expect(last.providers[0]).toBe("opencode") expect(last.model).toBe("big-pickle") }) @@ -91,10 +91,10 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { const multimodalLooker = AGENT_MODEL_REQUIREMENTS["multimodal-looker"] // when - accessing multimodal-looker requirement - // then - fallbackChain exists with gpt-5.3-codex first, gemini-3-flash second, gpt-5-nano last + // then - fallbackChain: gpt-5.3-codex -> k2p5 -> gemini-3-flash -> glm-4.6v -> gpt-5-nano expect(multimodalLooker).toBeDefined() expect(multimodalLooker.fallbackChain).toBeArray() - expect(multimodalLooker.fallbackChain).toHaveLength(6) + expect(multimodalLooker.fallbackChain).toHaveLength(5) const primary = multimodalLooker.fallbackChain[0] expect(primary.providers).toEqual(["openai", "opencode"]) @@ -102,9 +102,13 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(primary.variant).toBe("medium") const secondary = multimodalLooker.fallbackChain[1] - expect(secondary.model).toBe("gemini-3-flash") + expect(secondary.providers).toEqual(["kimi-for-coding"]) + expect(secondary.model).toBe("k2p5") - const last = multimodalLooker.fallbackChain[5] + const tertiary = multimodalLooker.fallbackChain[2] + expect(tertiary.model).toBe("gemini-3-flash") + + const last = multimodalLooker.fallbackChain[4] expect(last.providers).toEqual(["openai", "github-copilot", "opencode"]) expect(last.model).toBe("gpt-5-nano") }) @@ -157,19 +161,19 @@ describe("AGENT_MODEL_REQUIREMENTS", () => { expect(primary.providers[0]).toBe("openai") }) - test("atlas has valid fallbackChain with kimi-k2.5-free as primary", () => { + test("atlas has valid fallbackChain with claude-sonnet-4-6 as primary", () => { // given - atlas agent requirement const atlas = AGENT_MODEL_REQUIREMENTS["atlas"] // when - accessing Atlas requirement - // then - fallbackChain exists with kimi-k2.5-free as first entry + // then - fallbackChain exists with claude-sonnet-4-6 as first entry expect(atlas).toBeDefined() expect(atlas.fallbackChain).toBeArray() expect(atlas.fallbackChain.length).toBeGreaterThan(0) const primary = atlas.fallbackChain[0] - expect(primary.model).toBe("kimi-k2.5-free") - expect(primary.providers[0]).toBe("opencode") + expect(primary.model).toBe("claude-sonnet-4-6") + expect(primary.providers[0]).toBe("anthropic") }) test("hephaestus supports openai, github-copilot, venice, and opencode providers", () => { @@ -339,27 +343,23 @@ describe("CATEGORY_MODEL_REQUIREMENTS", () => { expect(primary.providers[0]).toBe("google") }) - test("writing has valid fallbackChain with kimi-k2.5-free as primary", () => { + test("writing has valid fallbackChain with gemini-3-flash as primary", () => { // given - writing category requirement const writing = CATEGORY_MODEL_REQUIREMENTS["writing"] // when - accessing writing requirement - // then - fallbackChain: kimi-k2.5-free -> gemini-3-flash -> claude-sonnet-4-6 + // then - fallbackChain: gemini-3-flash -> claude-sonnet-4-6 expect(writing).toBeDefined() expect(writing.fallbackChain).toBeArray() - expect(writing.fallbackChain).toHaveLength(3) + expect(writing.fallbackChain).toHaveLength(2) const primary = writing.fallbackChain[0] - expect(primary.model).toBe("kimi-k2.5-free") - expect(primary.providers[0]).toBe("opencode") + expect(primary.model).toBe("gemini-3-flash") + expect(primary.providers[0]).toBe("google") const second = writing.fallbackChain[1] - expect(second.model).toBe("gemini-3-flash") - expect(second.providers[0]).toBe("google") - - const third = writing.fallbackChain[2] - expect(third.model).toBe("claude-sonnet-4-6") - expect(third.providers[0]).toBe("anthropic") + expect(second.model).toBe("claude-sonnet-4-6") + expect(second.providers[0]).toBe("anthropic") }) test("all 8 categories have valid fallbackChain arrays", () => { diff --git a/src/shared/model-requirements.ts b/src/shared/model-requirements.ts index 907e8b698..cd060b2d8 100644 --- a/src/shared/model-requirements.ts +++ b/src/shared/model-requirements.ts @@ -16,7 +16,6 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { sisyphus: { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["zai-coding-plan", "opencode"], model: "glm-5" }, { providers: ["opencode"], model: "big-pickle" }, ], @@ -54,9 +53,8 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { "multimodal-looker": { fallbackChain: [ { providers: ["openai", "opencode"], model: "gpt-5.3-codex", variant: "medium" }, + { providers: ["kimi-for-coding"], model: "k2p5" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, - { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" }, { providers: ["zai-coding-plan"], model: "glm-4.6v" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5-nano" }, ], @@ -65,14 +63,12 @@ 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: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }, ], }, metis: { fallbackChain: [ { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }, - { providers: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" }, ], @@ -86,7 +82,6 @@ export const AGENT_MODEL_REQUIREMENTS: Record = { }, atlas: { fallbackChain: [ - { providers: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }, { providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2" }, ], @@ -147,7 +142,6 @@ export const CATEGORY_MODEL_REQUIREMENTS: Record = { }, writing: { fallbackChain: [ - { providers: ["opencode"], model: "kimi-k2.5-free" }, { providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }, { providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }, ],