Dependency check · Updated
"The model 'gpt-image-1' does not exist" and "The model gpt-4 has been deprecated": OpenAI's 23 October shutdown, and the libraries that still send a retired model by default
On 23 October 2026 OpenAI shut down gpt-image-1, gpt-3.5-turbo, gpt-4, gpt-4-turbo, o1, o3-mini, o4-mini and several other models. OpenAI's deprecations page lists the short names along with the dated snapshots. Requests that name one of them now fail. The chat models say so plainly. The image model does not: its error reads like a typo or a missing permission.
Some of the failing requests name no model in your code at all. Two widely used Python libraries, in their current releases, still send gpt-3.5-turbo when you don't pass a model. This page gives both errors, those defaults and their one-line fix, a check for your own code and installed packages, and the next three shutdown dates.
Find your error
| What you see | What it means | Section |
|---|---|---|
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.
"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 buys five weeks. See the next dates.
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.
"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.2 (14 October) | ChatOpenAI() | gpt-3.5-turbo | langchain_openai/ |
| langchain-openai 1.7.2 | 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 23 October 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 file type, 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 7d985e3b075c329380a32a6d6867b0b3fdfe4a83af50cdfb64d38278bff864d1. 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-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.
The bare names are the open question. For 23 October, OpenAI's page listed the short names, such as gpt-4, next to the dated snapshots, and they stopped working. For 11 December and 14 January it lists only dated snapshots, such as gpt-4o-2024-08-06, and does not say whether gpt-4o or gpt-5 stop working. Most of the library defaults above are bare names, so whether they break depends on what OpenAI does with them. Passing model= explicitly takes the question away.
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. 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.