Guides

Reliability & Evaluation

How to replace the model under a production AI agent without breaking it (GPT-4o and GPT-4.1 retire 14 January 2027)

Inventory every call, score the same evals on both models, and keep routing that must not vary in a decision layer.

By Tirth Gajjar · Founder & CTO

16 min

At a glance

As of October 2026, OpenAI schedules GPT-4o, GPT-4o mini, GPT-4.1, GPT-4.1 mini, and fine-tunes on them to leave the API on 14 January 2027. The model id is the small edit. The listed replacement changes how tools and reasoning combine.

Bigcircle reruns the eval harness when the model id changes, scores repeat-run pass rates, checks tool and structured-output contracts, and ships the new id by shadow and canary routing, with a decision layer holding the routing that must not vary.

Who this is for
Engineers building AI systems and technical leads reviewing the implementation.
Topics
  • AI Agent
  • Evals
  • Tool / Function Calling
  • Structured Output & Constrained Decoding
  • Fine-Tuning (SFT)
  • Model Routing & Cascading

Published

How do you replace the model under a production agent before GPT-4o and GPT-4.1 leave the API? As of October 2026, OpenAI's deprecations page schedules those models, GPT-4o mini, GPT-4.1 mini, and fine-tunes built on them for shutdown on 14 January 2027. Changing the string in the client is the small part of the work. GPT-6 Luna, the listed replacement, puts tools and reasoning on a different path, and sampling controls drop once reasoning is turned on.

Key facts

Definition

OpenAI's deprecations page, as of October 2026, sets 14 January 2027 as the shutdown for the listed GPT-4o and GPT-4.1 snapshots and for fine-tunes on those bases.

How Bigcircle does it

  1. Bigcircle scores the current model and the replacement on the same eval cases, and a safety case has to pass on every repeat.
  2. Bigcircle checks tool-call contracts and structured-output schemas even when the prose score did not move.
  3. Bigcircle sends live traffic to the new id only after a shadow and a canary, and keeps deterministic routing in a decision layer.

Comparison

A one-line change to the model string leaves tool calling, sampling, and the long-prompt price on the replacement's rules, so the eval report has to name both ids.

Key number

VentureBeat's September 2026 survey of 109 opt-in respondents found that 59 percent of companies that replaced a production model saw a drop and reworked the app or went back.

At Bigcircle that change reuses the eval harness from How to build LLM evals. We score the same cases on the model in production and on the replacement, including the repeat-run pass rates in why temperature zero doesn't make an LLM agent repeatable. Tool calling and structured output are checked on their own. Traffic moves through shadow and then a canary, and a decision layer keeps the routing that must not vary when the generative model changes.

The shutdown table comes first, with the dates as they stood in October 2026. The next section covers what Luna changes in tool calls, sampling, and the price of a long prompt, and why a score on the old model does not travel. Then the sequence we run, the earlier cutoff for a fine-tune, and the API field that carries the next date. The last section is the setup we use before a client system changes model.

Which ids shut down, and on which date?

OpenAI's deprecations page is the source for every date in this section, read in October 2026. A model becomes deprecated when the shutdown is announced, and it keeps answering until the shutdown date. After that date the id is gone.

The page states a minimum notice of six months for a generally available model, and three months for a specialized variant, unless a safety or compliance concern requires a faster timeline. The GPT-4 series notice is dated 14 October 2026 and the shutdown is 14 January 2027, which is three months. The page does not say which exception applies to this batch.

Shutdown dateWhat leaves the APIListed replacement
23 October 2026gpt-3.5-turbo-0125, plus aliases gpt-3.5-turbo and gpt-3.5-turbo-completionsgpt-5.6-terra
23 October 2026gpt-4-0613, plus aliases gpt-4, gpt-4-0613-completions, and gpt-4-completionsgpt-5.6-sol
23 October 2026gpt-4-1106-previewgpt-5.6-sol
23 October 2026gpt-4-turbo, gpt-4-turbo-2024-04-09, and gpt-4-turbo-completionsgpt-5.6-sol
23 October 2026gpt-4.1-nano, gpt-4.1-nano-2025-04-14, and ft-gpt-4.1-nano-2025-04-14gpt-5.6-luna
23 October 2026gpt-4o-2024-05-13gpt-5.6-sol
23 October 2026gpt-image-1gpt-image-2.5-sunburst or gpt-image-2.5-flare
23 October 2026o1-2024-12-17 and alias o1gpt-5.6-sol
23 October 2026o1-pro-2025-03-19 and alias o1-progpt-5.6-sol, with reasoning.mode set to pro
23 October 2026o3-mini-2025-01-31 and alias o3-minigpt-5.6-sol
23 October 2026o4-mini-2025-04-16, alias o4-mini, and ft-o4-mini-2025-04-16gpt-5.6-terra
23 October 2026ft-gpt-4gpt-5.6-sol
23 October 2026ft-gpt-3.5-turbo, ft-babbage-002, and ft-davinci-002gpt-5.6-terra
31 October 2026Existing evals on the Evals platform become read-onlyDashboard and API shut down on 30 November
30 November 2026Evals dashboard and APIOpenAI points readers to a Promptfoo migration note
30 November 2026Agent BuilderAgents SDK or ChatGPT Workspace Agents. ChatKit stays
30 November 2026v1/prompts and reusable prompt objectsMove the prompt text into application code
11 December 2026gpt-5-2025-08-07 and o3-2025-04-16gpt-5.6-sol
11 December 2026gpt-5-pro-2025-10-06 and o3-pro-2025-06-10gpt-5.6-sol, with reasoning.mode set to pro
11 December 2026gpt-5-mini-2025-08-07gpt-5.6-terra
11 December 2026gpt-5-nano-2025-08-07gpt-5.6-luna
6 January 2027New self-serve fine-tuning jobs, for customers who can still create themInference on an existing fine-tune lasts until its base model shuts down
14 January 2027gpt-4o-2024-08-06 and gpt-4o-2024-11-20gpt-6-luna
14 January 2027gpt-4o-mini-2024-07-18gpt-6-luna
14 January 2027gpt-4.1-2025-04-14gpt-6-luna
14 January 2027gpt-4.1-mini-2025-04-14gpt-6-luna
14 January 2027Fine-tuned versions of those four basesThe same date as the base model

An alias that points at one of these snapshots shuts down with it. The page also says that, in some cases, dedicated capacity can keep an id available after its shutdown date, arranged with OpenAI sales. Dedicated capacity is a separate contract, and it does not replace a tested migration or become the default for a self-serve key.

The same page lists further audio shutdowns, including gpt-4o-mini-tts snapshots on 6 January 2027 and gpt-4o-transcribe on 26 February 2027. This guide stays with the text models an agent is likely to have pinned. A voice pipeline that calls those audio ids still has to leave them before those dates.

What does GPT-6 Luna change in the request?

GPT-6 Luna is the replacement OpenAI names for the 14 January batch, and the migration note says to judge it on representative requests before production traffic moves. The model page is where the request shape is written down. Reasoning effort includes none, and the default is medium. Chat Completions can call functions only when reasoning effort is none. Reasoning and tools together use the Responses API.

When reasoning effort is anything other than none, the call has to drop temperature, top_p, and top_logprobs. Chat Completions also drops logprobs, and the Responses API drops message.output_text.logprobs.

A prompt that used temperature to hold a format cannot send that field once reasoning is on. The format then moves, and the sampler setting that used to explain the movement is no longer on the request.

The migration note says most GPT-4.x uses are expected to start at reasoning effort none, and then to try other settings against quality, latency, and cost. We start at none on a tool-calling Chat Completions app for that reason. A medium default adds reasoning tokens the old call did not bill, and what a production AI agent costs is where a longer trace shows up on the invoice.

Luna's published text rates are $0.10 per million input tokens and $0.50 per million output tokens. Cached input is $0.01 per million. Cache writes are $0.125 per million, which the model page describes as 1.25 times the uncached input rate. A prompt with more than 272,000 input tokens is priced at twice the input and cache rates, and at 1.5 times the output rate, for the entire request.

The migration note says the per-token price is lower than the GPT-4.x models it covers. It also says to compare total cost on your own workloads, because token use and the reasoning setting can raise the bill for one task after the rate card has fallen.

