Model retirements · Dates as of 20 Oct 2026
gpt-4o and gpt-4.1 shut down on 14 January 2027.
OpenAI’s models API gives gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini that date, the same as their dated snapshots: OpenAI removes them from the API that day. It lists gpt-6-luna as the replacement, and that model doesn’t accept every argument they did.
OpenAI shutdown, 14 Jan 2027
UTC83days left
gpt-4oreplaced bygpt-6-lunagpt-4o-minireplaced bygpt-6-lunagpt-4.1replaced bygpt-6-lunagpt-4.1-minireplaced bygpt-6-luna
Also the snapshots gpt-4o-2024-08-06, gpt-4o-2024-11-20, gpt-4o-mini-2024-07-18, gpt-4.1-2025-04-14 and gpt-4.1-mini-2025-04-14. OpenAI announced the date on 14 Oct 2026; its models API returned it for each alias on 18 Oct 2026.
OpenAI deprecations pageRetirement dates near today.
Text, audio, image and embedding models, from the providers’ deprecation pages as of 20 Oct 2026. OpenAI and Anthropic give the day a model shuts down. Google gives the earliest day: a model can go then or later. Video models and managed agents have dates too; the check lists them.
OpenAI
Shut down 25 days agogpt-3.5-turbo-1106gpt-3.5-turbo-instructbabbage-002davinci-002
Replacement: gpt-5.6-terra
OpenAI deprecationsOpenAI
Shut down 22 days agogpt-5.4-cyber
Replacement: No single model: the page names “the most capable cyber model available to you”.
OpenAI deprecationsGoogle Cloud
Can be retired any day nowgemini-2.5-progemini-2.5-flashgemini-2.5-flash-lite
Replacement: Two or three are listed for each, gemini-3.8-flash among them, so a person picks one.
Gemini on Google Cloud (Vertex AI) only. The Gemini API gives these models no date.
Google Cloud model versionsOpenAI
Shuts down todaygpt-3.5-turbogpt-4gpt-4-turbogpt-4.1-nanogpt-4o-2024-05-13o1o1-proo3-minio4-mini
Replacement: gpt-5.6-terra, gpt-5.6-sol or gpt-5.6-luna, listed per model; o1-pro moves to gpt-5.6-sol with reasoning.mode: pro
Also their dated snapshots, and gpt-image-1 (listed: gpt-image-2.5-sunburst or gpt-image-2.5-flare). gpt-4-1106-preview, listed for the same day, already answered 404 on 18 Oct.
OpenAI deprecationsGemini API
In 25 days at the earliestgemini-3.1-flash-live-previewgemini-2.5-flash-native-audio-preview-12-2025gemini-2.5-flash-preview-ttsgemini-2.5-pro-preview-ttsgemini-3.1-flash-tts-preview
Replacement: gemini-3.8-live for the Live models; gemini-3.8-flash-tts or gemini-3.8-flash-lite-tts for text to speech
Gemini API deprecationsGoogle Cloud
In 27 days at the earliestgemini-3.6-flash
Replacement: gemini-3.8-flash
Google Cloud only. The Gemini API gives gemini-3.6-flash no date.
Google Cloud model versionsAnthropic
Shuts down in 38 daysclaude-sonnet-4-5-20250929
Replacement: claude-sonnet-5-5
The alias claude-sonnet-4-5 points to this snapshot. Anthropic’s pages don’t say whether the alias stops working the same day.
Anthropic model deprecationsOpenAI
Shuts down in 39 daysgpt-image-1-minigpt-image-1.5chatgpt-image-latest
Replacement: gpt-image-2.5-sunburst or gpt-image-2.5-flare
OpenAI deprecationsOpenAI
Shuts down in 49 daysgpt-5-2025-08-07gpt-5-mini-2025-08-07gpt-5-nano-2025-08-07gpt-5-pro-2025-10-06o3-2025-04-16o3-pro-2025-06-10
Replacement: gpt-5.6-sol, gpt-5.6-terra or gpt-5.6-luna, listed per model; the two pro models move to gpt-5.6-sol with reasoning.mode: pro
The page lists these dated snapshots, not the gpt-5 or o3 aliases.
OpenAI deprecationsGoogle Cloud
In 51 days at the earliestOpenAI
Shuts down in 75 daystts-1tts-1-hdgpt-4o-mini-tts-2025-03-20gpt-4o-mini-tts-2025-12-15
Replacement: gpt-realtime-2.1-mini
OpenAI deprecationsOpenAI
Shuts down in 83 daysgpt-4ogpt-4o-minigpt-4.1gpt-4.1-mini
Replacement: gpt-6-luna
And their dated snapshots: the shutdown at the top of this page.
OpenAI deprecationsOpenAI
Shuts down in 89 daysgpt-realtimegpt-realtime-minigpt-4o-realtimegpt-4o-mini-realtimegpt-audiogpt-audio-minigpt-4o-audiogpt-4o-mini-audiogpt-4o-mini-transcribe-2025-03-20
Replacement: gpt-realtime-2.1, gpt-realtime-2.1-mini or gpt-audio-1.5, listed per model; gpt-4o-mini-transcribe-2025-12-15 for the transcription snapshot
OpenAI deprecations
5 more dates, to 1 Apr 2027
Google Cloud
In 97 days at the earliestgemini-3.7-flash
Replacement: gemini-3.8-flash
Google Cloud only. On the Gemini API, requests to gemini-3.7-flash already go to gemini-3.8-flash.
Google Cloud model versionsOpenAI
Shuts down in 126 dayswhisper-1gpt-4o-transcribegpt-4o-mini-transcribegpt-4o-transcribe-diarize
Replacement: gpt-live-transcribe or gpt-transcribe
OpenAI deprecationsGemini API and Google Cloud
In 143 days at the earliestgemini-2.5-flash-image
Replacement: gemini-3.1-flash-lite-image
Google Cloud gives the same date as a date it retires no earlier than.
Gemini API deprecationsGoogle Cloud
In 160 days at the earliesttext-embedding-005text-embedding-004text-multilingual-embedding-002multimodalembedding@001
Replacement: None listed
New embeddings mean re-embedding what you stored.
Google Cloud model versionsOpenAI
Shuts down in 160 daysgpt-5.1gpt-5.3-codexgpt-5.4-nano
Replacement: gpt-6-sol for gpt-5.1 and gpt-5.3-codex; gpt-6-luna for gpt-5.4-nano
OpenAI deprecations
Changing the model name isn’t enough.
gpt-6-luna runs at medium reasoning effort unless a request sets one, so it can reason; gpt-4o and gpt-4.1 answered without a reasoning step. Some arguments that worked on them fail on gpt-6-luna. These are the results of Chat Completions calls to gpt-6-luna on 18 Oct 2026.
| Argument | On gpt-6-luna | What to change |
|---|---|---|
max_tokens | 400, with or without reasoning_effort: "none". max_completion_tokens works. | Rename it to max_completion_tokens with the same value. If the model reasons, that limit covers its reasoning tokens too, so a small one can run out before any visible text. |
temperature | 0.2 without reasoning_effort: 400, “Only the default (1) value is supported.” At "none" it works. | The reasoning choice below. |
top_p, logprobs, top_logprobs | Work at "none". They weren’t sent without it; OpenAI’s GPT-6 guide says to remove them when the effort isn’t none. | The reasoning choice below. |
tools, functions | Function tools: 400 without reasoning_effort, and they work at "none". The older functions worked at "none" (the call didn’t set function_call); they weren’t sent without it. | The reasoning choice below. Removing them stops the app’s tool calls. |
stop, logit_bias | 400 at reasoning_effort: "none". They weren’t sent without it. | Not supported. Rework the call by hand. |
Also on gpt-6-luna at "none": prediction returned 400, and presence_penalty and frequency_penalty returned a server error on all 8 attempts, so treat them as unsupported. n and seed worked.
The reasoning choice belongs to each repository.
Arbor reports both options and never picks one for you; the max_tokens rename goes in with the option a repository picks. Per token, gpt-6-luna costs less than gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini. It is also OpenAI’s most efficient tier, where gpt-4o and gpt-4.1 were flagship models, so answer quality can change either way.
Scope: Chat Completions calls to gpt-6-luna on 18 Oct 2026. The Responses API wasn’t called, and other models can differ.
Check your code free.
arbor retirements lists the Python calls that name a retired or retiring model through the openai, anthropic or Google SDKs, with the listed replacement, the arguments that change with it and the choices to make first. No account or API key.
npx --allow-scripts=@anandb71/arbor-cli @anandb71/arbor-cli@latest retirements .--allow-scripts lets npm run the package’s install script, which downloads the Arbor binary: npm 12 skips install scripts it isn’t told to allow. @latest keeps npx from running an older copy installed earlier. Or, with Arbor 3.1.0 or later installed: arbor retirements .
$ arbor retirements .
Model retirements in . (1 Python file checked)
1 call uses a model Anthropic shut down on 28 Oct 2025
app/chat.py:33 claude-3-5-sonnet-20241022 → claude-sonnet-5-5
decide: think only between tools (add thinking={"type": "between_tools"}) or let the model think (no change)
...
3 calls use models OpenAI shuts down on 14 Jan 2027 (88 days)
app/chat.py:12 gpt-4o (MODEL, line 8) → gpt-6-luna
also change: max_tokens → max_completion_tokens
decide: keep reasoning off (add reasoning_effort="none"; keep temperature) or let the model reason (remove temperature)
app/chat.py:21 gpt-4o-mini (line 22) → gpt-6-luna fallback of an environment or config lookup: confirm the deployed value
decide: keep reasoning off (add reasoning_effort="none") or let the model reason (no change)
check: stop and logit_bias are not supported on gpt-6-luna (400).
app/chat.py:29 gpt-4.1 → gpt-6-luna
decide: keep reasoning off (add reasoning_effort="none"; keep tools) or let the model reason (remove tools)
...
Not checked: 1 call takes the model from somewhere Arbor cannot read (an environment variable, a function argument, another module); arbor usages lists it.
Not listed: 1 call reaches these models through Azure, another host in base_url or another cloud, where the provider's dates may not apply. Add --include-routed to list it.
Summary: 4 calls in 1 file use retired or retiring models: 1 already retired, 3 retiring (next: 14 Jan 2027, 88 days).
3 can move once this repo makes the choice shown under decide; 1 needs a manual check.
Failing (exit 1): 1 call uses a model that is already retired.In CI
name: Model retirements
on: [pull_request]
jobs:
retirements:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Anandb71/arbor@v3.1.0
with:
mode: retirements
# retirements-fail-on: retired # or a number of days, e.g. 90The job summary lists every call, and affected lines get warnings, up to the 10 GitHub shows per step. By default the step only warns, even about retired models: set retirements-fail-on to retired or to a number of days to make it fail. It always fails if the check can’t run.
- Languages
- Python today. TypeScript and JavaScript are coming.
- Calls
- Direct SDK calls:
openai,anthropic,google-genaiandgoogle-generativeai. Wrappers such as LangChain, LlamaIndex and LiteLLM are coming. - Routing
- Calls through Azure OpenAI, Bedrock, OpenRouter or a proxy in
base_urlare counted apart: the providers’ dates may not apply there. - Not read
- Model IDs in .env, YAML, JSON or notebooks. A model passed in from an environment variable or another module is counted as not checked.
- Data
- 283 entries (276 model IDs) from the providers’ deprecation pages, changelogs and models API, bundled into the CLI. Update Arbor for newer dates.
- Privacy
- It runs on your machine and makes no network requests: no code leaves it, and there is no telemetry. npx first downloads the CLI: the package from npm, then its binary from Arbor’s GitHub releases.
Want Arbor to open the fix PRs?
Arbor is building a beta that opens the pull request for you: the listed replacement, the argument changes that go with it, and the choices left for your repository to make. A person reviews and merges it. Leave your email and we’ll write when the beta opens for your repos.
No repository access or payment details needed. Joining doesn’t create an account.