Three Tiers, One Family, Two APIs

For two years "use GPT-4o" was a complete answer to which OpenAI model to pick. It no longer is. GPT-4o is a legacy model, the GPT-5 line came and went inside a year, and the current lineup is the GPT-6 family that arrived in September 2026. The names changed, but the more important change is underneath: these models reason before they answer, and that moved several request parameters you have relied on since 2023.

🤔 Sound familiar?
  • You changed a model name from gpt-4o to a GPT-6 model and the request started returning a 400
  • Your tool-calling code works on one GPT-6 tier and fails on another
  • Responses come back empty and you cannot see why
  • You are on Azure and cannot find the model everyone is talking about

This article covers the tiers, what reasoning effort replaced, which API to call, how the pricing works, and what is different on Azure.

The Lineup

GPT-6 AstraGPT-6.1 SolGPT-6 Luna
RoleMost capable, for the hardest workThe defaultHigh-volume, cost-sensitive work
Price per 1M tokens (input / output)$10 / $50$2 / $10$0.10 / $0.50
Context window / max output1.05M / 128K1.05M / 128K1.05M / 128K
Reasoning effortlow to maxlow to max (default medium)none to max

Start on GPT-6.1 Sol. Move a route down to Luna when your evaluation shows the quality holds, which it usually does for classification, extraction, routing and summarisation. Move a route up to Astra only when you can show Sol is the bottleneck, because the price step is five times. The older families (GPT-5.6, GPT-5, GPT-4.1, GPT-4o) are still served, but there is no price or quality reason to start anything new on them.

Reasoning Effort Replaced Temperature

GPT-6 models think before they answer, and reasoning.effort sets how much. This is the main quality and cost control now. Low effort is fast and cheap and suits most routine requests. Higher effort helps on multi-step analysis and hard coding problems, at the cost of latency and extra output tokens.

Three consequences follow, and each one is a common source of broken requests:

  • Sampling parameters are rejected while the model is reasoning. temperature, top_p and log-probabilities only work when effort is none, and only Luna supports none. On Sol and Astra, remove them.
  • The output cap includes reasoning. Reasoning tokens are billed as output and count against the limit. A cap sized for the visible answer can be used up before the answer starts, which is how you get an empty response. Leave room.
  • Determinism is weaker. Without temperature: 0 you cannot pin a reasoning model to one output. Build tests around properties of the answer and not around exact strings.

Which API: Responses or Chat Completions

OpenAI now has two text APIs, and for GPT-6 the choice is not only a matter of style. The Responses API is where new capabilities land. Chat Completions still works for plain requests, but on GPT-6.1 Sol and Astra it does not accept tools at all. Chat Completions tool calling works only on Luna with reasoning effort set to none.

import json
from openai import OpenAI

client = OpenAI()

tools = [{
    "type": "function",
    "name": "get_order_status",
    "description": "Look up the status of an order by its id.",
    "strict": True,
    "parameters": {
        "type": "object",
        "properties": {"order_id": {"type": "string"}},
        "required": ["order_id"],
        "additionalProperties": False,
    },
}]

response = client.responses.create(
    model="gpt-6.1-sol",
    reasoning={"effort": "low"},
    input="Where is order A-1042?",
    tools=tools,
)

for item in response.output:
    if item.type == "function_call":
        result = get_order_status(**json.loads(item.arguments))
        response = client.responses.create(
            model="gpt-6.1-sol",
            previous_response_id=response.id,
            input=[{
                "type": "function_call_output",
                "call_id": item.call_id,
                "output": json.dumps(result),
            }],
            tools=tools,
        )

print(response.output_text)

If you have a large Chat Completions codebase that depends on tools and temperature, the lowest-effort path is to point it at GPT-6 Luna with reasoning_effort="none". That keeps the request shape you have. Move the routes that need Sol or Astra to the Responses API as you touch them.

How the Bill Is Calculated

  • Cached input is nearly free. Repeated prompt prefixes are cached automatically and billed at 5 to 10 percent of the normal input rate. Put the stable parts of the prompt first and the per-request parts last.
  • Long prompts cost more per token. Above 272K input tokens a request is billed at a higher long-context rate. A million-token window is a capability, not a default to fill.
  • Output is five times the price of input on every tier, and reasoning counts as output. Effort and answer length move the bill more than prompt length does.
  • Batch processing is discounted. Work that can wait, such as evaluations, backfills and bulk classification, should not run at the interactive price.

On Azure, the Calendar Is Different

Azure OpenAI lists new models some weeks after the OpenAI API does. As of October 2026 the newest family there is GPT-5.6 (Sol, Terra and Luna), and it is the replacement Microsoft names for retiring GPT-4o and o-series deployments. Those retirements have dates: the older GPT-4o versions and the o-series go between November 2026 and April 2027. If you run on Azure, the model to deploy today is GPT-5.6, and the migration deadline for anything older is already set.

⚠️ Common Mistakes

1. Changing only the model name

A request written for GPT-4o usually carries temperature, max_tokens and tools on Chat Completions. All three need attention on GPT-6. Treat a model upgrade as a small migration with its own evaluation run.

2. A small output cap on a reasoning model

A cap of 200 tokens was reasonable when every token was part of the answer. With reasoning it can produce nothing. Set the cap for reasoning plus answer, and control length through the instructions.

3. Using the top tier by default

Astra costs one hundred times what Luna does. Most production traffic is routine. Route by task, and keep the expensive tier for the requests that need it.

4. Assuming Azure matches the OpenAI API

Model names, versions and availability differ. Check the Azure model lifecycle page before you promise a model to a customer who deploys there.

Key Takeaways

✅ Key Lessons
  • GPT-6.1 Sol is the default, Luna is the volume tier, Astra is the exception. Route by task and confirm with your own evaluation.
  • Reasoning effort is the main control. Temperature is gone on the reasoning tiers, and reasoning counts against the output cap.
  • Use the Responses API for tools on Sol and Astra. Chat Completions tool calling survives only on Luna with reasoning off.
  • Design prompts for caching. Stable content first, variable content last.
  • Azure runs behind and retires on a schedule. Know both dates.