Dependency check · Updated
gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest shut down on 1 December; "The model 'gpt-image-1' does not exist" since 23 October: OpenAI's model shutdowns, what to switch to, and the libraries that still send a retired model by default
On 1 December 2026 OpenAI removes gpt-image-1-mini, gpt-image-1.5 (with its snapshot gpt-image-1.5-2025-12-16) and chatgpt-image-latest from its API. Its deprecations page now lists gpt-image-2.6-sunburst or gpt-image-2.6-flare as replacements. Requests that name one of the three will fail from that day. When OpenAI shut down gpt-image-1 on 23 October, its error read like a typo or a missing permission: "The model 'gpt-image-1' does not exist." We expect the same for these three, but we have not seen it yet.
Before 1 December says what to change, with a one-line search for the three names. The rest of the page covers the 23 October shutdown of gpt-image-1, gpt-3.5-turbo, gpt-4 and other models: both of its errors, the Python libraries that still send gpt-3.5-turbo when you don't pass a model, a check for your own code and installed packages, and the next shutdown dates.
Paste your code and see the shutdown date and named replacement for every OpenAI or Anthropic model ID in it. The check runs in your browser and stores nothing; an ID the providers don't list shows "not listed". It reads Gemini API IDs too, with the date Google gives and what that date is: an earliest possible shutdown date, or the day requests start routing to a replacement.
Find your error
| What you see | What it means | Section |
|---|---|---|
From 1 December, an error on an image request that names gpt-image-1-mini, gpt-image-1.5 or chatgpt-image-latest | The model is shut down on 1 December. We expect the same message as for gpt-image-1, but have not seen it yet | Before 1 December |
The model 'gpt-image-1' does not exist. (HTTP 400) | gpt-image-1 was shut down on 23 October | Image models |
The model `gpt-4` has been deprecated (HTTP 404, model_not_found), also for gpt-3.5-turbo, o3-mini and others | The named model was shut down on 23 October | Chat models |
| The second error, but your code never names a model | A library's default sends a retired model | Library defaults |
Both messages are quoted from public reports filed on 23 October by developers fixing their own projects. OpenAI's deprecations page gives the dates and replacements, but not these messages.
Before 1 December: gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest
On 2 June 2026 OpenAI announced that these models leave the API on 1 December 2026. Its deprecations page lists these replacements:
| Model, as you may have it in code | OpenAI's listed replacement |
|---|---|
gpt-image-1-mini | gpt-image-2.6-sunburst or gpt-image-2.6-flare |
gpt-image-1.5, gpt-image-1.5-2025-12-16 | gpt-image-2.6-sunburst or gpt-image-2.6-flare |
chatgpt-image-latest | gpt-image-2.6-sunburst or gpt-image-2.6-flare |
The listed replacements changed recently. When we read OpenAI's page on 5 November, it gave gpt-image-2.5-sunburst or gpt-image-2.5-flare for these three; on 6 November it gave the 2.6 versions. For gpt-image-1 it still lists 2.5, and it gives no shutdown date for either 2.5 model. We have not tested any of them; they are different models with their own prices and behaviour.
Find every place your code names them. Run this in your project's root. It searches every text file, skipping node_modules, .venv and .git, and also finds the dated snapshot:
grep -rnF --exclude-dir=node_modules --exclude-dir=.venv --exclude-dir=.git -e gpt-image-1-mini -e gpt-image-1.5 -e chatgpt-image-latest .Each line it prints names a file, a line number and the matching text; no output means none of the three names is in those files. A model name kept outside the project, in an environment variable, saved user settings or a database row, does not show up in a code search; check those separately. Moving to one of the three is no longer a fix: code that replaced gpt-image-1 with gpt-image-1-mini or gpt-image-1.5 after 23 October stops working on 1 December.
Library defaults. In the current releases of these 10 packages, read on 6 November, none sends one of the three when you don't pass a model: langchain-openai 1.7.4, langchain 1.4.9, langchain-community 0.4.2, llama-index-llms-openai 0.8.3, llama-index-core 0.14.25, llama-index-tools-openai-image-generation 0.7.0, haystack-ai 3.4.1, crewai 1.15.35, crewai-tools 1.15.35 and openai-agents 0.24.0. Where the names appear, it is in lists of known models. haystack-ai's OpenAIImageGenerator defaults to gpt-image-2, which has no shutdown date on OpenAI's page.
Two image tools still default to dall-e-3, which OpenAI shut down on 12 May 2026: DallETool in crewai-tools 1.15.35 (crewai_tools/) and the image_generation tool in llama-index-tools-openai-image-generation 0.7.0 (llama_index/). If you use either, check which model it sends.
n8n. One more place sends one of the three when you leave the model alone. In n8n 2.46.7, the current stable release (9 November), and in 2.46.6 before it, the OpenAI node's Generate an Image action defaults to gpt-image-1-mini (dist/ in @n8n/n8n-nodes-langchain 2.46.7, as in 2.46.6). Its Edit Image action defaults to gpt-image-1, which already stopped working on 23 October (edit.operation.js:39 in the same folder). The 2.47.3 beta has the same two defaults. They apply to version 2.3 of the node, the version n8n adds to a new workflow. If a workflow generates or edits images with this node, open the node, look at Model, and choose a current image model from the list or by ID.
What the error will look like. We have not seen it yet. When gpt-image-1 was shut down on 23 October, requests that named it got HTTP 400 and "The model 'gpt-image-1' does not exist." (more below). We expect requests that name these three to fail the same way from 1 December.
"The model 'gpt-image-1' does not exist"
Since 23 October, image requests that name gpt-image-1 come back with HTTP 400 and this message:
The model 'gpt-image-1' does not exist.One report's production log shows the error as invalid_value on the model parameter. The wording is the problem: "does not exist" is also what people see when a model name is misspelled or an organization has no access to a model, so the first fixes people try are checking the spelling and the API key. Neither helps. The model is gone. Five of the eight public reports we counted on 23 October were this one.
Two things make it harder to spot:
- The model list can still name it. One report says
GET /v1/modelsstill listedgpt-image-1for their key after the shutdown; another found shut-down models still in an account's model list. A model-list check is not proof a model works. - The name is often typed in many places. One report found it in 10 application files and 5 scripts, so every kind of image generation failed at once. Saved user settings and database rows that store a model name fail the same way, and a code search does not find them.
Fix: send a current image model. OpenAI's deprecations page lists gpt-image-2.5-sunburst or gpt-image-2.5-flare as replacements for gpt-image-1. We have not tested either.
Not gpt-image-1-mini or gpt-image-1.5. OpenAI lists 1 December 2026 as the shutdown date for gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest. A fix that moves to one of them stops working on 1 December. See Before 1 December.
If you moved off dall-e-2 or dall-e-3 when OpenAI shut them down on 12 May 2026, check what you moved to. OpenAI's entry for that shutdown lists gpt-image-1 and gpt-image-1-mini among the replacements, and both are now on the shutdown list.
If you use n8n: in n8n 2.46.6 and 2.46.7 the OpenAI node's Edit Image action defaults to gpt-image-1. Open the node and choose a current image model under Model. See Before 1 December, which also covers its Generate an Image default.
"The model … has been deprecated"
Chat and completion requests that name a model shut down on 23 October get HTTP 404 with the code model_not_found. Through the Python SDK, one public report shows it like this:
openai.NotFoundError: Error code: 404 - {'error': {'message': 'The model `gpt-3.5-turbo` has been deprecated, learn more here: https://platform.openai.com/docs/deprecations', 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}Despite the word "deprecated", the model no longer answers at all. The 23 October shutdown covers these names, each with the substitute OpenAI's page lists:
| Model, as you may have it in code | OpenAI's listed substitute |
|---|---|
gpt-3.5-turbo, gpt-3.5-turbo-0125 | gpt-5.6-terra |
gpt-4, gpt-4-0613, gpt-4-1106-preview | gpt-5.6-sol |
gpt-4-turbo, gpt-4-turbo-2024-04-09 | gpt-5.6-sol |
gpt-4.1-nano, gpt-4.1-nano-2025-04-14 | gpt-5.6-luna |
gpt-4o-2024-05-13 (only this dated snapshot) | gpt-5.6-sol |
o1, o1-2024-12-17, o3-mini, o3-mini-2025-01-31 | gpt-5.6-sol |
o1-pro, o1-pro-2025-03-19 | gpt-5.6-sol with reasoning.mode: pro |
o4-mini, o4-mini-2025-04-16 | gpt-5.6-terra |
gpt-image-1 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
Fine-tuned models built on gpt-3.5-turbo, gpt-4, gpt-4.1-nano, o4-mini, babbage-002 and davinci-002 were shut down the same day. gpt-3.5-turbo-instruct, gpt-3.5-turbo-1106, babbage-002 and davinci-002 were shut down earlier, on 28 September. Bare gpt-4o and gpt-4o-mini are not on the 23 October list; their dated snapshots are on the 14 January list. Azure OpenAI deployments follow Azure's own schedule.
The substitutes are different models with their own prices and behaviour. Check them before you switch; we have not tested them.
Libraries that send a retired model when you don't pass one
One report on 23 October found that every AI feature on a staging server failed because the configuration set no model and the code fell back to its own default, gpt-4. The same thing happens one level down, inside libraries. In their current releases on PyPI, these send a model OpenAI has shut down by default when you don't pass a model:
| Package and version | What sends it | Default | Where |
|---|---|---|---|
| langchain-openai 1.7.4 (4 November) | ChatOpenAI() | gpt-3.5-turbo | langchain_openai/ |
| langchain-openai 1.7.4 | OpenAI() (completions) | gpt-3.5-turbo-instruct, shut down 28 September | langchain_openai/ |
| llama-index-llms-openai 0.8.3 (12 October) | OpenAI() | gpt-3.5-turbo | llama_index/ |
| langchain-community 0.4.2 (22 May) | DallEAPIWrapper() (images) | dall-e-2, shut down 12 May | langchain_community/ |
In LlamaIndex the default also reaches code that never creates an OpenAI object. If llama-index-llms-openai is installed and nothing sets Settings.llm, llama-index-core falls back to OpenAI() (llama_index/, llama_index/ in 0.14.25), so query and chat engines built without an llm send gpt-3.5-turbo.
Fix: pass the model explicitly.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-5.6-terra")from llama_index.core import Settings
from llama_index.llms.openai import OpenAI
Settings.llm = OpenAI(model="gpt-5.6-terra")gpt-5.6-terra is the substitute OpenAI lists for gpt-3.5-turbo; put in whichever current model you have chosen. Both releases above already know the gpt-5.6 names: they are in langchain-openai's model profiles and in LlamaIndex's model table (llama_index/), which matters because LlamaIndex can raise Unknown model for a name missing from that table. We have not run either library against the API with these models.
Upstream. The maintainers have open fixes. In LangChain, issue #40995 reports both defaults, and pull request #41041 makes ChatOpenAI require an explicit model: once it ships, ChatOpenAI() without one raises a validation error when it is created, instead of failing at the first request. In LlamaIndex, pull request #23355 changes the default. Neither was merged on 6 November 2026, and passing model= works with or without them.
Check your code and installed packages
Your own code. Run this in your project's root. It lists every quoted model name from the 23 October and 28 September shutdowns, in any text file, skipping node_modules, .venv and .git:
grep -rnE --exclude-dir=node_modules --exclude-dir=.venv --exclude-dir=.git \
"[\"'](openai/)?(gpt-3\.5-turbo(-0125|-1106|-instruct)?|gpt-4(-0613|-1106-preview|-turbo(-2024-04-09)?)?|gpt-4\.1-nano(-2025-04-14)?|gpt-4o-2024-05-13|gpt-image-1|o1(-2024-12-17)?|o1-pro(-2025-03-19)?|o3-mini(-2025-01-31)?|o4-mini(-2025-04-16)?|babbage-002|davinci-002)[\"']" .It matches "gpt-4" but not "gpt-4o", "gpt-4.1", "gpt-image-1.5" or "gpt-image-1-mini". Model names kept in environment variables, secrets, config services or a database don't show up; check those separately.
Installed Python packages. Our check script looks for the library defaults on this page in the packages installed in a Python environment. It reads their files as text and does not import them, install anything, read environment variables or credentials, or use the network. Download it and run it with your app's Python:
curl -fsSLO https://cybernative.ai/guides/openai-model-shutdown-gpt-image-1-does-not-exist/check/check_default_models.py
.venv/bin/python -I -S check_default_models.pyThe file's SHA-256 is 41a5b60e143562eaa36c8688f1fb52c93571855ec0f18ed477e8b00c3a277f65. To check a deploy image or another environment, pass its site-packages directory as an argument. With langchain-openai 1.7.2 installed, the first finding is:
FOUND langchain-openai 1.7.2: langchain_openai/chat_models/base.py:801 default 'gpt-3.5-turbo'
used by: ChatOpenAI(...) without model=
listed: shutdown date 2026-10-23 on OpenAI API (https://developers.openai.com/api/docs/deprecations)
exposure: only if your code relies on this default AND the request reaches that hostExit status 1 means it found at least one default on a shutdown list, or a short name such as gpt-4o-mini whose dated snapshot is listed (reported as ALIAS, see the next dates). 0 means at least one package it checks is installed and none of them has one. 2 means it could not answer, which is not an all-clear: usually it ran with a different Python from your app's, or it met a package it does not read. It reports older packages such as langchain-community, which holds the DallEAPIWrapper default, as NOT CHECKED. A finding means the default is installed, not that your app uses it. Its README lists every default it knows, and sources.json the package files and provider pages behind them.
Packages the script does not read. With your project's Python environment active, this searches its site-packages and keeps the lines that mention a default or a model:
SP="$(python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')"
grep -rnE --include='*.py' \
"[\"'](openai/)?(gpt-3\.5-turbo(-0125|-1106|-instruct)?|gpt-4(-0613|-1106-preview|-turbo(-2024-04-09)?)?|gpt-4\.1-nano(-2025-04-14)?|gpt-4o-2024-05-13|gpt-image-1|o1(-2024-12-17)?|o1-pro(-2025-03-19)?|o3-mini(-2025-01-31)?|o4-mini(-2025-04-16)?|babbage-002|davinci-002)[\"']" \
"$SP" | grep -iE 'default|model'Not every line it prints is a request. With langchain-openai 1.7.2, llama-index-llms-openai 0.8.3 and llama-index-core 0.14.25 installed, it printed 13 lines; three were the defaults in the table above. The others were docstring examples, a tokenizer default, a context-size lookup, name comparisons and one name used only to format messages locally. A line is worth acting on when the name is a default value, as in Field(default=, DEFAULT_OPENAI_MODEL = "gpt-3.5-turbo" or a parameter's = "…", and your code calls that class or function without a model.
Searching can miss a default that is built from parts or read from a data file. The most direct evidence of what actually ran is your OpenAI usage dashboard grouped by model. The scanner in the llm-model-deprecation package (1.1.0, its newest release) skips site-packages by default, so it does not look at library defaults unless you point it there.
The next dates
The library counts come from our 18 October read of the latest release of the 252 packages, among the 15,000 most downloaded on PyPI, that depend directly on the OpenAI, Anthropic or Google SDKs. The calendar entries list each package with its file and line.
Three examples, read in the current releases on 23 October:
- haystack-ai 3.4.1:
OpenAIChatGenerator()andOpensendAIResponses Chat Generator() gpt-5-mini(haystack/,components/ generators/ chat/ openai.py:124 openai_responses.py:127). The 11 December list hasgpt-5-miniitself, next togpt-5-mini-2025-08-07. - llama-index-llms-openai 0.8.3:
OpenAIResponses()sendsgpt-4o-mini(llama_index/). The 14 January list hasllms/ openai/ responses.py:105 gpt-4o-mini-2024-07-18. - crewai 1.15.29: an agent created without
llm=usesgpt-4.1-miniwhen theMODEL,MODEL_NAMEandOPENAI_MODEL_NAMEenvironment variables are unset (crewai/). The 14 January list hasconstants.py:355 gpt-4.1-mini-2025-04-14.
Short names: on the list for 11 December, not for 14 January. For 23 October, OpenAI's page listed the short names, such as gpt-4, next to the dated snapshots, and they stopped working. Its 11 December table now does the same: gpt-5 next to gpt-5-2025-08-07, and likewise gpt-5-mini, gpt-5-nano, gpt-5-pro, o3 and o3-pro. When we read it on 23 October, that table had only the snapshots. Plan for those names to stop on 11 December, including the gpt-5-mini that haystack-ai sends by default. For 14 January the page still lists only dated snapshots, such as gpt-4o-2024-08-06, and does not say whether gpt-4o, gpt-4o-mini, gpt-4.1 or gpt-4.1-mini stop working. Passing model= explicitly takes the question away.
Get the next date as a warning in your build
Each date in the table above is on the calendar with a search for the model names it removes, so the step finds the line of code that names one. It reads your own files, not installed packages. The Breakage Calendar has more dates that a repository's files can show: image tags that move, runtimes that reach end of life, retired CI runners, model shutdowns. One workflow step runs each date's search on your repository and warns on the line it affects, with the days left and, where we have one, a link to a tested fix. It reads your files on the runner and sends nothing about them to us; its warnings stay with the workflow run on GitHub.
Free model-deprecation scanners such as llm-sunset and llm-model-deprecation cover this kind of date too. This step adds the calendar's other dates: image tags, runtimes and CI runners.
Save this as .github/:
name: Dated breaks
on:
pull_request:
schedule:
- cron: '17 6 * * 1'
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: CyberNative-AI/dated-break-check@d0f1d1cd5b0c57e873a4f4acc4ea1912547785dd # v1.0.0
with:
fail-within: ${{ github.event_name == 'schedule' && '14' || '' }}Pull requests get warnings. A date whose search finds the exact line, such as an image tag or model name, also fails the Monday run once it is 14 days away or fewer, so GitHub's own failed-run notice reaches you. A “may hit” date only warns. A new date on the calendar reaches you without a change to your code.
How we checked
On 23 October 2026 we searched GitHub for issues and pull requests opened that day whose text quotes one of the two errors and counted 8, in 8 projects, between 17:45 and 21:10 UTC. Five quoted the gpt-image-1 message. Each was a developer fixing their own project. We read the defaults from the published wheels of langchain-openai 1.7.2 and llama-index-llms-openai 0.8.3, the newest versions on PyPI that day, and the Settings.llm fallback from llama-index-core 0.14.25. We read the other defaults on this page from the wheels of langchain-community 0.4.2, haystack-ai 3.4.1 and crewai 1.15.29, and searched 11 packages (17 wheels) for image-model defaults. We ran both search commands on langchain-openai, llama-index-llms-openai and llama-index-core and on a test file. We ran the check script on Python 3.12 against langchain-openai 1.7.2, llama-index-llms-openai 0.8.3 and llama-index-core 0.14.25, with and without langchain-community 0.4.2. We made no API calls, so the two error messages are quoted from those reports, not reproduced by us. We re-read OpenAI's deprecations page, both pull requests and PyPI on 25 October. On 6 November we re-read OpenAI's deprecations page, LangChain issue #40995, both pull requests, and the current wheels of the 10 packages named in Before 1 December. langchain-openai 1.7.4 still sends gpt-3.5-turbo, now from line 805, and the check script reports it. We ran the one-line search for the 1 December names on a test project in dash and bash. On 8 November we read the OpenAI node's image actions in the npm packages of @n8n/n8n-nodes-langchain 2.46.6, the version n8n 2.46.6 installs, and 2.47.2, the version in the n8n 2.47.2 beta. On 9 November we read the same two files in 2.46.7, the version n8n 2.46.7 installs, and in 2.47.2 again, the version the n8n 2.47.3 beta installs: the same defaults on the same lines. We did not run n8n. Executed by us; not independently reproduced.
Sources: OpenAI API deprecations (entries of 14 November 2025 for the DALL·E models, 22 April 2026 for 23 October, 2 June 2026 for the GPT Image models, 11 June 2026 for 11 December and 14 October 2026 for 14 January); Claude model deprecations; langchain-openai on PyPI; llama-index-llms-openai on PyPI; LangChain issue #40995; LangChain pull request #41041; LlamaIndex pull request #23355; @n8n/n8n-nodes-langchain 2.46.6 and 2.46.7 on npm.