← Community
bugfixed

railcall set anthropic-model is silently ineffective — stored, echoed, "restart to apply" promised, never read

Muhammad Akif JanjuaMuhammad Akif Janjua#413d ago · 39 views
affected: station-v0.93fixed in: station-v1.4.0

railcall set anthropic-model is silently ineffective — stored, echoed, "restart to apply" promised, but never read

railcall set anthropic-model <model> validates your choice, saves it, echoes
it back in the settings list, and tells you to restart Studio to apply it — but
no code path ever reads the value. The builder's model is chosen by cost/tier
routing that never looks at the setting, so railcall set anthropic-model opus
does nothing.

Reproduction (station-v0.93)

railcall set anthropic-model opus

Output:

anthropic-model → opus
Restart Studio for the builder to pick it up.

railcall set (no args) then lists it back as a current setting:

anthropic-model   opus

Restart Studio — the builder's model is unchanged.

(Behavior traced from source below, not run live.)

Observed

cmd_set handles the write side fully (railcall_cli.py):

# documented (L3101-3102)
railcall set anthropic-model <model>      haiku | sonnet | opus | full-model-id
railcall set anthropic-model auto         let local Qwen decide per-request

# validated + persisted (L3213-3218)
_vault_write("anthropic", "ANTHROPIC_MODEL", model_val)

# confirmed with a promise (L3224-3226)
anthropic-model → <label>
Restart Studio for the builder to pick it up.

# echoed in the settings display (L3113)
ant_model = _vault_read("anthropic", "ANTHROPIC_MODEL") or "auto (sonnet default)"

But nothing reads it. A grep for ANTHROPIC_MODEL across the whole install
returns exactly three hits — the write (L3218), the display (L3113), and an
unrelated key DEFAULT_ANTHROPIC_MODEL that itself only appears in a
display list (studio_server.py L1615) with no functional reader. No code path
consults keys.local.json["anthropic"]["ANTHROPIC_MODEL"] to choose a model.

The model is actually selected by cost_router — a tier→model map that ignores
the setting (cost_router.py L51-52):

"anthropic": {0: "claude-haiku-4-5-20251001", 1: "claude-haiku-4-5-20251001",
              2: "claude-sonnet-4-6",          3: "claude-opus-4-7"},

Why it matters

Set anthropic-model opus to force Opus (or auto for the documented "Qwen
picks per-request") and nothing changes. The confirmation message, the "restart
to apply" instruction, and the settings display all reinforce the belief that
it took effect — while the builder keeps using whatever the tier router picks.
It's a setting the CLI documents, validates, persists, and echoes, but never
consults.

Suggested fix

Either make the builder's model selection consult ANTHROPIC_MODEL (honor an
explicit choice, fall back to the tier router when unset/auto), or — if
tier-based auto-routing is intentionally the only model policy — remove
anthropic-model from railcall set and its display so the CLI stops
promising a setting it ignores.

---

Environment: station-v0.93. Verified by reading cmd_set in railcall_cli.py
and grepping the full install for ANTHROPIC_MODEL; the "no reader" result and
the tier-based selection are traced from source, not run live.

3 pts

1 reply

Fixed in station-v1.4.0. cost_router now READS the setting: when Anthropic is the selected provider, an explicit anthropic-model (haiku/sonnet/opus alias or a full model id) overrides the tier-mapped model via _anthropic_model_override(), annotated in the routing reason; auto/unset falls back to the tier router as documented. The CLI no longer persists, echoes, and promises a setting nothing consults. (Note: the hosted builder uses the Groq transport directly, so an Anthropic-family choice applies wherever the cost router selects Anthropic — set a preferred_provider to steer that selection.)

Thanks for the report — credited.

Sign in to reply.