The context window is 1,050,000 tokens, and the maximum input is 922,000 tokens. A retrieval prompt that used to sit under an older limit can cross the 272,000-token price step without a change to the chunker, which changes the cost and can change the behavior if the extra context was why the old call worked.

Why does a score on the old model fail to travel?

The prompt can be byte-for-byte the same and the agent can still take a different tool, or fill a field with a different value. VentureBeat Intelligence's September 2026 Agentic Orchestration survey is the public count we have for how often that happens. It had 109 qualified respondents, people at organizations of at least 100 employees, or consultants whose main client is such an organization, and they opted into the survey.

Of those respondents, 62 percent had replaced a model inside a production app in the past year. Among the companies that replaced one, 59 percent saw performance drop and had to rework the app or return to the original model.

The write-up says those figures describe the respondents and may not hold for every company. Consultants reported a swap more often than in-house respondents, 81 percent against 51 percent, which pulls the 62 percent up.

Only 19 percent of the companies that swapped said the work was almost none. For 75 percent, the switch took a few days of engineering or more, or they stopped before finishing. We cite the survey for the rate, and we still score our own cases, because an opt-in group of 109 is not our traffic.

A tool schema can stay valid while the model picks a different tool, or while the arguments change shape. A structured-output schema can still parse and still mean a different field, and one completion cannot show that.

Why temperature zero doesn't make an LLM agent repeatable is why a safety case has to pass on every repeat, and why a quality case ships on the pass rate across repeats. A single green run on Luna is a sample, and the next batch of neighbours on the server can move the top token.

What has to be true before the model id changes?

The figure is the 6 January and 14 January dates from OpenAI, and the order of work we run against them. The lanes are the sequence, and the drawing states no pass rates.

Before GPT-4o and GPT-4.1 leave the APIDates from OpenAI's deprecations page, as of October 2026. Lanes are the order of work.October 2026Inventory and evals6 January 2027New fine-tunes end14 January 2027GPT-4o and GPT-4.1 offInventoryEvery call, snapshot, and fine-tune idSame evalsCurrent model and the replacement, with repeatsContractsTool calls and structured output, on their ownShadow, then canaryRollback stays until the new id holdsRetire the old idOnly after the canary, or when the API removes itFine-tunes on these bases shut down with the base model. The drawing states no pass rates.

Blue in the figure is work that has to be finished while the old id still answers. Orange is a date the API enforces: the last day for a new fine-tuning job, and the day the listed GPT-4o and GPT-4.1 snapshots stop. The rows under the dates are the same sequence as the table that follows. A lane skipped here is a specific failure in that table, which is why the picture and the table name the same steps.

StepWhat we recordWhat fails if it is skipped
InventoryEvery model id in code, config, and stored jobs, including dated snapshots and fine-tune idsA forgotten snapshot stops answering on the shutdown date, and the tests stay green
PinThe replacement id, written into the eval report next to the id it is replacingAn alias that moves later is a second change nobody scored
Same casesThe harness from the evals guide, on the current model and on the replacementA score with no pair cannot show a regression
RepeatsA pass rate where wording may vary, and a pass on every repeat for a safety caseOne green run hides a completion that will not come back
ContractsTool name, arguments, and the structured-output schemaProse stays acceptable while the integration stops parsing
ShadowThe new id scored on live inputs, with no action takenThe canary is the first time the live distribution appears
CanaryA slice of traffic, with the old id still callableA full cutover has no rollback once config has forgotten the old id
CostTokens, reasoning, cache writes, and the 272,000-token tier on your own tracesA lower rate card with a longer trace costs more
RetireThe old id removed from the inventory after the canary holdsThe next reader puts back an id that will stop answering

OpenAI's migration note has four steps that sit inside this table: record a baseline of quality, latency, and cost; evaluate Luna starting at reasoning effort none, including formatting and tool use; tune and retest; then send a limited share of production traffic and watch quality, latency, errors, and cost. Our extra rows are the repeats and the contracts. A baseline that stores one completion cannot show a pass rate, and a prose score cannot show that a tool call changed shape.

