Skip to content

fix(codex): offer Ultrafast for GPT-6 Astra and GPT-6.1 Sol in the speed picker - #7050

Merged
lidge-jun merged 2 commits into
devfrom
fix/ultrafast-catalog
Oct 13, 2026
Merged

lidge-jun merged 2 commits into
devfrom
fix/ultrafast-catalog

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Summary

Users on X reported that Ultrafast never shows up in the Codex Desktop speed picker for gpt-6-astra or gpt-6.1-sol, even with opencodex's Ultra Fast switch (ultraFastTier) turned on. With this change, turning the switch on adds Ultrafast next to Fast for those two models.

Cause. Codex builds its speed menu from each model's service_tiers (codex-rs ModelPreset/ModelInfo; additional_speed_tiers is the deprecated string mirror). ChatGPT's live model list adds Ultrafast for eligible plans, but once model_catalog_json points at our generated catalog, Codex reads only that file. Our native rows carried only the bundled priority tier, and ultraFastTier only kept a tier an operator had hand-written on a routed row, so the native picker never offered Ultrafast. (Checked against upstream openai/codex 816fa702ec, 2026-10-13: bundled models.json lists only priority for both models, and Bedrock's catalog adds an ultrafast tier for exactly these two slugs.)

Change.

  • New src/codex/catalog/native-ultrafast.ts. When ultraFastTier is on, bare and trusted account-bound gpt-6-astra / gpt-6.1-sol rows get {"id":"ultrafast","name":"Ultrafast","description":"Lower latency, increased usage; requires an eligible plan"} appended to service_tiers, and "ultrafast" appended to additional_speed_tiers. Both go after the existing Fast tier, and only when no Ultrafast entry is already there.
  • It runs in the shared mergeCatalogEntriesFromObservedState pass, so retained sync, convergence, opencodex-catalog.json and models_cache.json all agree.
  • Each field the switch fills is recorded in an opencodex_generated_service_tiers marker on the row. Turning the switch off withdraws only marked fields, so an operator-written native Ultrafast entry survives even when its text matches the generated one.
  • Nothing else changes: other models, routed rows, aliases, combos, reserve projections, other fields, and default_service_tier.
  • The switch's dashboard copy (all 11 locales), the ultraFastTier doc comment, structure/catalog.md and the CLI reference now say it adds the native picker choice and requires an eligible plan.

Request path (verified, unchanged). On the canonical ChatGPT forward route, with fastMode unset, a selected service_tier: "ultrafast" is forwarded verbatim; the default service-tier wire uses foreignCallerTiers: "verbatim", and the canonical-forward strips keep service_tier. fastMode: true replaces any tier with priority, and fastMode: false strips the tier. So Ultrafast requests are not swallowed, but fastMode: true overrides them; the CLI reference now says to leave Fast mode unset to use Ultrafast.

Relation to #6927. @oocheol's draft #6927 projects a provider's declared ultrafast wire mapping onto routed rows. This PR covers the native OpenAI rows the reports are about, so the two are complementary and #6927 stays open on its own merits. Its OpenAI doc citations and its app-server evidence that Codex parses serviceTiers: [priority, ultrafast] from a generated row informed this fix, and the commit carries a Co-authored-by trailer for that.

Limitation: when catalog materialization fails and Codex falls back to the online GET /v1/models list, that path is not changed here.

Verification

Exact head 27801823 on origin/dev e05b8d3e7:

  • tests/codex-integration/native-ultrafast-picker.test.ts (new, 12 tests):
    • Merge-level projection: exact copy, Astra and 6.1 Sol only, ownership from the provenance marker (never from matching text), nothing else on any row moves, idempotent across repeated syncs, clean withdrawal, operator entries win.
    • Both real writers run in a subprocess with isolated CODEX_HOME/OPENCODEX_HOME. Each enables twice, then disables, and the test asserts opencodex-catalog.json and models_cache.json, with gpt-6-sol/gpt-6-luna left on Fast only.
    • The real handleResponses to the ChatGPT backend with stubbed fetch, covering fastMode absent/true/false.
    • Mutation check: disabling the one-line hook in build-entries.ts makes exactly the three catalog-projection tests fail.
  • Focused set of 15 files (catalog, gpt6/gpt61 rows, fast rows, fastwire policy and wire, service-tier capability, Lab boundary, settings parity, layout guards, structure SSOT): 865 pass, 0 fail on 27801823.
  • bun run test:changed on efda4991d (1,305 files): 29,454 pass, 10 fail. The failures are all in tests/service/service.test.ts, tests/service/service-sqlite-home.test.ts, tests/cli/cli-access-audio-live.test.ts and tests/cli/sibling-home-client-sync.test.ts. Rerun alone, those four files give the same result on this branch and on clean origin/dev: 284 pass, 1 fail (the existing 30 s Grok agent-bytes timeout). The other failures come from 4x parallel load on this host.
  • bun run typecheck, bun run structure:check, bun run privacy:scan, bun scripts/file-size-ratchet.ts, bun run lint:gui, bun run skill:surface:check, git diff --check origin/dev: pass.
  • Full bun run test was not run locally; the 1,305-file changed-graph run above covers the import-connected surface. Whole-suite and cross-platform coverage is left to hosted CI.
  • Not exercised: a live Desktop render or a live Ultrafast request (no Codex Desktop restart and no model requests by design).

GUI change: the Ultra Fast card's description (rendered from this branch against an isolated proxy):

Ultra Fast setting

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults. The switch stays off by default; no credential, auth or dependency changes.

Co-authored-by: 정우철 oocheol@naver.com

Summary by CodeRabbit

  • New Features
    • Enabling Ultra Fast adds an Ultrafast option to the Codex model picker for GPT-6 Astra and GPT-6.1 Sol, including account-bound entries. It also preserves configured Ultrafast tiers on routed models.
    • Ultrafast requires an eligible ChatGPT plan. When disabled, generated native Ultrafast options are removed on the next catalog update.
    • Fast mode continues to control request tiers: enabled selects Fast, disabled omits the tier, and unset preserves the configured tier.
  • Documentation
    • Updated setting guidance and translations to explain model availability, plan eligibility, and tier behavior.

…eed picker

With the Ultra Fast switch on, the generated model catalog now adds the
documented Ultrafast service tier to native gpt-6-astra and gpt-6.1-sol
rows (bare and account-bound), so Codex Desktop and the CLI offer it next
to Fast. Codex builds its speed menu from model_catalog_json, which
replaces ChatGPT's plan-aware live list, and our catalog only carried the
bundled priority tier. Disabling the switch withdraws the exact generated
descriptor and leaves operator-written entries alone.

Co-authored-by: 정우철 <oocheol@naver.com>
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner October 13, 2026 14:09
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-13T14:14:16.837753Z efda499 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: lidge-jun/opencodex/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: e996c372-c351-4807-82df-3e6663115bce
📥 Commits

Reviewing files that changed from the base of the PR and between e05b8d3 and 2780182.

📒 Files selected for processing (20)
  • docs-site/src/content/docs/reference/cli/agents.md
  • gui/src/components/UltraFastTierSetting.tsx
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/fr.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/pt.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/vi.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • scripts/test-layout/layout.json
  • src/codex/catalog/build-entries.ts
  • src/codex/catalog/native-ultrafast.ts
  • src/types/config.ts
  • structure/catalog.md
  • tests/codex-integration/native-ultrafast-picker.test.ts
  • tests/fixtures/test-layout-expected.json

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

📝 Walkthrough

The catalog merge now adds generated Ultrafast choices to supported native model rows when enabled. The setting descriptions and catalog documentation specify the behavior and plan eligibility. Integration tests cover catalog generation, preservation of operator-supplied tiers, and request-tier forwarding.

Changes: Native Ultra Fast picker tiers

Layer / File(s) Summary
Generate native Ultrafast catalog tiers
src/codex/catalog/native-ultrafast.ts, src/codex/catalog/build-entries.ts, src/types/config.ts, structure/catalog.md, docs-site/src/content/docs/reference/cli/agents.md, gui/src/components/UltraFastTierSetting.tsx, gui/src/i18n/*.ts
The catalog merge applies Ultrafast to eligible native GPT-6 Astra and GPT-6.1 Sol rows when enabled. Generated-field markers control removal when disabled, while existing operator-supplied entries remain unclaimed. The descriptions cover routed-model tier preservation, plan eligibility, and fastMode request behavior.
Validate catalog projection and writers
tests/codex-integration/native-ultrafast-picker.test.ts, scripts/test-layout/layout.json, tests/fixtures/test-layout-expected.json
Tests cover tier placement, idempotence, removal, operator-supplied entries, and output from retained-sync and convergence catalog writers. The test-layout files register the integration test.
Validate request tier forwarding
tests/codex-integration/native-ultrafast-picker.test.ts
Responses handler tests check that an unset fastMode forwards the caller’s tier, true sends priority, and false omits the tier.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 27801

The change adds an Ultrafast picker option for two native models when the setting is enabled, and it removes only the generated fields when the setting is disabled. No merge-blocking issue was identified.

Pre-merge checks · Passed 4 · Failed 1

Failed Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 16 files. (4 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks (4 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: adding Ultrafast to the speed picker for native GPT-6 Astra and GPT-6.1 Sol.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 16 files. (4 skipped: 4 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Deterministic PR hygiene checks passed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: efda4991d8

ℹ️ 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".

Comment thread src/codex/catalog/native-ultrafast.ts Outdated
…arker

Withdrawing the tier no longer infers ownership from matching text, so an
operator-written native Ultrafast entry identical to the generated one
survives turning the switch off. Addresses Codex review on #7050.
@github-actions github-actions Bot added the bug Something isn't working label Oct 13, 2026
@lidge-jun
lidge-jun merged commit f5f73ff into dev Oct 13, 2026
37 of 42 checks passed
@lidge-jun
lidge-jun deleted the fix/ultrafast-catalog branch October 13, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant