The reliability conversation around hosted language models usually centers on the dramatic failures: the rate limit during a traffic spike, the provider incident, the deprecation email with a hard cutoff date. We covered that operational layer in fallback chains. Underneath it sits a quieter problem that produces no error at all. The request succeeds, the latency looks normal, the response parses, and yet the model that produced it is not the model you evaluated, budgeted, and tuned prompts against.
This happens because a model identifier is not a model. It is a name in a provider's routing table, and providers move those names: floating aliases get re-pointed to new generations, retired product names get recycled onto current models, and dated versions get sunset on schedules measured in weeks. We run a model catalog that ingests provider listings continuously, which gives us an unusual vantage point on this churn. This article documents what that pipeline has observed recently, why silent swaps are more costly than they look, and what a production team can do to keep an identifier from changing meaning underneath it.
Three naming schemes, three stability guarantees
Providers name models in three broadly different ways, and the naming scheme is effectively a stability contract. Reading it correctly is the first defense.
| Scheme | Example | What it promises |
|---|---|---|
| Dated snapshot | claude-haiku-4-5-20251001, gpt-4o-2024-08-06 | The same weights and behavior until the identifier is formally retired |
| Bare version | mistral-ocr-2512, deepseek-v4-flash | Stable within the version, retired when the version sunsets |
| Floating alias | mistral-ocr-latest, deepseek-chat, undated names | Whatever the provider currently designates; can change at any time |
The first two schemes fail loudly. A retired dated snapshot starts returning errors, which is disruptive but visible, and it arrives with a deprecation notice, as with OpenAI's standing deprecations calendar. The third scheme fails silently. An alias that is re-pointed keeps serving requests without interruption, and nothing in the response forces you to notice that the underlying model changed.
The subtlety is that the third category is larger than it looks. It is not only identifiers with -latest in the name. Any undated model name a provider keeps "current" is a floating alias in practice, and, as the next section shows, even names that look like fixed products can turn out to float.
What our catalog pipeline observed
Inferbase ingests the model listings of the providers we track, including the alias relationships they declare, and stores each snapshot. Diffing those snapshots over recent weeks surfaced three patterns worth documenting precisely, because they are the concrete forms the abstract risk takes.
Aliases cross major version boundaries. On June 18, Mistral's own model listing declared mistral-ocr-latest an alias of mistral-ocr-2512, the release its documentation also calls OCR 3. By July 3, the same listing declared it an alias of the newly published mistral-ocr-4. A caller using the alias moved from one major OCR generation to the next with no code change, no deprecation notice, and no error. For an OCR workload in particular, where downstream parsers depend on output structure, a major-version jump is exactly the kind of change most teams would want to stage deliberately.
Retired product names get recycled. The same July listing declares mistral-medium, a product name from an earlier generation, and mistral-medium-3 as aliases of the identifier serving Mistral Medium 3.5. A team that pinned mistral-medium years ago, reasonably treating a bare product name as a fixed choice, is now served a model several generations newer. The upgrade is probably an improvement on quality. It is still a different model, with different behavior, different pricing (Mistral's current price list is a fraction of the original Medium's launch pricing), and a different failure profile.
Sunsets arrive on short calendars. DeepSeek's pricing documentation currently notes that deepseek-chat and deepseek-reasoner, themselves floating aliases that have pointed to successive V3-family releases over their lifetime, will no longer be supported after July 24, 2026, with the V4 endpoints as the replacement. That is a migration window of weeks, for endpoints that a large volume of tutorials, wrappers, and internal tooling reference by name.
None of this is misconduct. Providers document these mechanics, and alias re-pointing is precisely the convenience the alias exists to offer. The point is that the churn is faster, quieter, and broader than the mental model most teams carry, which was formed when a model name meant a fixed artifact.
Why a silent swap costs more than an outage
An outage is self-announcing and self-limiting: requests fail, alerts fire, someone mitigates. A silent swap has none of those properties, and its costs accumulate along four axes that are easy to underestimate.
Behavioral drift lands on your users first. Prompts are tuned against a specific model's habits: its formatting tendencies, its refusal thresholds, its tool-calling reliability. A new model behind the same name re-rolls all of that at once. The discussion around Anthropic's Opus 4.7, where teams reported behavioral regressions in workflows they had not touched, illustrates how disorienting model-side change is even when it is announced. An unannounced swap produces the same debugging session with less to go on, because no deploy on your side explains the regression.
Cost rides along invisibly. A swap can change the per-token price, and it can also change how many tokens the same text produces, because the tokenizer itself is part of what swaps. Launch analyses of Claude Sonnet 5 noted that its updated tokenizer maps the same content to roughly 1.0 to 1.35 times more tokens depending on content type, on top of introductory pricing that steps up after August 2026. Neither effect requires you to change anything to start paying differently. We wrote about the broader category in the hidden costs of LLM APIs; alias churn is the mechanism that delivers several of those costs unannounced.
Evaluations quietly expire. Any benchmark, red-team pass, or acceptance suite you ran binds to the model that served it. When the alias moves, those results describe a model you are no longer calling, while the dashboards that cite them keep implying you are. Teams with model risk-management obligations should treat an alias re-point as invalidating prior evaluation evidence, which is a strong argument against aliases on any governed path.
Reproducibility breaks retroactively. Logged outputs, cached completions, and A/B results become uninterpretable if the serving model cannot be established after the fact. This is the least dramatic cost and the one that hurts longest, because it degrades the historical data you would otherwise use to diagnose the other three.
Reading deprecation as the loud half of the same problem
Scheduled deprecation and silent re-pointing are usually discussed separately, but they are two halves of one lifecycle: providers converge traffic onto current generations, either by moving the pointer or by retiring the old identifier. The retirement half at least arrives with dates. Anthropic publishes a model deprecations page with a 60-day minimum notice policy, under which the Claude Sonnet 4 and Opus 4 identifiers were retired on June 15, 2026; OpenAI's calendar does the same for dated snapshots; DeepSeek's July window is unusually short but not unusual in kind.
The community response is telling. Developers have started building dedicated tooling to scan projects for deprecated model references and fail CI when one appears, which is the kind of infrastructure that only emerges once a failure mode has bitten enough teams. A production posture that plans for the loud half while ignoring the quiet half covers the easier case and leaves the harder one open.
A practical posture for production teams
The mechanics above suggest a small set of disciplines. None of them is expensive individually; collectively they turn model churn from a surprise into a managed migration.
- Pin the most specific identifier the provider offers on any governed path. Dated snapshots where they exist, bare versions otherwise. Reserve floating aliases for surfaces where silent behavioral change is genuinely acceptable.
- Treat aliases as pointers in your own configuration. If you do ride an alias, record at request time which concrete model served the call, from the response metadata where the provider returns it. The goal is that no logged output exists without a resolved model name attached.
- Diff the provider's model listing on a schedule. Listings, including declared alias relationships, are public API surface. A daily diff is cheap and catches re-points, recycled names, and newly announced sunsets before they catch you.
- Run a canary suite against the identifiers you actually ship with. A fixed prompt set with stable expected properties, format validity, refusal behavior, token counts within a band, run daily. A swap appears as a step change in canary metrics even when production traffic looks superficially healthy.
- Budget for migrations as recurring work. Given current cadences, assume at least one identifier you depend on reaches end of life per quarter. A standing, rehearsed migration path, with fallback candidates already validated for capability parity, converts a fire drill into a ticket.
How Inferbase tracks model identity
This problem is structural for us, because a catalog that treats every provider identifier as a distinct model would fragment reality: the same underlying model appears under dated ids, bare versions, and floating aliases at once, and the pointers move. Inferbase therefore separates the two concepts the providers blur. A catalog entry represents the model; the provider identifiers that point at it, including aliases and their declared relationships, are tracked against it and re-checked continuously, so a re-point or a recycled name surfaces as a reviewable change rather than passing unnoticed. The examples in this article came directly from that monitoring.
The same separation carries through to serving. When Inferbase routes and serves a request, the response reports the concrete model that served it, not an alias, so logs and billing bind to a resolved identity. Model churn on the provider side then lands where it belongs: as visible catalog changes to review in the model catalog, rather than as silent drift inside a production path.
What this means in practice
A hosted model is a dependency whose version can change without a version number changing. That single sentence is the mental-model correction this article argues for. The providers are not hiding the mechanics, but the defaults are tilted toward convenience: aliases are prominent in documentation, dated snapshots are an extra clause, and nothing in a successful response reminds you which one you chose.
The teams that handle this well make the choice explicit. They pin where the output feeds anything that matters, they ride aliases only where drift is acceptable, they log resolved model identity on every call, and they watch the provider's own listings the way they watch any other upstream dependency. The identifier will keep moving either way; the difference is whether it moves with your knowledge or without it.
Drift is also the quiet argument against treating model selection as a one-time decision at all. A choice made once against a moving catalog decays on its own schedule, in behavior through re-points and in economics through the mechanisms cataloged in the hidden costs of LLM APIs. Re-making the selection continuously, per request and against current prices and versions, is the premise of model routing, and it is the structural answer to a catalog that will not hold still.