feat(model-requirements): add k2p5, kimi-k2.5, gpt-5.4 medium to Sisyphus fallback chain

Sisyphus can now fall back through Kimi and OpenAI models when Claude
is unavailable, enabling OpenAI-only users to use Sisyphus directly
instead of being redirected to Hephaestus.

Runtime chain: claude-opus-4-6 max → k2p5 → kimi-k2.5 → gpt-5.4 medium → glm-5 → big-pickle
CLI chain: claude-opus-4-6 max → k2p5 → gpt-5.4 medium → glm-5
This commit is contained in:
YeonGyu-Kim
2026-03-07 19:23:08 +09:00
parent bf8d0ffcc0
commit 60bc9a7609
12 changed files with 55 additions and 19 deletions
@@ -224,6 +224,10 @@ exports[`generateModelConfig single native provider uses OpenAI models when only
"model": "openai/gpt-5.4",
"variant": "high",
},
"sisyphus": {
"model": "openai/gpt-5.4",
"variant": "medium",
},
},
"categories": {
"deep": {
@@ -293,6 +297,10 @@ exports[`generateModelConfig single native provider uses OpenAI models with isMa
"model": "openai/gpt-5.4",
"variant": "high",
},
"sisyphus": {
"model": "openai/gpt-5.4",
"variant": "medium",
},
},
"categories": {
"deep": {
+3 -2
View File
@@ -249,8 +249,9 @@ describe("generateOmoConfig - model fallback system", () => {
// #when generating config
const result = generateOmoConfig(config)
// #then Sisyphus is omitted (requires all fallback providers)
expect((result.agents as Record<string, { model: string }>).sisyphus).toBeUndefined()
// #then Sisyphus resolves to gpt-5.4 medium (openai is now in sisyphus chain)
expect((result.agents as Record<string, { model: string; variant?: string }>).sisyphus.model).toBe("openai/gpt-5.4")
expect((result.agents as Record<string, { model: string; variant?: string }>).sisyphus.variant).toBe("medium")
// #then Oracle should use native OpenAI (first fallback entry)
expect((result.agents as Record<string, { model: string }>).oracle.model).toBe("openai/gpt-5.4")
// #then multimodal-looker should use native OpenAI (first fallback entry is gpt-5.3-codex)
+1
View File
@@ -13,6 +13,7 @@ export const CLI_AGENT_MODEL_REQUIREMENTS: Record<string, ModelRequirement> = {
variant: "max",
},
{ providers: ["kimi-for-coding"], model: "k2p5" },
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4", variant: "medium" },
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
],
requiresAnyModel: true,
+3 -2
View File
@@ -396,7 +396,7 @@ describe("generateModelConfig", () => {
expect(result.agents?.sisyphus?.model).toBe("anthropic/claude-opus-4-6")
})
test("Sisyphus is omitted when no fallback provider is available (OpenAI not in chain)", () => {
test("Sisyphus resolves to gpt-5.4 medium when only OpenAI is available", () => {
// #given
const config = createConfig({ hasOpenAI: true })
@@ -404,7 +404,8 @@ describe("generateModelConfig", () => {
const result = generateModelConfig(config)
// #then
expect(result.agents?.sisyphus).toBeUndefined()
expect(result.agents?.sisyphus?.model).toBe("openai/gpt-5.4")
expect(result.agents?.sisyphus?.variant).toBe("medium")
})
})