feat: add GPT-6 Astra to the known models catalog, price book, and chatd - #28955
Conversation
OpenAI released gpt-6-astra on 2026-09-03 and models.dev does not list it yet, so overrides.jq injects the model from OpenAI's published model page and pricing table (guarded to fail once upstream lists it), curation.json suggests it ahead of gpt-5.6-sol, and make gen/aibridge-prices regenerates prices.json and knownModelsGenerated.json.
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4388a300be
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…mp its efforts The pinned fantasy SDK decides the OpenAI wire format from a static known-model list plus gpt-4/gpt-5 substring checks, so gpt-6-astra fell back to Chat Completions, where Astra does not support function calling. chatopenai.UsesResponsesAPI now owns the unset-override decision for both the client and TransportFor and defaults Astra to Responses. Astra also rejects the none effort (HTTP 400) and lists no minimal, so applyReasoningEffort clamps both to low for it.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 23ae68a08d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…truction Snapshot the Responses decision instead of dereferencing the config override inside the SDK callback, so the client cannot drift from the transport NewModel records.
|
@codex review |
|
Codex Review: Didn't find any major issues. Chef's kiss. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
|
||
| During generation preparation, the effective effort is resolved as the chat's `last_reasoning_effort` if set, else the config's `default`; clamped to the config's `max` on the global scale `none < minimal < low < medium < high < xhigh < max`; and passed through to the provider. The provider verifies whether the configured value is valid for that model at runtime. If the model config has no `reasoning_effort`, any user-selected value is ignored. The resolved value is injected into the provider-native options by `chatprovider.ProviderOptionsForCall`, which converts the model config and applies the effort in one step. For Anthropic, the fantasy provider converts effort into enabled budget thinking on models older than Claude 4.6, which reject adaptive thinking. | ||
|
|
||
| TODO: document that `applyReasoningEffort` clamps `none` and `minimal` to `low` for GPT-6 Astra (`chatopenai.IsGPT6Astra`), which rejects `none` with HTTP 400 and lists no `minimal` effort. |
There was a problem hiding this comment.
Remove changes to that file.
Add GPT-6 Astra to the Agents-page known models list so it appears as a suggestion when an admin adds an OpenAI chat model in
/agentssettings, pick up its pricing in the AI Bridge price book, and teach chatd the two Astra facts the pinned provider SDK does not know: it speaks the Responses API and it rejects thenonereasoning effort.OpenAI released
gpt-6-astratoday (2026-09-03). models.dev does not list it yet, sooverrides.jqinjects the model from OpenAI's published model page and pricing table, guarded to fail the pipeline once upstream lists it so the injection gets dropped instead of shadowing upstream data.curation.jsonsuggests it first underopenai(ahead ofgpt-5.6-sol, which it supersedes), andmake gen/aibridge-pricesregenerated both outputs. The chatd change (second and third commits) came out of Codex review.fantasyopenai.IsResponsesModelmatches a static list plusgpt-4/gpt-5substrings, sogpt-6-astraresolved to Chat Completions, where Astra does not support function calling.chatopenai.UsesResponsesAPInow owns the unset-override decision for both the client (WithResponsesAPIFunc) andTransportFor, defaulting Astra to Responses;openai_config.use_responses_apistill wins when set.applyReasoningEffortclampsnoneandminimaltolowfor Astra (OpenAI's migration guidance), since the picker offers every level up to the configured max and the model config has no minimum. Both are red-green tested;ARCHITECTURE.mdcarries TODO markers in the two affected sections per the chatd rule.Values
gpt-6-astra(the only published snapshot/alias; there is nogpt-6alias)GPT-6 Astralimit.context); 922,000 max input tokens (limit.input)cost.tiers, informational; the generator emits flat prices only)low,medium,high,xhigh,max;nonereturns HTTP 400reasoningEffortmediumgpt-5.6-sol; OpenAI publishes no default effort for Astratemperature,top_p,logprobs(temperature: falsein the injected record)Known gap, unchanged by this PR: the price book is a flat per-model row, so Astra's >272K tier (like Sol's, 5.5's, 5.4's, and Gemini's upstream tiers) is not applied by
aibridgedserver/cost.go; the tier is recorded in the injectedcost.tiersfor when tier-aware accounting lands, and the dogfood default entry caps context at 272,000.Not published by OpenAI and therefore not set: a default reasoning effort for Astra, and any Azure, Bedrock, OpenRouter, or Vercel listing. The change is openai-only; the extra provider rows that exist for
gpt-5.6-solcome from models.dev and will follow for Astra once upstream lists them. Batch/Flex (50%) and Fast mode (2x) pricing is documented on the pricing page but the price book carries Standard rates only, as for every other model.scripts/aibridgepricesgen/overrides.jqgpt-6-astrainjection underopenaiscripts/aibridgepricesgen/curation.jsongpt-6-astrafirst underopenaiwithreasoningEffort: mediumknownModelsGenerated.jsongpt-6-astraentry (1,050,000 context, 128,000 max output, $10 / $50 / $1 cache read / $12.5 cache write per 1M tokens);openrouter/deepseek/deepseek-v4-flash,openrouter/deepseek/deepseek-v4-pro, andvercel/zai/glm-5.3repriced upstreamcoderd/x/chatd/chatopenai/transport.go,chatprovider/chatprovider.goUsesResponsesAPI+IsGPT6Astra; the OpenAI client always gets aWithResponsesAPIFuncreturning the decisionModelFromConfigresolves once through the same helper asTransportForcoderd/x/chatd/chatprovider/reasoningeffort.goopenAIReasoningEffortclampsnone/minimaltolowfor Astracoderd/x/chatd/ARCHITECTURE.mdcoderd/aibridge/prices/data/prices.jsonopenai/gpt-6-astra; upstream drift since the last refresh: newopenrouter/inclusionai/ling-3.0-flash-finandvercel/zai/glm-5.3-fast, and 13 repriced rows (openrouter deepseek-chat, deepseek-chat-v3.1, deepseek-v4-flash, deepseek-v4-flash-vision-exp, deepseek-v4-pro, deepseek-v4-pro-0813, qwen2.5-vl-72b-instruct, qwen3.8-27b, tencent/hy3, ~moonshotai/kimi-latest, ~z-ai/glm-flash-latest, ~z-ai/glm-latest; vercel zai/glm-5.3)Validation:
go test ./scripts/aibridgepricesgen/... ./coderd/aibridge/prices/... ./coderd/x/chatd/chatopenai/ ./coderd/x/chatd/chatprovider/plus the transport, Responses, and reasoning-effort tests in./coderd/x/chatd/,vitest runonknownModels/(52 tests),make lint/ts,golangci-linton the touched packages, andbiome checkon the changed JSON all pass.Companion dogfood PR enabling the model on dev.coder.com: https://github.com/coder/dogfood/pull/465