fix(models): bring first-party model rows and pricing current as of 2026-08-17 - #5485
Conversation
…026-08-17 Catalog currency sweep against official provider pages (all re-verified 2026-08-17): - OpenAI gpt-5.6-terra 0.20/2.00/12.00 and gpt-5.6-luna 0.02/0.20/1.20 (cache-read/input/output per 1M) replace the retired launch cards. - Anthropic claude-sonnet-5 stays 2.00/10.00 (cache 0.20 / write 2.50): the scheduled 2026-09-01 increase to 3/15 was cancelled upstream, so the time-windowed flip is gone; claude-opus-5 (GA 2026-07-24, 5.00/25.00, 0.50/6.25, 1M/128K) is added to models.rs, the registry, the pricing table, both bundled catalogs and the agent model list. - Moonshot kimi-k3 0.30/3.00/15.00 and kimi-k2.7-code-highspeed 0.38/1.90/8.00 get first-party rows (membership `k3` stays unpriced). - MiniMax-M2.7-highspeed 0.06/0.60/2.40 (write 0.375). - xAI grok-4.5 (0.30/2.00/6.00) and grok-4.3 (0.20/1.25/2.50) join grok-4.6 on the usage-aware 2x-above-200K tier; bundled xai rows carry limits only (same honesty rule as grok-4.6). - Mistral medium/large/small/code first-party rows (cache-write unpublished, kept unpriced). - Google Gemini API context/max-output (1,048,576 / 65,536) for the seeded ids plus gemini-3.7-flash; OpenRouter dots-studio/dots-3-note-preview:free limits (512K) as the only hosted RedNote/Dots route. Tests pin every number (DeepSeek V4 tier-test style, #5470); the Sonnet 5 dispatch-boundary aggregation test now rides the DeepSeek off-peak/peak boundary since Sonnet 5 no longer has one. No-Issue: model catalog currency sweep for v0.9.9/v0.9.10
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @Hmbown's task in 2m 54s —— View job Review complete
This is a well-scoped, well-sourced catalog sweep — every pricing row carries a dated source comment, and the "skipped" list in the PR body shows real judgment about what's safely out of scope. One correctness bug found; everything else checked out. Bug: new test will fail —
|
Summary
Model catalog currency sweep. Every value below was re-verified against the official page on 2026-08-17 (curl of the model/pricing pages; xAI tier values come from the embedded price tables on docs.x.ai model pages, whose
LongContextcolumns are exactly 2x standard). Follows the DeepSeek V4 tier-test style from #5470: each pricing row carries a dated source comment and tests pinning the exact numbers.Changes
gpt-5.6-terragpt-5.6-lunaclaude-sonnet-5claude_sonnet_5_pricingclaude-sonnet-5claude-opus-5usd_pricing_with_write(0.50, 5.00, 25.00, 6.25)+ Anthropic allowlist, models_dev seed, TUI seed, agentModelInfo(aliasopus-5)kimi-k3(direct Moonshot)k3stays unpriced; Fireworks-hosted K3 still unpriced)kimi-k2.7-code-highspeed0.38 / 1.90 / 8.00+ allowlist, models_dev seed rowMiniMax-M2.7-highspeedusd_pricing_with_write(0.06, 0.60, 2.40, 0.375)+ Minimax/MinimaxAnthropic allowlist; models_dev seed rows inminimaxandminimax-anthropicgrok-4.5grok_tiered_pricing, 2x at ≥200K like grok-4.6) + Xai allowlist + audit path; models_dev seedlimit.context500000, modalities text+imagegrok-4.3mistral-medium-latest(+-3-5,-3.5,-2604),mistral-large-latest(+-2512),mistral-small-latest(+-2603),mistral-code-latest(+codestral-latest,codestral)ApiProvider::MistralallowlistUnpublished)gemini-3.7-flash,gemini-3.6-flash,gemini-3.5-flash,gemini-3.5-flash-lite,gemini-3.1-pro-preview,gemini-3-pro-preview,gemini-2.5-pro,gemini-2.5-flashgemini-3.7-flash/modelpicker (Google), agentModelInfo, docs/PROVIDERS.md google rowsdots-studio/dots-3-note-preview:free(OpenRouter)openrouterseed row (limits only, no price)_metacurrency_sweep_2026_08_17note; coverage count 81 → 89 model rows (baseline was already 83)Test changes:
sonnet_5_*tests now pin the permanent 2/10 rate and assert the 3/15 flip never resurfaces;scorecard::anthropic_sonnet_5_uses_the_recorded_turn_timeprices both sides of the former boundary at 6.60;runtime_threads::aggregate_usage_prices_slow_predispatch_turn_at_dispatch_boundarynow rides the DeepSeek V4 Flash off-peak→peak boundary (0.22 + 0.44) because Sonnet 5 no longer has a rate boundary; new tests for terra/luna, Opus 5, kimi-k3 vsk3, K2.7 high-speed (exactly 2x), M2.7 high-speed, grok-4.5/4.3 tiers (metadata + direct-route audit + no aggregator leak), Mistral rows, Gemini limits, K2.7 high-speed limits.Skipped (and why)
deepseek-v4-pro/deepseek-v4-flashpeak/off-peak USD+CNY tiers, the 01–04 / 06–10 UTC window, the/anthropicroute, alias retirement and 1M/384K limits all match https://api-docs.deepseek.com/quick_start/pricing/ ; no other first-party DeepSeek flat rows exist inpricing.rs(Fireworks/OpenCode Zen hosted rows are provider-owned and out of scope).dots-studio/dots3-note-prevon Hugging Face and one free OpenRouter endpoint), so a newProviderKindis out of scope for a hot fix. Added only the OpenRouter row (rule 4). Plan if a first-party API appears: (1)crates/config/src/provider_kind.rsnewProviderKind::Rednote+ aliases (rednote,xiaohongshu,dots-studio) andprovider_defaults.rsDEFAULT_REDNOTE_MODEL/DEFAULT_REDNOTE_BASE_URL; (2)crates/tui/src/config.rsApiProvider::Rednote(env keys, base URL,model_completion_names_for_provider,canonical_model_id_for_providerpassthrough) andcrates/config/src/provider.rsregistry entry with docs URL; (3)crates/tui/src/model_registry.rsseed +models.rslimits (512K ctx / 512K out, reasoning on) +pricing.rsrow + allowlist once a price is published; (4)crates/config/assets/models_dev.bundled.jsonprovider block with adefault: truerow equal toDEFAULT_REDNOTE_MODEL; (5)docs/PROVIDERS.md(three tables) +docs/PROVIDERS.id.md, README/locale restamp (18 locales) andscripts/check-provider-registry.pyexpectations; (6)crates/agent/src/lib.rsModelInfoentries; (7)docs/public-surface-facts.json+web/lib/facts.generated.tsregeneration. Self-hosting of the open weights already works through the existingvllm/sglangpass-through.gemini-3.7-flash$0.75/$3.75 through 2026-12-31 then $1.50/$7.50;gemini-3.1-pro-preview$2/$12 with a >200K tier): needs a time-windowed row plusApiProvider::Googleinprovider_owned_hand_pricing_atand a bundledgoogleblock; deferred so the promo end date and the long-context tier get their own tests. Limits landed now.default: truerow equal toDEFAULT_MISTRAL_MODEL(mistral-code-latest), which upstream Models.dev does not list (it listscodestral-latest); hand-priced rows inpricing.rscover the offline case instead.XIAOMI_PAYG_BILLING_SURFACE):pricing_for_billing_surfaceonly prices StepFun and the route audit forApiProvider::XiaomiMimonever consults it; wiring a surface-gated Xiaomi branch (Token Plan must stay unknown) is a route-audit change with its own tests, not a catalog edit.step-3.5-flashpublishes CNY-only rates (¥0.7 / ¥0.14 / ¥2.1) andModelPricingrequires a USD row; nostepfunblock exists in the seed (needs adefault: truerow and PAYG-vs-Step-Plan honesty text);step-3.7-flashsupports_reasoning: falsein the TUI seed vs the StepFun overview'sreasoning_effortlow/medium/high is a client-behavior change, not a catalog value.qwen3.7-max(token-plan output 131072) /qwen3.7-plus(coding-plan output 64000): the seed mirrors upstream Models.dev exactly (alibaba-token-plan131072,alibaba-coding-plan64000 as of 2026-08-17) and live refresh supersedes the seed on(provider, wire_model_id), so a hand edit would be overwritten; the fix belongs upstream at models.dev (Alibaba page says 65,536;models.rsalready says 65,536).grok-build(512K) /grok-composer-2.5-fast/grok-4.20-0309-*ids: docs.x.ai listsgrok-build-0.1(256K, $1.00/$0.20/$2.00) withgrok-build-latestaliasing grok-4.5; the baregrok-buildid and 512K are unverified. Renaming a shipped id (XAI_GROK_BUILD_MODEL) is a roster/product change, not a value fix — flagged for follow-up. Notegrok-4.20-0309-reasoning/-non-reasoningdo appear in the xAI page's embedded price table (1.25 / 0.20 / 2.50, 2x long-context) but were not priced here to keep this PR to audited rows.gemini-3-pro-preview: the Gemini API model page states it was shut down 2026-03-09 (migrate to 3.1 Pro Preview); it remainsDEFAULT_ANTIGRAVITY_MODELon a different route and stays seeded/listed here — a default change is a product choice.gpt-5.5-codexacceptance (models.rsis_openai_gpt_55_api_model): low priority, negative tests already cover the other ids.claude-opus-5(Anthropic picker is a one-per-tier list) andkimi-k2.7-code-highspeed/MOONSHOT_DIRECT_PLATFORM_MODELS: facts landed; picker rosters left as product choices (the catalog-backed facade already surfaces the new bundled rows).Intended CHANGELOG line (for the release branch/addendum):
- fix(models): bring first-party model rows and pricing current as of 2026-08-17 — GPT-5.6 Terra/Luna repriced, Claude Sonnet 5 $2/$10 made permanent, Claude Opus 5 / Kimi K2.7 Code high-speed / Gemini 3.7 Flash added, Kimi K3, MiniMax-M2.7-highspeed, Grok 4.5/4.3 (2x above 200K) and Mistral first-party rates priced, Gemini token limits recorded (#PR)No-Issue: model catalog currency sweep for v0.9.9/v0.9.10
Testing
cargo fmt --all -- --check(clean)python3 scripts/catalog_models_dev.py snapshot --check crates/config/assets/models_dev.bundled.json→ok … providers=20 canonical_models=2 provider_offerings=89python3 scripts/catalog_models_dev_test.py(8 tests OK)python3 scripts/check-provider-registry.py(passed)cargo clippy --workspace --all-targets --all-features --locked— not run in the authoring environment (no cargo builds allowed there); CI must run itcargo test --workspace --all-features --locked— not run in the authoring environment; CI must run it. Tests touched:crates/tui/src/pricing.rs,crates/tui/src/models.rs,crates/tui/src/model_registry.rs,crates/tui/src/scorecard.rs,crates/tui/src/runtime_threads/tests.rsChecklist