GPT-6 Astra Cuts Chat Completions Tool Calling: What Operators Must Change Before Routing Traffic

GPT-6 Astra refuses Chat Completions tool calls, drops temperature and top_p, adds two new error codes operators must handle, and runs async misalignment monitoring that changes the latency contract for Responses API users.

Published via OpenAI API Changelog

Archive item produced with AI assistance from the cited source and published without individual review. Editor of record: Joe Werner.

Diagram showing Chat Completions API fork versus Responses API for GPT-6 Astra tool calls, with a hard block on the Chat Completions path

GPT-6 Astra shipped on September 3, 2026 and OpenAI's marketing copy is the easy part. What matters to operators is harder to find in the launch post: the model imposes a set of API-surface constraints that will break existing integrations silently or loudly depending on where in the stack you use tools.

Three things break in ways your routing layer might not catch automatically. One thing — the new misalignment monitoring — changes the latency contract even for integrations that don't break. And two new error codes (shipping a day later, Sep 2) mean your retry logic needs an update regardless of whether you ever touch Astra.

Tool calling no longer works through Chat Completions

The most consequential change: if you pass tools through v1/chat/completions against gpt-6-astra, it does not work. OpenAI's changelog is blunt — "Tool calling requires the Responses API." This is not a capability gap; it is a hard architectural decision.

The practical impact depends on how your stack is wired. If you use LiteLLM, LangChain, or any gateway that proxies tool calls through the Chat Completions path — which most do for OpenAI-compatible providers — those integrations fail against Astra. If you use OpenAI's own client and set model="gpt-6-astra" in a chat.completions.create call with a tools= argument, the call will fail.

The Responses API is already available and well-documented. The model field becomes model="gpt-6-astra", the tools array moves into the Responses API format, and messages becomes input. But every component in your chain that generates the request body needs to speak Responses API natively or you need an adapter sitting in front of Astra.

For operators with a chat completions passthrough (the "just forward to OpenAI" pattern), this requires model-specific routing: Astra must be handled differently from GPT-5.x and GPT-4.x. If your routing layer selects Astra dynamically or as a fallback, you need either a Responses API adapter or explicit exclusion from tool-call routes until one is in place.

Parameter lockdown: temperature, top_p, and logprobs are gone

GPT-6 Astra does not accept custom temperature or top_p values, and log probabilities (logprobs) are not available.

For many operators this will be a silent behavior change rather than an error: if you send temperature=0.2 to Astra through a path that doesn't validate the parameter, it may simply be ignored. If your application logic relies on temperature for determinism or diversity — seeding reproducible runs, mixing creative versus factual outputs — that control is gone.

Practically, if your routing layer injects temperature or top_p from a default config, add gpt-6-astra to the exception list for those injections. If you expose temperature as a user-configurable field and that field reaches the model, you need either a per-model override system or a UI-level guard. The model will not error loudly, which makes it easy to miss in testing.

logprobs disappearing is a sharper break for any team doing confidence estimation, output validation, or calibrated sampling from token distributions. There is no Responses API equivalent that returns raw log probabilities from Astra — this capability simply does not exist for this model.

The misalignment monitoring latency contract

Astra is the first OpenAI model with mandatory asynchronous misalignment monitoring. The system reviews model reasoning and actions for potential misalignment in consequential contexts and can stop a conversation if it flags an issue.

The async architecture means most calls are unaffected — monitoring runs in parallel and doesn't add to response latency in the normal case. But the stopping behavior matters: if monitoring triggers, it can interrupt an in-progress Responses API conversation, not just flag it. For requests using persisted reasoning, WebSockets, or OpenAI compaction, the system can block continuation.

Chat Completions requests are explicitly not covered by this monitoring. This is worth noting for operators evaluating whether to route sensitive or high-stakes workloads through the Responses API: the monitoring runs there, not on Chat Completions. For some organizations this is a compliance positive (automated safety oversight). For others it changes the SLA model — a stopped conversation is a failed transaction.

