# Model aliases vs pinned snapshots: avoid silent model swaps

URL: https://infro.io/blog/model-aliases-vs-pinned-snapshots
Author: INFRO Editorial (https://infro.io/blog/editorial)
Publisher: INFRO
Published: 2026-10-27
Last modified: 2026-10-27
Last reviewed: 2026-10-27 (next review due 2026-11-26)
Topic: Evaluation and models
Format: Guide

> A model alias is a name the vendor can point at a different model; a snapshot is a fixed release. Pinning a snapshot protects you from upgrades, but not from deprecation routing: on 8 October 2026 Google began sending gemini-3.7-flash requests to gemini-3.8-flash, and xAI routes grok-voice-transcribe-1.0 to 2.0 since its end of life. Pin the most specific id each vendor offers, put it behind a name you control, and detect swaps by logging the model each response reports and watching output tokens, latency and cost per request by model.

Key takeaways:
- An alias is a pointer the vendor moves; a snapshot is a fixed release. Each vendor names them differently, and some current ids are both.
- Pinning is not a guarantee: Google routed requests for the stable id gemini-3.7-flash to gemini-3.8-flash on deprecation, and xAI routed grok-voice-transcribe-1.0 to 2.0 at end of life.
- OpenAI's GPT-6 models and Anthropic's models from the 4.6 generation on use one undated id that is itself a pinned snapshot.
- A swap shows up first in the model id a response reports, then in output tokens, latency, refusals and cost per request; log the first and watch the rest by model.
- Put every model id behind a name you control so that moving it is a reviewed configuration change, not a vendor's decision.

A model alias is a name the vendor can point at a different model; a pinned snapshot is a fixed release. Calling an alias means accepting the vendor's upgrades on the vendor's schedule. Pinning a snapshot protects you from upgrades, but not from deprecation: on 8 October 2026 Google began routing API requests for `gemini-3.7-flash`, a stable id, to `gemini-3.8-flash`, and for `gemini-3.5-flash` to `gemini-3.6-flash`[1]. A team that pinned 3.7 Flash got a different model with no code change.

So the job has two halves: pin as precisely as each vendor allows, and detect the swap when it happens anyway. This guide covers both, vendor by vendor.

## How each vendor names models

| Vendor | Moving names | Fixed names | Recent move |
| --- | --- | --- | --- |
| OpenAI | Older families: the bare name points at a default dated snapshot (`gpt-4o` → `gpt-4o-2024-08-06`); `chat-latest` follows ChatGPT | Dated snapshots; GPT-6 models have one id that is the only snapshot (`gpt-6-luna`) | `chat-latest` updated to the latest ChatGPT model on 7 October 2026 |
| Anthropic | For models before 4.6, the alias resolves to a dated id | Every model id, including the dateless ids from 4.6 on (`claude-sonnet-5-5`) | None by alias in the current lineup |
| Google (Gemini API) | `-latest` aliases (`gemini-flash-latest`), hot-swapped on new releases | Stable ids (`gemini-3.8-flash`); preview ids | `gemini-3.7-flash` routed to `gemini-3.8-flash` on deprecation, 8 October 2026 |
| xAI | `<model>` (latest stable) and `<model>-latest` | `<model>-<date>` | `grok-voice-latest` now points to `grok-voice-3.0` |

Table: Alias and snapshot conventions, from each vendor's model documentation and release notes read 2026-10-27.

### OpenAI

OpenAI's model pages describe snapshots as a way to "lock in a specific version of the model so that performance and behavior remain consistent." On the GPT-4o page the default snapshot is `gpt-4o-2024-08-06`, and every GPT-4o snapshot is now deprecated or shut down[2]. The GPT-6 generation is simpler: the GPT-6 Luna page lists `gpt-6-luna` as the "default and only snapshot"[3]. One name that does move by design is `chat-latest`: on 7 October 2026 OpenAI updated it to the latest model in ChatGPT and repeated that it recommends the GPT-6 family for production API use[4].

OpenAI's own API does not route a shut-down snapshot to a successor: a retired id stops answering, which is loud but honest.

### Anthropic

Anthropic's models overview says every Claude model id "is a pinned snapshot, including the dateless IDs used from the 4.6 generation on". For models before the 4.6 generation, the alias "is a convenience pointer that resolves to the dated ID"[5]. In practice, `claude-opus-5-5` will not quietly become something else; when Anthropic ships a new model it ships a new id. The page also notes that partner platforms such as Bedrock and Google Cloud set their own lifecycle dates[5], so the same model can retire on different days depending on where you call it.

### Google

The Gemini models page defines four kinds of name: **stable** ids that "usually don't change", **preview** ids deprecated with at least two weeks' notice, **latest** aliases such as `gemini-flash-latest` that are hot-swapped when a new release arrives (with two weeks' email notice for breaking changes), and **experimental** ids that "are not stable"[6].

