Readiness review

Your code didn’t change. The API did.

AI models get shut down on dates their makers set. Arbor finds the ones your Python code still calls, and tells you what has to change.

npx @anandb71/arbor-cli@3.1.1 retirements .

Runs on your own machine. Your code never leaves it. Free and open source.

Scroll to move the date

Every model has a sunset.

This small app asks AI models for answers in five places. Each sun is one of them. The lower it sits, the less time it has.

ModelSets onTime left
gpt-4o14 Jan 2027–
claude-sonnet-4-5-2025092930 Nov 2026–
o4-mini23 Oct 2026already set
claude-3-5-sonnet-2024102228 Oct 2025already set
os.environ["CHAT_MODEL"]unknownnot checked

30 Nov 2026

Anthropic shuts one down.

claude-sonnet-4-5-20250929

3 of 5

now fail.

Nobody touched the code.

Then OpenAI shuts down gpt-4o and gpt-4.1.

14 Jan 2027

4 of 5 now fail.

The fifth is a question mark. Its model is set outside the code, where Arbor can’t read it, so Arbor says so instead of guessing.

And a new name isn’t enough.

gpt-4o → gpt-6-luna

Swap gpt-4o for the replacement OpenAI lists, gpt-6-luna, and send the same request. The new model takes different settings, so the request is turned down, for two separate reasons.

400

Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.

400

Unsupported value: 'temperature' does not support 0.2 with this model. Only the default (1) value is supported.

Real replies from OpenAI’s API, recorded on 18 Oct 2026.

Arbor shows what has to change, and what you get to decide.

$ npx @anandb71/arbor-cli@3.1.1 retirements .app/chat.py:19 gpt-4o (line 20) → 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)

It never decides for you.

See every sunset coming.

One command reads your Python code, on your own machine, and lists every model it calls, the day each one shuts down, and what has to change.

npx @anandb71/arbor-cli@3.1.1 retirements .
Model retirements in . (1 Python file checked)1 call uses a model OpenAI shuts down on 14 Jan 2027 (45 days) app/chat.py:19 gpt-4o (line 20) → 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) decide once for this repo (Arbor does not choose): gpt-6-luna runs at medium reasoning effort by default, so it can reason; the model it replaces answered without a reasoning step.
What Arbor 3.1.1 printed for the example app, with the date set to 30 Nov 2026.

Even OpenAI’s own examples have this problem.

22 calls in 20 files

We ran Arbor on the example code in OpenAI’s own Python library on 20 Oct 2026. It found 22 calls, in 20 files, to models that are shut down or have a shutdown date. See the full run

Set your deadline before theirs.2

Add Arbor to your pull requests and tell it how many days’ warning you want.1 The check turns red once a shutdown is that close.

Show the setup (12 lines)Hide the setup
  1. With 90 days’ warning, a gpt-4o call has failed this check since 16 Oct 2026: two days after OpenAI’s announcement.
  2. OpenAI’s own page states at least six months’ notice for generally available models, unless safety or compliance requires faster. gpt-4o got 92 days.

What it covers today.

Covers

  • Python.
  • Direct calls to OpenAI, Anthropic and Google models.
  • 308 known shutdown dates, each linked to the provider’s own page.

Not yet

  • TypeScript and JavaScript.
  • Wrappers such as LangChain, LlamaIndex and LiteLLM.
  • Model names kept outside the code (in .env, YAML, JSON or notebooks). When a call gets its model from somewhere Arbor can’t read, Arbor lists it as not checked and doesn’t count it as failing.

Measured

On 18 example files from the OpenAI, Anthropic and older Gemini Python libraries, Arbor found all 70 places that call them or set them up.

How to run the check

Get ready before the date.

A readiness review is a fixed-price sprint. One of our founders goes through your code with you, we write the fixes with your team before the date, and we list every call we find but can’t check.

$1,500 for up to 3 repos and $500 for each repo after that, agreed in writing and paid before work starts.

Request a readiness review

Later: Arbor opens the fix as a pull request. Get one email when it ships.

Emails about this only. No account needed. · Privacy