OpenAI deprecation notice, 2026-10-14 · -- days left

On January 14, 2027, OpenAI turns off every fine-tuned gpt-4o and gpt-4.1 model.

If your app calls a model ID that starts with ft:gpt-4o or ft:gpt-4.1, it stops answering that day. The suggested replacement, gpt-6-luna, can't be fine-tuned.

FT Lifeboat records what your fine-tune answers while it still works, rebuilds that behavior on luna with prompting, and measures how often the two agree. It runs in your browser, on your key.

~/fine-tunes

$ ftl countdown ft:gpt-4o-mini

--d --h --m --s

until 2027-01-14 00:00 UTC. after that: 404 model_not_found

01 / timeline

The dates

2026-10-14OpenAI publishes the deprecation notice.
2026-10-23Fine-tunes of gpt-3.5-turbo, gpt-4, gpt-4.1-nano, o4-mini, babbage-002, davinci-002 stop working.
2026-11-30Evals dashboard and API shut down (read-only from Oct 31).
2027-01-06No new fine-tuning jobs can be created.
2027-01-14Fine-tunes of gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini stop working, with their base models.

Source: developers.openai.com/api/docs/deprecations. OpenAI documents no way to export fine-tuned weights.

02 / how

The drill

  1. 1.You load the same .jsonl you fine-tuned with and paste an OpenAI key.
  2. 2.A slice of the file is held out as test cases. Each one goes to your fine-tune, and its answers are saved as golden_outputs.jsonl.
  3. 3.The same cases go to gpt-6-luna three ways: the bare prompt, 8 fixed examples from your file, and the 6 most similar examples per request (BM25).
  4. 4.You get a parity table, a case-by-case diff, and the winning setup as replacement_prompt.json plus a drop-in migrate.py.

03 / output

What you get back

This is real output from the engine, run on the synthetic fixture in the test suite: a 100-row support-ticket classifier, 40 held-out cases, against a mocked API. It shows the format. Your numbers will be different.

OptionAgrees w/ fine-tuneAgrees w/ file$ / 1k req
ftYour fine-tune (ft:gpt-4o-mini-2024-07-18:acme::abc123)n/a100%0.0193
luna-plainsame prompt, no examples38%38%0.0067
luna-static8 fixed examples from your training file93%93%0.0096
luna-dynamic← in the boat6 most similar examples per request93%93%0.0081

downloads: golden_outputs.jsonl · replacement_prompt.json · migrate.py · report.md

04 / why

Why I built this

I'm a developer. When the notice came out I looked for a way to check whether a prompt on the new model could stand in for a fine-tune, using the training file I already had. What I found were general eval platforms that want an account, a project and a pipeline before you see a number.

So this does one job. One file in, one table out, and the files you need to switch. No accounts, no server holding your data. If the numbers are bad, you learn that in October instead of on January 14.

Teuddy Cedano, CEDANO LABS LLC. Last one off the ship.

05 / pricing

Pricing

PlanPriceCases / run
Free$010Start
Pro$49 once1,000Choose
Team$149 once5,000Choose

One-time payments through Stripe, no subscription. Paid plans run as often as you like until 2027-04-30. OpenAI usage is billed to your own key, separately.

06 / faq

Questions from the deck

Where does my OpenAI key go?
It stays in the memory of the tab. It is not written to storage and it is never sent to ftlifeboat.dev. The page calls api.openai.com (or the base URL you set) directly with fetch. Open DevTools, Network tab, and check.
What leaves my browser?
Your test prompts, sent to OpenAI as chat completions. Nothing from your training file reaches my server.
Why do I have to sign in?
So the free tier stays free and a purchase follows you to any browser. You sign in with a one-time code sent to your email; no password. The server stores your email, when you signed up, and which plan you bought. That's all. Privacy.
How is a match decided?
Short labels must match exactly (case and whitespace ignored). JSON is compared field by field. Free text uses token-overlap F1. A case counts as a match at a score of 0.8 or more. Test cases are held out from the examples luna sees, and exact duplicates are removed, so the score is not inflated by leakage.
When will gpt-6-luna not match?
When the fine-tune learned something a few examples can't carry: a long-form house style, hundreds of labels, or facts spread over thousands of rows. The report will show that plainly. In that case keep golden_outputs.jsonl; it's a clean training set for an open-weight model you can fine-tune somewhere else.
My fine-tune is already gone.
Leave the model ID empty. Luna is then scored against the answers in your training file instead of live answers.
What does a run cost?
The plan price, plus OpenAI usage on your own key. Every test case is sent to your fine-tune once and to each luna variant once. With a small model and short prompts that is usually cents. If you enter prices, the report shows the cost per 1,000 requests for each option.