For gateway operators running long multi-turn Astra sessions, handling misalignment_monitoring webhook alerts is now part of the operational surface. OpenAI's docs describe webhook delivery for cases where the system can't auto-stop; that's a new category of out-of-band event your alerting needs to handle.

Async tool calling: what the router layer gains

The new async tool call mode (async: true on a function or custom tool definition) lets Astra continue reasoning and processing while your application executes a tool, returning the result when ready via the original call_id. The model doesn't wait.

This changes the request-response loop in a way that routing proxies need to understand. Normal tool calling is a synchronous hold: the model pauses, your app runs the tool, the model resumes. Async tool calling means the model continues producing output between the tool dispatch and the return — which means you get streamed output from Astra while your database query or API call is in flight.

For operators building agentic workflows with slow tool dependencies (search indexes, external APIs, database lookups), this is a genuine latency win: the model can reason about independent parts of the request while waiting for the slow tool rather than blocking. For gateway operators who buffer or transform streaming output, this requires understanding that tool call output and continued model output can now be interleaved in the stream.

Mid-turn steering (over WebSockets, via the Responses API) lets you inject corrections or updated instructions while Astra is working. Combined with per-request reasoning effort changes (configuration_update input items), these give operators more runtime control over long Astra tasks — but all of it lives in the Responses API, reinforcing that Chat Completions is not the path for Astra-powered workflows.

New error codes that affect all OpenAI models, not just Astra

Sep 2, one day before Astra launched, OpenAI split 429 overload errors into two categories. This applies to all models:

  • 429 with slow_down code: your traffic is increasing too quickly. Back off and ramp more gradually.
  • 503 with server_is_overloaded code: the model is temporarily overloaded. Retry after a wait.

Both may include a Retry-After header. When present, honor it; when absent, use exponential backoff. Previously both conditions came back as undifferentiated 429 — your retry logic probably already treats them the same way. Now you can distinguish "slow your ramp" from "wait and retry" and act differently: aggressive rate limiting on the ingress side for slow_down, normal exponential backoff for server_is_overloaded.

For operators managing multiple tenants or burst traffic patterns (load spikes, batch runs), the slow_down signal is operationally useful. It tells you the throttle is on the traffic shape, not the model capacity — which means spreading the same load over a longer window may clear it, rather than waiting for server capacity.

What the Responses API migration looks like in practice

For a request that previously used Chat Completions with tools:

# Before — Chat Completions (does not work for gpt-6-astra with tools)
response = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[{"role": "user", "content": "Search for recent news on X"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "web_search",
            "description": "Search the web",
            "parameters": {...}
        }
    }],
    temperature=0.2  # also dropped — ignored or errors
)
# After — Responses API (required for gpt-6-astra tool use)
response = client.responses.create(
    model="gpt-6-astra",
    input="Search for recent news on X",
    tools=[{
        "type": "function",
        "name": "web_search",
        "description": "Search the web",
        "parameters": {...}
    }]
    # No temperature — parameter is not accepted
)

The structural differences: messages becomes input (or a list of input items), chat.completions.create becomes responses.create, and tool definitions migrate to the Responses API format. The call_id returned in a tool call is what you pass back when submitting the tool result.

For multi-turn conversations, the Responses API uses store: true and previous response IDs rather than message history. This is a meaningful architectural difference — conversation state is server-side rather than client-managed.

OpenAI's Codex coding agent can apply the migration automatically from the OpenAI docs skill: $openai-docs migrate this project to GPT-6 Astra. For teams on third-party gateways or LiteLLM, check whether your provider's Responses API adapter is production-ready before routing Astra traffic with tools.

Reasoning effort tiers to know

Astra supports low, medium, high, xhigh, and max reasoning effort levels. The none level is explicitly not supported. If your routing layer passes reasoning_effort: "none" to bypass thinking for latency — a pattern some teams use for simpler sub-tasks — that will fail on Astra. Route none-effort requests to a GPT-5.x model or adjust the default.

For requests where you increase reasoning mid-conversation (for a harder sub-task) and then reduce it (for a follow-up), configuration_update input items handle this without invalidating the cached prompt prefix — a meaningful cost control for long Astra sessions.

Help & contact