The October change shows the limit of "stable". Google's release notes say Gemini 3.7 Flash "is deprecated and has been replaced by" `gemini-3.8-flash` and that requests to the old id "are automatically routed" to the new one; the same entry covers 3.5 Flash and 3.6 Flash. Neither entry gives a shutdown date or mentions price[1]. On Vertex AI the picture differs: Google Cloud lists Gemini 3.7 Flash with a retirement date of 28 January 2027 and `gemini-3.8-flash` as the replacement[7]. The same id therefore meant different things on two Google platforms in the same week.

### xAI

xAI's convention is spelled out: `<modelname>` is aliased to the latest stable version, `<modelname>-latest` to the latest version, and `<modelname>-<date>` "refers directly to a specific model release" that "will not be updated"[8]. In October, `grok-voice-latest` started pointing to `grok-voice-3.0`, "so sessions that use the alias are upgraded automatically", at the same price as 2.0. Separately, `grok-voice-transcribe-1.0` reached end of life on 2 October 2026 and its requests are sent to `grok-voice-transcribe-2.0`[9]. That second case is a versioned id, not an alias, being served by a different model.

## What a silent swap changes

A new model behind the same name can move four things at once, and only one of them shows up as an error.

- **Quality.** Different answers, a different refusal profile, a different reading of the same prompt. Structured output that parsed yesterday may not today.
- **Cost.** A newer model can be priced differently, think more, or write longer answers. Estimated cost per request moves even when the per-token rate does not.
- **Latency.** Time to first token and total time shift with model size and reasoning.
- **Limits and parameters.** A successor can accept different parameters or have different rate limits, so a call can start failing for reasons unrelated to the prompt.

None of these is necessarily worse. The problem is that nobody chose the change, nobody evaluated it, and the first signal is often a customer.

## How to pin

1. **Use the most specific id the vendor offers.** A dated snapshot at OpenAI for older families, the model id at Anthropic and for OpenAI's GPT-6 models, a stable id rather than `-latest` at Google, a dated id at xAI.
2. **Keep a register of pinned ids** with each id's documented deprecation or retirement date, per platform. The pin ends on that date whatever you do.
3. **Put the id behind a name you control.** A config key, a wrapper alias or a gateway route, so that moving to a new model is a reviewed change with an evaluation attached.
4. **Never mix aliases into evaluation baselines.** An eval run against `-latest` last month is a run against a different model.
5. **Read the release notes of every vendor you pin.** Google's 8 October entry and xAI's October entries were the only advance signal for these swaps.

## How to detect a swap

**Log the model each response reports.** Most APIs return a model identifier in the response body. Record it next to the model you requested, and alert when a requested name starts being answered by an id you have not seen for it before. Check for each provider whether the field reports the resolved version or echoes the name you sent; a field that echoes your request tells you nothing.

**Watch the derived signals by model.** A swap rarely moves one metric. Compare, per requested model, against the same weekday in previous weeks:

| Signal | What a swap tends to do |
| --- | --- |
| Model id reported in responses | A new value appears |
| Output tokens per request | Moves, often up for a reasoning-heavy successor |
| Latency p95 and time to first token | Shifts with model size and thinking |
| Refusals and content-filter errors | A new safety profile changes the rate |
| Answers cut off by the length limit | Rises if the successor writes or thinks longer |
| Estimated cost per request | Follows token counts and rates |

