Skip to content

feat: GPT-6 Sol and GPT-6 Luna - catalog rows, family prompt preset, recommended default - #2024

Merged
code-yeongyu merged 4 commits into
mainfrom
feat/gpt-6-family
Sep 23, 2026
Merged

code-yeongyu merged 4 commits into
mainfrom
feat/gpt-6-family

Conversation

@code-yeongyu

@code-yeongyu code-yeongyu commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

Fixes #2023

Summary

OpenAI's GPT-6 family is Astra, Sol and Luna; 2026.9.22-4 supported Astra only. This PR brings Sol and Luna to the same level on four surfaces, each with a failing-first test:

  • Catalog (packages/ai): gpt-6-sol and gpt-6-luna rows on openai and chatgpt-subscription (hand-added; models.dev never carries the Codex backend), plus regenerated passthrough rows on Azure, OpenCode, OpenRouter, Venice and Vercel, and -fast Priority variants on the two first-party providers. Published prices with the >272k tiers, 128k output, text + image, tool search / additional tools, and the documented ladder none/low/medium/high/xhigh/max (minimal: null; unlike Astra, off stays selectable). Prompt budgets stamped family-wide: Luna 922k (the documented input cap), Sol 400k, Astra 600k unchanged.
  • Effort inference (packages/ai/src/models.ts): map-less custom rows for both ids surface xhigh and max.
  • Prompt preset (packages/coding-agent): every Sol/Luna id shape resolves to the GPT-6 preset (OpenAI ships one prompting guide for the family; the rendered core names no model). The preset keeps its gpt-6-astra name so existing settings.json pins keep working.
  • Defaults: gpt-6-sol:medium joins the recommendation ladder directly under Astra and becomes the implicit default for openai / chatgpt-subscription; the high-reasoning warning covers Sol at xhigh/max (Luna excluded).

Which rows came from regeneration vs. by hand

Regeneration (generate-models --strict against live models.dev): azure-openai-responses, opencode, openrouter (the eight rows 22-4 already shipped, now with the ladder + Sol budget), venice, vercel-ai-gateway. Hand-added in generate-models.ts: the openai fallback rows and the chatgpt-subscription rows. Incidental upstream drift carried by the regeneration: opencode gains claude-opus-5-5 and grok-4.7, OpenRouter price/context refreshes on unrelated ids, Vercel gemini metadata. No model id was removed (per-file id delta audited).

Changelog

  • packages/ai/CHANGELOG.md: Added (first-party rows) + Fixed (OpenRouter rows shipped in 22-4 without any effort ladder).
  • packages/coding-agent/CHANGELOG.md: Breaking (recommended/default OpenAI model moves to GPT-6 Sol) + Added (family preset, warning coverage).
  • changes.md trackers: packages/ai/changes.md, packages/ai/src/changes.md, packages/coding-agent/src/core/changes.md, prompt-preset/changes.md. node scripts/check-pr-changelog.mjs --base origin/main → PASS.

RED → GREEN evidence

Criterion Test RED GREEN
Catalog rows, pricing tiers, ladder, -fast, family budget packages/ai/test/gpt-6-family-catalog.test.ts 27 failed / 1 passed (ids absent) 105 passed with the neighbouring Astra/fast/input-cap suites
Map-less xhigh/max inference same file, map-less block part of the 27 green
Preset resolution test/suite/prompt-presets-gpt-6-family.test.ts 19 failed (undefined preset) 156 passed with Astra/#1891/#1968/eval-routing suites
Recommended ladder, provider default, warning recommended-models-extension, model-resolver, high-reasoning-warning tests 8 failed 189 passed

openai-input-cap-catalog.test.ts exempts exactly the gpt-6-sol @ 400,000 pairing (a deliberate budget equal to the 400k-tier total); a 1,050,000 Sol row still fails it.

Real-CLI QA (senpi-qa channel 3)

