📰 AI NewsProject ManagementIntermediate✨ AI-assisted

GPT-4o and GPT-4.1 Deprecated: What GPT-6 Luna Costs

WittyTech Daily··4 min read
#openai#gpt-4o#gpt-6-luna#deprecation

Your roadmap just picked up an item with a date that won't move. On October 14, 2026, OpenAI added a GPT-4 series entry to its deprecations page: GPT-4o is deprecated, along with GPT-4o mini, GPT-4.1 and GPT-4.1 mini. All four leave the API on January 14, 2027.

GPT-4o deprecated: the shutdown timeline

The OpenAI deprecations page lists these snapshots, each with gpt-6-luna as the recommended replacement:

| Model | Snapshot | Shutdown | |---|---|---| | GPT-4o | gpt-4o-2024-08-06, gpt-4o-2024-11-20 | Jan 14, 2027 | | GPT-4o mini | gpt-4o-mini-2024-07-18 | Jan 14, 2027 | | GPT-4.1 | gpt-4.1-2025-04-14 | Jan 14, 2027 | | GPT-4.1 mini | gpt-4.1-mini-2025-04-14 | Jan 14, 2027 |

Fine-tuned versions follow the same schedule as their base models. That is 92 days from today. The entry doesn't mention Realtime or audio variants, so check those separately.

One earlier date matters more. The same page lists gpt-4o-2024-05-13 and gpt-4.1-nano for shutdown on October 23, 2026, nine days away, with different listed replacements. If an old config pins either one, fix that first.

GPT-4o replacement: what GPT-6 Luna costs

These are standard-tier prices per million tokens, from the OpenAI pricing page:

| Model | Input | Cached input | Output | |---|---|---|---| | gpt-6-luna | $0.10 | $0.01 | $0.50 | | gpt-4o | $2.50 | $1.25 | $10.00 | | gpt-4o-mini | $0.15 | $0.075 | $0.60 | | gpt-4.1 | $2.00 | $0.50 | $8.00 | | gpt-4.1-mini | $0.40 | $0.10 | $1.60 |

Luna is cheaper than all four. Against gpt-4o, input is 25 times cheaper and output 20 times. As plain arithmetic, 500M input and 100M output tokens a month costs $2,250 on gpt-4o and $100 on Luna at list prices. Against gpt-4o-mini the gap is small ($0.10 versus $0.15 input), so don't promise finance a miracle for that workload.

Treat that arithmetic as a ceiling, not a forecast. Token counts will shift, and the model page says Luna's reasoning effort defaults to medium, so measure real usage. A few more price facts:

  • Batch and Flex are half the standard rate: $0.05 input, $0.25 output.
  • Standard prompts above 272K input tokens cost $0.20 input and $0.75 output.
  • Luna's table also lists a cache write price of $0.125 per million tokens.
  • The context window is 1,050,000 tokens.

GPT-4.1 deprecation: a migration plan built on regression evals

A regression eval is a fixed set of real inputs with known good answers that you rerun after every change. Without one, "the new model feels fine" is your only test evidence. Work backwards from January 14:

  • By Monday, October 19: inventory every call site, owner and fine-tune.
  • By November 13: one golden set per workload, 50 to 200 real inputs with answers a business owner has signed off.
  • By December 1: side-by-side runs, prompt fixes, then a small canary.
  • By December 15: full cutover, which leaves a month of slack.

Start the inventory with a search that engineers can run in a minute:

grep -rnE 'gpt-4o|gpt-4[.]1' . \
  --include='*.py' --include='*.ts' --include='*.yaml' \
  --include='*.json' --include='.env*'

This also catches fine-tuned model IDs that contain the base name. Add anything stored in a database or a vendor dashboard by hand.

Then run the old and new models over the same golden set. This uses the Responses API:

import json
from openai import OpenAI

client = OpenAI()

def ask(model, prompt, **extra):
    resp = client.responses.create(model=model, input=prompt, **extra)
    return resp.output_text

# golden.jsonl: one {'prompt': ..., 'expected': ...} object per line
cases = [json.loads(line) for line in open('golden.jsonl')]
score = {'old': 0, 'new': 0}

for case in cases:
    old = ask('gpt-4o-2024-11-20', case['prompt'])
    new = ask('gpt-6-luna', case['prompt'], reasoning={'effort': 'none'})
    score['old'] += case['expected'] in old
    score['new'] += case['expected'] in new

print('old', score['old'], 'of', len(cases))
print('new', score['new'], 'of', len(cases))

The substring check is crude, so swap in whatever grader fits your output. Rerun with effort set to low and medium to see what extra reasoning buys you for the extra tokens. Only ship a model when its score is at least the old one's, and keep the old model name in config until cutover so rollback is a one-line change.

Gotchas

  • Fine-tunes have no like-for-like swap. The model page doesn't list fine-tuning for gpt-6-luna and says the v1/fine-tuning endpoint isn't supported. If a fine-tuned model carries your workload, the replacement is prompting plus evals, so start there first.
  • Sampling parameters. OpenAI's latest model guide says to remove temperature, top_p and top_logprobs when reasoning effort is not none. Carry-over request code needs a look.
  • Function calling on Chat Completions. On Luna it works only when reasoning effort is none.
  • Style drift. The guide notes the newer models tend toward detailed, formatted answers, so check any parser that expects terse output.

A forced model swap with a 92-day clock is cheap if you already have an inventory and evals, and expensive if you start in the last week of December.

← More in Project Management