Table: Swap signals worth tracking per requested model. These are signals to measure, not measured effects.

**Re-run a small evaluation weekly.** A fixed set of a few dozen representative prompts with a pass mark catches quality changes that metrics cannot see.

## Catching model swaps with INFRO

INFRO is a control plane in front of the provider accounts you connect; your providers bill you directly. For traffic that goes through it, three parts help here.

**The model the provider named.** Every request row carries `served_model`, the model id your provider's reply named, beside the model you requested, and the [request log](https://infro.io/docs/observability/traces) filters by it.

**A finding when it changes.** [Traffic changes](https://infro.io/docs/observability/traffic-changes) raise a `traffic.model_changed` finding when, on one provider connection, a model starts being answered by an id the provider had not reported in the previous 14 days, carrying at least 20% of the day's successful requests and at least 50 of them. The finding compares output tokens, cache share, truncation, fallbacks and p95 latency before and after, and gives an estimated weekly change in provider cost. Other findings cover output tokens per request, latency and error-code shares on their own.

**A name you control.** A [route](https://infro.io/docs/routes) lets applications call a stable name while you change the provider model behind it deliberately.

What INFRO cannot do: it reads request metadata, never prompts or answers, so it cannot tell that answers got worse; that needs an evaluation. It also detects a swap only when the provider's reply reports a new id. A provider that echoes the requested name while serving a different model leaves that signal blank, and only the derived metrics remain.

## Questions

### What is the difference between a model alias and a snapshot?

A snapshot is a specific model release that does not change. An alias is a name that points at a snapshot and that the vendor can repoint, for example xAI's grok-voice-latest, which now points at grok-voice-3.0, or Google's gemini-flash-latest, which Google hot-swaps when a new release arrives.

### Did Google change gemini-3.7-flash without notice?

Google's release notes for 8 October 2026 say Gemini 3.7 Flash is deprecated and replaced by gemini-3.8-flash, and that API requests to gemini-3.7-flash are automatically routed to gemini-3.8-flash. The same applies to gemini-3.5-flash, routed to gemini-3.6-flash. On Vertex AI, Google lists Gemini 3.7 Flash with a retirement date of 28 January 2027.

### Does pinning a dated model id protect me from changes?

From upgrades, yes; from retirement, no. When a pinned id is retired, some vendors fail the request (OpenAI's shutdowns) and some route it to a successor (Google's Gemini Flash deprecations, xAI's grok-voice-transcribe-1.0). Either way the pin ends on the vendor's date, so track deprecation dates for every pinned id.

### How can I tell that a provider changed the model behind my requests?

Log the model id each response reports and alert when a new value appears for the same requested name. Then watch output tokens per request, latency, refusal and truncation rates, and estimated cost per request by model; a swap usually moves several of them at once.

### Are Claude model ids aliases?

From the 4.6 generation on, Anthropic's dateless ids such as claude-sonnet-5-5 are themselves pinned snapshots. For models before 4.6, the alias is a pointer that resolves to a dated id.

## Sources

1. Release notes — Google. https://ai.google.dev/gemini-api/docs/changelog (accessed 2026-10-27)
2. GPT-4o model page — OpenAI. https://developers.openai.com/api/docs/models/gpt-4o (accessed 2026-10-27)
3. GPT-6 Luna model page — OpenAI. https://developers.openai.com/api/docs/models/gpt-6-luna (accessed 2026-10-27)
4. Changelog — OpenAI. https://developers.openai.com/api/docs/changelog (accessed 2026-10-27)
5. Models overview — Anthropic. https://platform.claude.com/docs/en/about-claude/models/overview (accessed 2026-10-27)
6. Gemini models — Google. https://ai.google.dev/gemini-api/docs/models (accessed 2026-10-27)
7. Model versions and lifecycle — Google Cloud. https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions (accessed 2026-10-27)
8. Models — xAI. https://docs.x.ai/docs/models (accessed 2026-10-27)
9. Release notes — xAI. https://docs.x.ai/developers/release-notes (accessed 2026-10-27)
