You paste a model name from an older tutorial and the call fails. You open the official list and find twenty-odd similar names side by side, with no clear sense of which one to switch to. I expect this to happen to all of us a few more times.
What I'd like to pass on is that a model name isn't something to memorize; it's something to split into four parts. Here is the reading order, and where to check when a word doesn't make sense.
A name is generation, line, variant and release stage
The official models page (which I checked on October 24, 2026) has a naming and versioning section before the list. It describes four version types.
| Type | What the docs say (in short) | How it looks |
|---|---|---|
| Stable | Points to a specific stable model that usually doesn't change; recommended for production | gemini-3.6-flash |
| Preview | May be used in production, may have tighter limits, and is deprecated with at least two weeks' notice | gemini-3.1-pro-preview |
| Latest | An alias that is hot-swapped with each new release; breaking changes get two weeks' notice by email | gemini-flash-latest |
| Experimental | Typically not for production, stricter limits, availability may change | lyria-realtime-exp |
With that table in mind, split a name from left to right.
- Generation: numbers such as 3.8, 3.6 or 4. A bigger number is a newer generation, and that reading rarely misleads.
- Line: flash or pro. Within one generation, they play different roles.
- Variant: lite, tts, live, image and so on, meaning a smaller version, speech synthesis, real-time conversation, or images.
- Release stage: a trailing preview, sometimes followed by a month and year such as 04-2026.
The docs don't formally define suffixes like lite or tts. The meanings above are my reading of each model's description, so I try not to overstate them.
Splitting real names
Here are names from the list, fitted to the four parts.
| Model name | Generation | Line | Variant | Stage |
|---|---|---|---|---|
| gemini-3.8-flash-lite-tts | 3.8 | flash | lite, tts | Stable |
| gemini-3.1-pro-preview | 3.1 | pro | none | Preview |
| gemini-2.5-flash-native-audio-preview-12-2025 | 2.5 | flash | native-audio | Preview (Dec 2025) |
| deep-research-preview-04-2026 | none | none | deep-research | Preview (Apr 2026) |
| gemini-4-argon | 4 | argon | none | Stable |
The last two rows don't fit cleanly. Deep Research is a separate product without a generation and line, and argon doesn't look like a line word such as flash or pro. The page doesn't explain what argon means, so I treat it as a provisional "new line name" and don't claim more.
A script that flags the words you can't read
Splitting by hand makes it easy to skip a word you don't know. So I wrote a short script that splits a name and honestly reports unknown words as unregistered. It uses no external libraries, only Python.
import re
import sys
STAGE = {
"preview": "プレビュー版(仕様や提供が変わりやすい)",
"exp": "実験版(本番利用は想定されていない)",
"latest": "最新版を指す別名(中身が入れ替わる)",
}
ROLE = {
"lite": "小型・低コスト寄りの派生",
"tts": "文章を音声にするモデル",
"live": "リアルタイムの音声・映像のやりとり向け",
"image": "画像を扱うモデル",
"pro": "上位(高性能)の系統",
"flash": "高速・軽量の系統",
}
VERSION = re.compile(r"^\d+(\.\d+)*$")
MONTH_YEAR = re.compile(r"^(0[1-9]|1[0-2])$")
def decode(name):
parts = name.split("-")
out = []
for i, p in enumerate(parts):
nxt = parts[i + 1] if i + 1 < len(parts) else ""
if i == 0:
out.append((p, "ブランドまたは製品名"))
elif VERSION.match(p) and len(p) == 4 and p.isdigit() and MONTH_YEAR.match(parts[i - 1]):
out.append((p, "年(直前の月と対で日付になる)"))
elif MONTH_YEAR.match(p) and len(nxt) == 4 and nxt.isdigit():
out.append((p, "月(このあと年が続く)"))
elif VERSION.match(p):
out.append((p, "世代・バージョン"))
elif p in STAGE:
out.append((p, "公開段階: " + STAGE[p]))
elif p in ROLE:
out.append((p, "役割・系統: " + ROLE[p]))
else:
out.append((p, "未登録の語(公式のモデル一覧で確認する)"))
return out
if __name__ == "__main__":
for name in sys.argv[1:]:
print(name)
for token, meaning in decode(name):
print(f" {token:<10} {meaning}")Run it by listing the names you want to check.
python3 decode_model_name.py gemini-3.8-flash-lite-tts deep-research-preview-04-2026 gemini-4-argonPart of what it printed on my machine (the labels are in Japanese because I wrote the script for my own use; swap the strings if you prefer English):
gemini-3.8-flash-lite-tts
gemini brand or product name
3.8 generation / version
flash line: fast, lightweight
lite variant: smaller, lower cost
tts variant: text to speech
deep-research-preview-04-2026
deep brand or product name
research unregistered word (check the official model list)
preview stage: preview
04 month (a year follows)
2026 year
gemini-4-argon
gemini brand or product name
4 generation / version
argon unregistered word (check the official model list)The Deep Research output is wrong: the script took deep as the brand and research as an unknown word. The first hyphen-separated word isn't always a brand, and sometimes several words form one name.
I've left that mistake in on purpose. A rule that quietly misreads a name it doesn't fit shows exactly where this method stops. When a word comes back as unregistered, such as argon or research, go back to the places below.
Where to check a word you can't read
Please don't guess at meanings. This order has kept me from getting lost.
- The official models page: it lists current models with names and descriptions. First, look for the name there.
- The official deprecations page: if it isn't on the list, check whether it moved there as deprecated or shut down. The shutdown date can read "no shutdown date announced."
- The model description: what a name can't tell you is usually written in the description on the list.
If the name is listed but only your environment can't use it, the cause may be restricted availability rather than the name. I covered that distinction in these posts.
- When Gemini 2.5 Pro Vanished from the Picker: Why It Isn't Deprecated, and How to Keep Your History
- When 404 and 429 Show Up in the Same Gemini API Log, Check the Model Name Before the Quota
What I do before switching a name
Once names become readable, it is tempting to rush to the newest generation. But a higher generation with a different line or variant won't behave as you expect. A tts model can't be called to write text.
So before switching, I write down three things.
- The generation, line, variant and stage of the current name
- The same four items for the replacement
- Which of the four differ
If only the generation differs, a straight swap often works. If the line or variant differs, I'm switching to a model for a different job, so I stop and reread the official description.
A name is a clue for where to go and check, not something to read by force.
One thing you can do today: pick one model name you use and split it into the four parts. The word you couldn't place is the one to check on the official page next.