bun .agents/skills/senpi-qa/scripts/gpt-6-family-preset-mock-loop.mjs → 24/24. The real CLI in --print mode against a fake Responses server sent model: gpt-6-sol with reasoning.effort: medium and model: gpt-6-luna with reasoning.effort: none (the off level Astra cannot take), and both developer messages carry the GPT-6 sections (## Asynchronous Work, ## Instructions From Files), none of the GPT-5.6 ones, and no "Astra" token. Evidence under local-ignore/qa-evidence/20260923-gpt-6-family-preset-mock-loop/ (gitignored). Sandboxes and the fake server are torn down in-script; zero leftover dirs/processes after the run.

Gates

  • bunx biome check --error-on-warnings . → 0 errors
  • root bunx tsgo --noEmit → exit 0 (run from the canonical checkout path)
  • bun run --cwd packages/ai check:model-data → valid
  • test/suite/anthropic-subscription-naming.test.ts → 3 passed (no legacy provider literals introduced)

Not in this PR

  • No live inference against gpt-6-sol / gpt-6-luna (the mock loop proves what the harness sends, not that a provider accepts it).
  • configuration_update (mid-conversation effort change) stays Astra-only, matching the Codex backend's wire constraint.
  • omo-side routing (deep-low, explore/librarian luna rungs) follows in the omo repository after this ships.

Summary by cubic

Adds GPT-6 Sol and GPT-6 Luna across the model catalog, effort inference, prompt preset, and defaults, so the whole GPT-6 family is supported rather than Astra alone. gpt-6-sol:medium becomes the recommended and implicit default for the openai and chatgpt-subscription providers; explicitly configured settings are untouched.

Catalog and effort inference

  • New gpt-6-sol and gpt-6-luna rows on OpenAI, ChatGPT Subscription, Azure, OpenCode, OpenRouter, Venice, and Vercel, with -fast Priority variants on the two first-party providers.
  • Rows carry the published prices with >272k tiers, 128k output, the full none/low/medium/high/xhigh/max effort ladder, and family prompt budgets (Astra 600k unchanged, Sol 400k, Luna 922k).
  • Fixes OpenRouter rows that shipped in 22-4 with no effort ladder at all.
  • Map-less custom rows for both ids now surface xhigh and max.

Prompt preset and defaults

  • All gpt-6-sol / gpt-6-luna ids resolve to the GPT-6 family prompt preset, which keeps its gpt-6-astra name so existing settings pins keep working.
  • The high-reasoning warning now covers GPT-6 Sol at xhigh / max; Luna is not covered.

The regeneration also carries incidental upstream drift (opencode gains claude-opus-5-5 and grok-4.7, plus OpenRouter and Vercel refresh), with no model ids removed.

Written for commit c0e27cd. Summary will update on new commits.

Review in cubic

Strict regeneration against live sources lands gpt-6-sol and gpt-6-luna on
openai, chatgpt-subscription (hand-added: models.dev never carries the Codex
backend), azure-openai-responses, opencode, openrouter, venice and
vercel-ai-gateway, with -fast Priority variants on the two first-party
providers. Published prices (Sol 2/10 with 0.2 cache reads and 2.5 writes,
Luna 0.1/0.5 with 0.01 / 0.125) carry the >272k tiers; 128k output; text +
image; tool search + additional tools; the documented ladder none/low/medium/
high/xhigh/max (minimal: null; off stays selectable, unlike Astra).

The Astra-only final pass becomes a GPT-6 family pass: the tier prompt budget
is stamped on every provider row (Astra 600k unchanged, Sol 400k, Luna the
full 922k input cap) and the ladder is stamped once, so the eight OpenRouter
passthrough rows that 2026.9.22-4 shipped without any effort map now expose
xhigh and max. models.ts XHIGH_MODEL_IDS / OPENAI_MAX_MODEL_IDS gain both ids
for map-less custom rows.

The input-cap invariant test exempts exactly gpt-6-sol @ 400,000 (a
deliberate budget that equals the 400k-tier total); a 1,050,000 Sol row
still fails it. Carries incidental upstream drift: opencode adds
claude-opus-5-5 and grok-4.7, OpenRouter pricing/context refreshes, Vercel
gemini metadata. No model id removed.
OpenAI documents one set of prompting practices for GPT-6 Astra, Sol and
Luna, and the rendered Astra core names no model, so the matcher widens from
gpt-6-astra to gpt-6-(astra|sol|luna) with the same delimiter-boundary shape
(prefixed, suffixed, dated and Bedrock-style ids plus the display names).
The preset keeps the "gpt-6-astra" name that settings.json already pins;
bare gpt-6 / gpt-6-mini / near-miss words stay unmatched. The apply_patch
gate already accepted the whole family, so preset and tool capability now
agree on every GPT-6 id (#1891 class).
…nAI default

GPT-6 Sol joins RECOMMENDED_DEFAULT_MODELS directly under GPT-6 Astra and
ahead of GPT-5.6 Sol, and defaultModelPerProvider.openai /
chatgpt-subscription move from gpt-5.6-sol to gpt-6-sol, so an implicit
OpenAI default lands on the GPT-6 tier. The high-reasoning warning adds the
gpt-6-sol marker (warns at xhigh and max like GPT-5.6 Sol; Astra keeps its
max-only rule; Luna is not matched). The ulw-loop ethos tip names the new
default. Explicit defaultModel / recommendedModels settings are untouched.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GPT-6 Sol and GPT-6 Luna: catalog rows, family prompt preset, and default-model support

1 participant