Shadow, then a canary, is how a model change meets live traffic on the systems we ship. The new id proposes against real inputs and does not act, and a slice of traffic follows. The old id stays available for rollback until the canary's scores hold, or until the shutdown date removes the choice. Deleting the old id from config on the day the evals pass leaves no way back if the next day's traffic is a different mix.

What has to happen to a fine-tune before 6 January 2027?

Fine-tunes on the January bases follow the base model's shutdown, which is 14 January 2027. The earlier date stops new training. OpenAI's deprecations page says that on 6 January 2027, active existing customers will no longer be able to create new fine-tuning jobs.

Inference on a fine-tune is disabled only when the underlying base model is deprecated. The days between 6 January and 14 January are an overlap where an existing fine-tune can still answer while a replacement is scored beside it. They are not extra days in which a new training job can be started.

Before that cutoff we ask the question in RAG vs fine-tuning vs agentic search. The failure is either form and tacit judgement, or a fact the prompt never contained. A fine-tune that was standing in for examples can be replaced by the prompt. A behaviour that has to keep working after this base model is gone needs a base you can still train and still serve.

An open-weight fine-tune is that path only after the same eval harness passes on it. A new training job on a base that shuts down eight days later is not a migration. It is a model you will have to leave twice.

Sums, permissions, and thresholds do not belong in those weights. They stay in deterministic code, or in a decision layer whose question text the application owns. Introducing Jev into agentic workflows is that layer on the systems we ship, including when it routes between models. The generative model can change, while the question text and the code that applies the outcome do not move with it.

How do you see the next shutdown date in time to retest?

14 January is one row on a page that already has later rows, including GPT-5.1, GPT-5.3-Codex, and GPT-5.4-Nano on 1 April 2027. Waiting for an email is how a pinned snapshot becomes a surprise. The deprecations page says to call the List models endpoint, GET /v1/models, and read each model's optional shutdown date field, shutdown_date. When a date has been announced the field is a YYYY-MM-DD string. When none has been announced the field is null. The same field is on the retrieve-a-model endpoint.

We run that read on a schedule against the ids in the inventory. A date that falls inside the window we need for a retest fails the check. The failure is a pull request, or a page to the person who owns the model, and it happens while the id still answers. An email that arrives in a mailbox nobody is watching does not do that job.

Sam Newman, in an excerpt from Building Resilient Distributed Systems carried by The Pragmatic Engineer, says the software has to be able to change models, because behaviour, speed, and price move between versions. He also says a prompt tuned on one model has to be evaluated again on the next, including inside the same vendor. Putting several vendors inside a single request makes the request depend on all of them being up.

We keep a second provider as a tested option behind the same interface, and we do not add it as an extra hop the request cannot finish without.

The model id lives behind that interface, so a swap does not edit business logic. Model routing can still send an easier case to a smaller model. The gate on that route is retuned when the models change, which is the standing rule on that page. A route left on the old threshold is a silent change of which model acts, and the eval report will attribute the movement to the wrong file.

How does Bigcircle run a model migration?

On a client system we write the inventory before anyone edits an id. It includes the snapshot strings, the fine-tune ids, and any prompt that was stored as a reusable prompt object. Those objects are scheduled to shut down on 30 November 2026, so the text has to live in the application before that date, whether or not the model id is changing in the same week.

The eval harness is the one the evals guide describes. Cases come from failures someone has read, results are stored per case, and the report pins the model id, the prompt version, and the decision-layer question. We run that set on the current model and on Luna. A tool-calling app that used Chat Completions starts at reasoning effort none. Repeat runs follow the temperature-zero guide.

Bigcircle scores the current model and the replacement on the same eval cases, and a safety case has to pass on every repeat. A quality case, where a reviewer could accept more than one wording, ships on the pass rate.

Bigcircle checks tool-call contracts and structured-output schemas even when the prose score did not move. The contract pins the tool name, the arguments, and the schema. A description change and a model change can each make the model pick a different tool, which is why the agent eval runs again when the model id changes, on the same frozen tasks. A prompt edit that hides a schema bug will pass until the next model, and then the bug is back.

Bigcircle sends live traffic to the new id only after a shadow and a canary, and keeps deterministic routing in a decision layer. In shadow the new id is scored on live inputs and does not take the action. The canary is a slice of traffic, and the old id remains the rollback.

