On 14 October 2026 OpenAI told developers that GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini will be removed from the API on 14 January 2027, and fine-tuned versions of them on the same day. The recommended replacement for all four is gpt-6-luna. It costs less per token, but it isn't a drop-in swap: it's a reasoning model, so the same prompt can come back slower, longer or in a different shape.
Free tool: Export all your evals in your browser: bundle JSON, dataset JSONL and a promptfoo config
Paste an API key; the page calls api.openai.com directly from your browser and gives you the files. Nothing goes through our servers.
gpt-4o-2024-08-06 and gpt-4o-2024-11-20 (GPT-4o)gpt-4o-mini-2024-07-18 (GPT-4o mini)gpt-4.1-2025-04-14 (GPT-4.1)gpt-4.1-mini-2025-04-14 (GPT-4.1 mini)gpt-6-luna. The notice lists dated snapshots. If your code uses an undated name such as gpt-4o, check the deprecations page for what it points to after the date.Separate notices from 1 October 2026: the text-to-speech models tts-1, tts-1-hd and both gpt-4o-mini-tts snapshots stop on 6 January 2027, and GPT-5.1, GPT-5.3-Codex and GPT-5.4-Nano on 1 April 2027.
medium (options: none, low, medium, high, xhigh, max). Reasoning tokens count toward the output limit, so a token limit sized for GPT-4o can cut answers short.reasoning_effort set to none; with reasoning on, tools go through the Responses API.none. If your code sets temperature: 0 for repeatable output, test effort none as well as the default.grep -rnE "gpt-4o|gpt-4\.1" ., then environment variables, feature flags and any model name stored in a database or admin setting.ft:gpt-4o or ft:gpt-4.1.GET /v1/models now returns an optional shutdown_date (YYYY-MM-DD) on each model, or null if none is announced. A scheduled check of the models you call will also catch the next notice.Run the inputs you already care about (real requests, past failures, the cases a customer complained about) through the old model and the replacement, with the same checks on both. With promptfoo, one config does it:
# promptfooconfig.yaml: same prompts and tests, current model vs replacement
prompts:
- file://prompt.txt
providers:
- id: openai:chat:gpt-4o-2024-08-06
label: gpt-4o (current)
- id: openai:chat:gpt-6-luna
label: gpt-6-luna, default effort
- id: openai:chat:gpt-6-luna
label: gpt-6-luna, effort none
config:
reasoning_effort: none
tests: file://tests.yaml # your cases, each with its own assertions
defaultTest:
assert:
- type: latency
threshold: 5000 # milliseconds
- type: cost
threshold: 0.002 # USD per call
# run: npx promptfoo@latest eval, then npx promptfoo@latest viewLook for what a quick spot check misses: JSON or other formats that no longer parse (is-json), answers that got longer, latency at the default effort, cost per call once reasoning tokens are counted, and tool calls that stop firing. Keep the cases that fail as your regression set for the next model change.
Free tool: Export all your evals in your browser: bundle JSON, dataset JSONL and a promptfoo config
Paste an API key; the page calls api.openai.com directly from your browser and gives you the files. Nothing goes through our servers.
The last time you changed the model behind a feature, what broke, and how did you find out?
We're researching this problem and read every answer. Tell us what happened (4 short questions, no sign-up; AI tools help us read the answers).
Part of Ops Fixes: free checks and fix guides for small teams.