Summary
providers/mistral/models/devstral-2512.toml sets status = "deprecated", but Mistral's own API reports this model as active (deprecation: null). Because downstream consumers such as OpenCode hide any model with status = "deprecated" from their model picker, mistral/devstral-2512 becomes unselectable even for accounts that have full, valid access to it.
Evidence
models.dev registry data (providers/mistral/models/devstral-2512.toml):
name = "Devstral 2"
family = "devstral"
release_date = "2025-12-09"
status = "deprecated"
Mistral live API — GET https://api.mistral.ai/v1/models, object for devstral-2512:
{
"id": "devstral-2512",
"owned_by": "mistralai",
"name": "devstral-2512",
"description": "Official devstral-2512 Mistral AI model",
"max_context_length": 262144,
"aliases": ["devstral-medium-latest", "devstral-latest", "mistral-code-agent-latest"],
"deprecation": null,
"deprecation_replacement_model": null,
"type": "base"
}
Note that Mistral not only reports deprecation: null, but the model is aliased as devstral-latest and mistral-code-agent-latest — i.e. it is a current, recommended model, not a deprecated one.
Impact
OpenCode (which bundles/caches this registry) filters out every model with status = "deprecated" from both the /models picker and -m provider/model resolution. As a result mistral/devstral-2512 (and the aliases devstral-latest / devstral-medium-latest, which resolve to the same model) silently disappear from OpenCode despite the API key having valid access. The only workaround end users have is to define a separate openai-compatible provider pointing at https://api.mistral.ai/v1, bypassing the registry entirely.
Suggested fix
Remove the status = "deprecated" line from providers/mistral/models/devstral-2512.toml (and please double-check the rest of the devstral-* family under providers/mistral/models/, several of which appear to carry the same status while Mistral still serves them).
Verification steps
curl -s https://api.mistral.ai/v1/models \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
| jq '.data[] | select(.id=="devstral-2512") | {id, deprecation, aliases}'
Summary
providers/mistral/models/devstral-2512.tomlsetsstatus = "deprecated", but Mistral's own API reports this model as active (deprecation: null). Because downstream consumers such as OpenCode hide any model withstatus = "deprecated"from their model picker,mistral/devstral-2512becomes unselectable even for accounts that have full, valid access to it.Evidence
models.dev registry data (
providers/mistral/models/devstral-2512.toml):Mistral live API —
GET https://api.mistral.ai/v1/models, object fordevstral-2512:{ "id": "devstral-2512", "owned_by": "mistralai", "name": "devstral-2512", "description": "Official devstral-2512 Mistral AI model", "max_context_length": 262144, "aliases": ["devstral-medium-latest", "devstral-latest", "mistral-code-agent-latest"], "deprecation": null, "deprecation_replacement_model": null, "type": "base" }Note that Mistral not only reports
deprecation: null, but the model is aliased asdevstral-latestandmistral-code-agent-latest— i.e. it is a current, recommended model, not a deprecated one.Impact
OpenCode (which bundles/caches this registry) filters out every model with
status = "deprecated"from both the/modelspicker and-m provider/modelresolution. As a resultmistral/devstral-2512(and the aliasesdevstral-latest/devstral-medium-latest, which resolve to the same model) silently disappear from OpenCode despite the API key having valid access. The only workaround end users have is to define a separateopenai-compatibleprovider pointing athttps://api.mistral.ai/v1, bypassing the registry entirely.Suggested fix
Remove the
status = "deprecated"line fromproviders/mistral/models/devstral-2512.toml(and please double-check the rest of thedevstral-*family underproviders/mistral/models/, several of which appear to carry the same status while Mistral still serves them).Verification steps