feat(models): add GPT-5.6 (Sol/Terra/Luna) and Claude Fable 5 to engine dropdowns#1496
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
nhopeatall
approved these changes
Jul 16, 2026
nhopeatall
left a comment
Collaborator
There was a problem hiding this comment.
Summary
APPROVE — clean, purely-additive model-catalog change that faithfully implements the confirmed research plan in MNG-1751 and mirrors the 5-file precedent from PR #1199. Verified against the work item's ground-truth pricing/ID tables, not just the PR description.
Verification performed
- Pricing values match the work item exactly —
openai:gpt-5.6-sol(5/0.5/30),-terra(2.5/0.25/15),-luna(1/0.1/6),anthropic:claude-fable-5(10/1/50 = 2× Opus 4.8). All four rows agree with the confirmed research table. - No silent zero-cost trap — confirmed
toPricingKey('claude-fable-5')→anthropic:claude-fable-5(the/-\d{8}$/strip is a no-op since there's no trailing date), so the Claude cost key resolves. Codex side is additionally CI-guarded byllmMetrics-codex.test.ts, which now iterates 9 models. - Resolver pass-through is correct —
resolveCodexModelaccepts the 3 new IDs bare andopenai:-prefixed (they're inCODEX_MODEL_IDS);resolveClaudeModelpassesclaude-fable-5through via theCLAUDE_CODE_MODEL_IDS/claude-paths. - Rate-limit key shape —
anthropic:claude-fable-5matches the exact-match lookup ingetRateLimitForModel; consistent with existing Anthropic rows. - No collateral breakage —
catalog.tsderives options directly from the arrays and itsdefaultValueLabelstrings are correctly left untouched (defaults unchanged).catalog.test.tsassertsoptions.length > 0, not an exact count, so additive entries are safe. - Decisions honored — no
-codexGPT-5.6 variant, no redundantclaude-fable-5[1m](pinned bynot.toContain), no invitation-onlyclaude-mythos-5, defaults unchanged. - Tests green locally —
claude-code.test.ts+codex.test.ts(172),llmMetrics(-codex)+rateLimits(33). CI 7/7 passing.
No blocking or should-fix issues found.
🕵️ claude-code · claude-opus-4-8 · run details
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Purely additive model-catalog change: adds the most recent SOTA models from OpenAI and Anthropic to the engine dropdowns. No default changes, no DB/schema/frontend edits.
gpt-5.6-sol/gpt-5.6-terra/gpt-5.6-luna) → Codex engine dropdown.claude-fable-5) → Claude Code engine dropdown.Mirrors the 5-file precedent from PR #1199 ("add Opus 4.7, GPT-5.5, and 1M context variants").
Issue: https://linear.app/issue/MNG-1751
(Linear: https://linear.app/mongrel/issue/MNG-1751/lets-research-and-add-most-recent-sota-models-from-openai-and)
Changes
src/backends/codex/models.tsgpt-5.6-sol/gpt-5.6-terra/gpt-5.6-lunatoCODEX_MODELS(6 → 9 entries).CODEX_MODEL_IDSderives automatically.src/backends/claude-code/models.tsclaude-fable-5toCLAUDE_CODE_MODELS(10 → 11 entries).src/utils/llmMetrics.tsopenai:gpt-5.6-*pricing rows (CI-enforced byllmMetrics-codex.test.ts+ required byresolveCodexModel) and theanthropic:claude-fable-5row.src/config/rateLimits.tsanthropic:claude-fable-5rate-limit profile mirroring the Opus tier-1 throttle.tests/unit/backends/claude-code.test.tsCLAUDE_CODE_MODELSlength 10 → 11; add Fable 5toContain+resolveClaudeModelpass-through assertions.tests/unit/backends/codex.test.tsresolveCodexModelpass-through assertions for the GPT-5.6 tiers (bare +openai:-prefixed).Pricing (confirmed against official sources, per the researched plan)
OpenAI GPT-5.6 (per-1M USD):
gpt-5.6-solgpt-5.6-terragpt-5.6-lunaAnthropic Claude Fable 5 (per-1M USD): input 10.00 / cached 1.00 / output 50.00 (2× Opus). The pricing key
anthropic:claude-fable-5equalstoPricingKey('claude-fable-5')(no trailing 8-digit date to strip), so cost is not silently zero.Design decisions
-codex/-minivariant is added.claude-fable-5[1m]variant — Fable 5 is 1M-context by default (max = default), so a[1m]suffix would be redundant (unlike Opus/Sonnet). A test pinsnot.toContain('claude-fable-5[1m]').claude-mythos-5— Project Glasswing invitation-only; not selectable by most orgs.DEFAULT_CODEX_MODEL = 'gpt-5.4',DEFAULT_CLAUDE_CODE_MODEL = 'claude-sonnet-4-5-20250929'— keeps the change additive and avoidscatalog.tsdefaultValueLabeledits.{ enabled: false }).CUSTOM_MODELS(OpenRouter/llmist) and the frontend (dropdowns are served at runtime viatrpc.agentConfigs.engines→getEngineCatalog()).Operator note (Fable 5 deployment)
Fable 5 requires ≥30-day data retention — a project on a zero-data-retention (ZDR) org will get
400 invalid_request_erroron every request. Its safety classifiers can also refuse (stop_reason: "refusal"). These are operator/config concerns, not code bugs; the additive change leaves defaults unchanged.Testing
npx vitest run --project unit-backends tests/unit/backends/claude-code.test.ts tests/unit/backends/codex.test.ts tests/unit/backends/codex-cost.test.ts→ 181 passednpx vitest run --project unit-core tests/unit/utils/llmMetrics-codex.test.ts tests/unit/utils/llmMetrics.test.ts tests/unit/config/customModels.test.ts→ 46 passed (the pricing-coverage loop now iterates 9 Codex models, covering the 3 new tiers)npm run typecheck→ cleanbiome checkon changed files → clean🤖 Generated with Claude Code
🕵️ claude-code · claude-opus-4-8 · run details