diff --git a/models.ts b/models.ts index 1717bda..d6484ec 100644 --- a/models.ts +++ b/models.ts @@ -360,6 +360,7 @@ export const providers = { resolve: "opencode/minimax-m2.5-free", envVars: [], isFree: true, + fallback: "opencode/big-pickle", }, }, }), diff --git a/test/agnostic/byokFallback.ts b/test/agnostic/byokFallback.ts index 477a10f..d487df3 100644 --- a/test/agnostic/byokFallback.ts +++ b/test/agnostic/byokFallback.ts @@ -29,7 +29,7 @@ const fixture = defineFixture( function validator(result: AgentResult): ValidationCheck[] { const output = getAgentOutput(result); - const fellBack = /fell back from .* to opencode\/minimax-m2\.5-free/.test(output); + const fellBack = /fell back from .* to opencode\/big-pickle/.test(output); return [ { name: "run_succeeded", passed: result.success }, { name: "fallback_logged", passed: fellBack }, diff --git a/utils/buildPullfrogFooter.test.ts b/utils/buildPullfrogFooter.test.ts index 6a860a7..fc854be 100644 --- a/utils/buildPullfrogFooter.test.ts +++ b/utils/buildPullfrogFooter.test.ts @@ -4,17 +4,17 @@ import { buildPullfrogFooter } from "./buildPullfrogFooter.ts"; describe("buildPullfrogFooter — fallbackFrom annotation", () => { it("renders the provider display name when fallbackFrom is set", () => { const footer = buildPullfrogFooter({ - model: "opencode/minimax-m2.5-free", + model: "opencode/big-pickle", fallbackFrom: "anthropic/claude-opus", }); expect(footer).toContain( - "Using `MiniMax M2.5` (free) (credentials for Anthropic not configured)" + "Using `Big Pickle` (free) (credentials for Anthropic not configured)" ); }); it("works for OpenAI's display name too", () => { const footer = buildPullfrogFooter({ - model: "opencode/minimax-m2.5-free", + model: "opencode/big-pickle", fallbackFrom: "openai/gpt", }); expect(footer).toContain("(credentials for OpenAI not configured)"); @@ -22,7 +22,7 @@ describe("buildPullfrogFooter — fallbackFrom annotation", () => { it("falls back to the raw provider key when the slug provider is unknown to the catalog", () => { const footer = buildPullfrogFooter({ - model: "opencode/minimax-m2.5-free", + model: "opencode/big-pickle", fallbackFrom: "some-unknown/model", }); expect(footer).toContain("(credentials for some-unknown not configured)"); diff --git a/utils/byokFallback.ts b/utils/byokFallback.ts index ef28fcc..46f11aa 100644 --- a/utils/byokFallback.ts +++ b/utils/byokFallback.ts @@ -4,15 +4,14 @@ import { hasProviderKey } from "./apiKeys.ts"; * Slug we fall back to when a BYOK-required model is configured but the * runner has no provider key in env. Picked because it's free * (`isFree: true`, `envVars: []` — see `action/models.ts`), stable, and - * currently the strongest free OpenCode model in the catalog. If a - * smarter free model is added later, update this single constant. + * currently served by OpenCode Zen without a key. * * The slug is intentionally hard-coded and not a config knob — the * fallback is a safety net, not a user-facing preference, and adding a * config surface here would just push the same "what to fall back to" * decision into another setting that goes stale the same way. */ -export const FREE_FALLBACK_SLUG = "opencode/minimax-m2.5-free"; +export const FREE_FALLBACK_SLUG = "opencode/big-pickle"; export type FallbackDecision = { fallback: false } | { fallback: true; from: string; to: string };