Observability keeps both traces, including the calls that failed the contract. Jev fills named fields for the routing decision. Application code applies the outcome, and a model swap does not get to rewrite the question.

Common questions

When do GPT-4o and GPT-4.1 shut down on the API?#

As of October 2026, OpenAI's deprecations page sets 14 January 2027 for 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. Fine-tunes on those bases shut down on the same day. New self-serve fine-tuning jobs end on 6 January 2027. An older GPT-4o snapshot, gpt-4o-2024-05-13, is in the 23 October 2026 batch, with gpt-5.6-sol listed as the replacement.

Can Chat Completions still call tools on GPT-6 Luna?#

Chat Completions function calling on GPT-6 Luna works only when reasoning effort is set to none. Reasoning together with tool calls uses the Responses API. When reasoning effort is not none, temperature, top_p, top_logprobs, and logprobs are not available. OpenAI's migration note says to start at none for most GPT-4.x workloads, and to test other settings on your own cases before raising effort.

What happens to a fine-tune on GPT-4.1?#

New fine-tuning jobs end on 6 January 2027 for customers who can still create them. Inference on an existing fine-tune continues until the base model shuts down. For GPT-4.1 and GPT-4.1 mini that date is 14 January 2027. Bigcircle re-runs the eval harness before then, and asks whether a prompt plus a decision layer already covers the behaviour the fine-tune was holding.

Does a passing score on the old model transfer to the new one?#

A model id change is a different system, so the old score does not transfer. VentureBeat's September 2026 survey of 109 opt-in respondents found that 59 percent of the companies that replaced a production model saw a performance drop and reworked the app or went back. Bigcircle scores the same cases on both models, with repeat runs, before any traffic moves. The survey describes those respondents, and it is not a rate for every company.

How do you watch the next shutdown date?#

Call GET /v1/models and read shutdown_date on each id you call. The field is a year-month-day string when a date has been announced, and null when it has not. The retrieve-a-model endpoint returns the same field. Bigcircle fails a scheduled check when a called model has a date inside the window needed to retest, while that id still answers.

Where should the model id live in the application?#

The model id lives behind an interface the application owns, so a swap does not edit business logic. Routing that must not vary stays in a decision layer, and on the systems Bigcircle ships that layer is Jev, with the question text in the application and the model output in named fields. A second provider is a tested option behind the same interface, not a second model inside every request.

Further reading

  • How to build LLM evals. The harness this migration reuses: cases from real failures, per-case results, and pinned versions in the report.
  • Why temperature zero doesn't make an LLM agent repeatable. Repeat-run pass rates, and the rule that a safety case passes on every repeat.
  • What a production AI agent costs. Why a lower rate card can still raise the bill once the trace gets longer.
  • RAG vs fine-tuning vs agentic search. When a fine-tune was standing in for a prompt, and when the behaviour has to outlive the base model.
  • Introducing Jev into agentic workflows. The decision layer that keeps routing stable when the generative model changes.
  • OpenAI, API deprecations, read in October 2026. Shutdown dates, the six-month notice for generally available models, the three-month notice on the 14 October 2026 GPT-4 series announcement, fine-tuning job cutoff on 6 January 2027, and the shutdown_date field on List models.
  • OpenAI, GPT-6 Luna. Reasoning effort, Chat Completions tool calling only at none, text rates, the 272,000-token price step, and cache-write pricing.
  • OpenAI, Using GPT-6. Which parameters to remove when reasoning is on, and the Responses API for tools together with reasoning.
  • OpenAI Help Center, Migrating from GPT-4.x to GPT-6 Luna. Start at reasoning effort none, compare cost on your own workloads, and roll out on a limited share of traffic.
  • VentureBeat Intelligence, agent orchestration survey, 13 October 2026. The 62 percent and 59 percent figures, the 109 qualified opt-in respondents, and the consultant versus in-house split.
  • Sam Newman, excerpt from Building Resilient Distributed Systems in The Pragmatic Engineer, Building resilient AI-powered software, 13 October 2026. Change models on purpose, re-evaluate the prompt, and do not put several vendors inside one request.