Skip to content

feat(codex): expose declared Ultra Fast in the desktop speed picker - #6927

Merged
lidge-jun merged 6 commits into
lidge-jun:devfrom
oocheol:codex/ultrafast-model-controls
Oct 13, 2026
Merged

lidge-jun merged 6 commits into
lidge-jun:devfrom
oocheol:codex/ultrafast-model-controls

Conversation

@oocheol

@oocheol oocheol commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • A provider can explicitly map ultrafast on its service-tier wire, but generated routed models still advertise only Fast. Project that existing declaration into Codex Desktop's native speed menu, so operators configure the provider once and choose Ultra Fast in the app without repeatedly editing the generated catalog.
  • Publish the choice only for an eligible captured service-tier policy mapping ultrafast to ultrafast. Apply it after model admission, keep the current speed default, and track generated tier ownership so removing the mapping also removes stale catalog/cache choices. The separate exact-row operator-retention preference keeps its existing purpose.
  • Cover both catalog writers, custom rows, repeated refreshes, revocation, capability opt-outs and frozen authority. Update the English/Korean app-model guide and the catalog contract.

The provider-wide mapping applies to every Fast-eligible model in that provider. Use a separate provider entry for a supported subset and leave proxy Fast mode on Auto so the app's selected tier reaches the provider.

OpenAI now documents Ultrafast for GPT-6 Astra and GPT-6.1 Sol in its API guide and Codex speed guide. API and Codex plan/workspace access differ; menu metadata is a configured transport declaration, not proof of account entitlement or measured speed. This change leaves native/account rows, combo aliases, provider presets and the pinned upstream snapshot under their existing capability contracts.

Verification

On 2026-10-13, rebased onto the latest upstream dev e6d7e561f566ab343fbf545a6fa3e1b63012f817 and pushed head f6fc95f707bfbd408f6620af12d138dca4b54bee. The branch contains that exact tip, with four PR commits and no commits behind it at publication; the upstream tip was checked again before pushing.

After publication, the final upstream refresh found one newer dev commit, d934632184d0596e09844ae5b65d97f72e3ee924 (#7029). The current PR is one commit behind that tip and remains within the recent-dev checklist limit; the execution receipts above are for the documented e6d7e561 base and f6fc95f7 head.

The rebase incorporates 45 newer dev commits. git range-diff 8eb1fc3de365b019f9bacdcaacc6b7d284bd8d48..004fef7bda2c406f669763c0e031319e394d259e e6d7e561f566ab343fbf545a6fa3e1b63012f817..3bc47b6ba38cb830e3a504027b71a6bb3218fe69 shows documentation conflict adjustments in the first two commits and an unchanged registration commit. Both conflicts came from the old dashboard proposal's quota paragraph; the resolutions preserve current upstream quota-retention documentation. The Ultra Fast source and its new regression file are unchanged by this rebase. There is no final GUI or dashboard-contract diff, and both test registries retain upstream additions.

The expanded catalog run initially found one stale expectation in tests/codex-integration/codex-catalog.test.ts: the complete-object assertion omitted the newly derived supportsUltraFastTier: false for a provider without the explicit mapping. The follow-up commit adds that expected field while preserving strict equality and the file's existing line count. The final PR is 14 files, 341 insertions and 7 deletions.

Local validation of the final committed tree used the current repository test-runner pin, Bun 1.4.3 (c6da4a4d3), through the repository's isolated test wrapper:

bun scripts/test.ts --timeout 45000 tests/codex-integration/configured-ultrafast-picker.test.ts tests/codex-integration/ultrafast-tier-honesty.test.ts tests/codex-integration/fast-row-listing.test.ts tests/codex-integration/fast-row.test.ts tests/service/service-tier-capability.test.ts tests/routing/fastwire-policy.test.ts tests/routing/fastwire-characterization-wire.test.ts tests/lab/core-lab-boundary.test.ts tests/test-layout.test.ts tests/test-layout-tooling.test.ts tests/codex-integration/gpt61-sol-rows.test.ts tests/codex-integration/gpt6-native-rows.test.ts tests/codex-integration/discovered-native-models.test.ts tests/codex-integration/codex-clamp-notice.test.ts tests/codex-integration/catalog-async-lifetime.test.ts tests/codex-integration/codex-catalog.test.ts

$verifiedConsumerPaths = @('tests\codex-integration\codex-catalog.test.ts', 'tests\codex-integration\configured-ultrafast-picker.test.ts', 'tests\service\service-tier-capability.test.ts')
$remainingConsumerPaths = @(rg -l 'applyProviderConfigHints|supportsUltraFastTier' tests --glob '*.test.ts' | Where-Object { $_ -notin $verifiedConsumerPaths })
bun scripts/test.ts --changed=dev --timeout 45000 @remainingConsumerPaths
  • The complete 16-file run after the expectation fix: 847 passed, 0 failed, 3,996 assertions, 34.89 seconds. It covers configured choices, both catalog/cache writers, withdrawal and manual retention, wire policy, capability opt-outs, core/Lab boundaries, test registration, native context and asynchronous catalog lifetime.
  • The bounded changed-mode run over the remaining direct consumers: 463 passed, 0 failed, 4,274 assertions across 23 files, 6.81 seconds. The wrapper resolved origin/dev to merge base e6d7e561f566ab343fbf545a6fa3e1b63012f817 and selected all 23 supplied files. Together these two successful runs cover 1,310 tests across 39 distinct files.
  • bun run typecheck, bun run structure:check, bun run privacy:scan, bun scripts/file-size-ratchet.ts, and git diff --check origin/dev: passed.
  • From docs-site/, bun install --frozen-lockfile reported no package changes; bun run build passed with 569 pages and 79,375 internal links checked, 23.65 seconds.

Full-suite scope exception: the repository has 2,268 backend test files; an exhaustive local run is disproportionate to this bounded catalog projection and expectation repair. The focused catalog regressions and all remaining direct hint consumers above completed. The full suite was not run, and the earlier interrupted broad test:changed attempt is not counted as passing evidence. Whole-repository and cross-platform executable validation remain outstanding.

Current-head hosted status (f6fc95f707bfbd408f6620af12d138dca4b54bee): Cross-platform CI, Catalog async contracts, and React Doctor report action_required, awaiting maintainer authorization. These are not passing executable evidence. Metadata checks and CodeRabbit's successful skip status do not substitute for execution or review.

The latest maintainer source follow-up reviewed the actual catalog projection at prior head 004fef7bda2c406f669763c0e031319e394d259e and found no concrete new source blocker. The reviewer read but did not execute the configured-picker regression or use real catalog/cache/native clients. This is COMMENTED, not approval, policy acceptance, provider-entitlement verification or a review waiver. The local results above are author execution. Earlier 14 DOM passes apply only to the superseded dashboard proposal.

Prior client evidence remains separate: a Windows Codex 0.162.0-alpha.17.2 app-server smoke on the earlier 446ba7e2c proposal, using an isolated profile and non-serving loopback provider, parsed the generated routed row through initialize + model/list, returning serviceTiers: [priority, ultrafast] and defaultServiceTier: null. This proves catalog parsing only; rendered Desktop selection, a successful live provider request, entitlement and measured speed were not exercised.

Reviews, issue comments, inline comments and review threads were rechecked on 2026-10-13; no new source-fix requests or unresolved threads were present. CodeRabbit explicitly skips this Draft. The PR stays Draft pending required review and current-head executable CI, plus the project owner's policy decision and native picker/wire acceptance. A green rollup alone does not settle those product and client contracts.

Maintainer update (2026-10-14): merged current dev

Head 9d66fe199 merges current dev into this branch: first 16d36fb92 (de1ee9a2f), then aca5ccfcc (#7024) cleanly. Three conflicts came from #7039's native Ultrafast overlay (native-ultrafast.ts), which landed after this branch's base:

  • build-entries.ts: keeps both overlays. applyConfiguredUltraFast handles routed provider/model rows. applyNativeUltraFastTier handles bare and trusted account-bound gpt-6-astra / gpt-6.1-sol rows. Their row sets and provenance markers do not overlap. The now unused preserveOperatorUltraFastTiers import is dropped; configured-tiers.ts still calls it.
  • structure/catalog.md: this PR's configured/operator paragraphs plus dev's native-row paragraph, kept within the 600-line budget.
  • scripts/test-layout/layout.json: registers both configured-ultrafast-picker.test.ts and native-ultrafast-picker.test.ts.

Verification on this head: bun run typecheck, bun run structure:check, bun run privacy:scan pass. bun test over configured-ultrafast-picker, native-ultrafast-picker, ultrafast-tier-honesty, codex-catalog, vendor-context, both test-layout guards and the file-size ratchet: 437 pass, 0 fail. Exact-head hosted Cross-platform CI is the full-suite evidence.

Co-authored-by: oocheol oocheol@users.noreply.github.com

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 change projects existing explicit wire policy into catalog metadata and does not change credentials, authorization, dependencies or default tier demand.

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • Required local validation passed; commands, results, and any full-suite exception are documented.
  • I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).
  • I resolved all correct Codex and CodeRabbit findings.
  • My PR is ready for review.

@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • 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.

@github-actions github-actions Bot added the enhancement New feature or request label Oct 11, 2026
@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (2/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 2/4).

Review readiness checklist

  • ✅ Required local validation passed; commands, results, and any full-suite exception are documented.
  • ✅ I pushed my PR to a recent dev commit (at most 10 behind; a maintainer may still ask for the exact tip before merge).
  • ⬜ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

2/4 boxes ticked.

Automatic draft conversion failed. Please convert this pull request to a draft manually until every box above is ticked.

@Ingwannu Ingwannu left a comment •

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Source review of exact head 3eeebc32b260abec27980bdd86beb8750846bdc7, based on current dev 9b6f4b2632492b3df637dccc009d6a01ed47c85d (six changed files). This is not an approval or CI authorization.

The new read-back is justified by the existing API contract: GET /api/settings emits a strict boolean ultraFastTier (config-routes.ts:423), whereas PUT persists the preference but omits that field from its success response. The component no longer treats the requested value as confirmation. It reconciles an observed mismatch/lost write response, blocks further writes after unreadable state, and uses both the target-keyed child mount and generation checks to fence stale loads and old-target write completions. The React state/ref ownership is appropriate here; I did not find a concrete source-level blocker in that changed flow.

I also checked the new DOM cases and all six file diffs. The 14 cases cover placement without custom ordering, non-boolean payloads, both toggle directions, duplicate clicks, mismatch/lost response, observation failure/retry, old polls and target changes. Existing locale keys are reused. The English/Korean docs distinguish retention preference from provider capability, picker choices and client acknowledgement, and the dashboard contract was updated without raising its line budget.

Validation limits remain important:

  • 14 passing tests, typecheck/build/lint/docs checks and screenshot observations are the author's reported receipts, not executions I performed. I prepared an exact-head isolated worktree, but independent local execution is deferred because other Cargo/rustc workloads are active on the shared host; I will not overlap builds or raise CPU/RAM limits.
  • The screenshots are component previews with a mocked API, not proof of the full Models page or a live provider/Codex reload. I have not independently inspected a rendered browser session.
  • Current-head Cross-platform CI 38107921788 and React Doctor 38107921745 are action_required, not passing evidence. I have not authorized those runs or a security scan. The readiness checklist remains 0/4 and the PR remains Draft. The final UI decision remains with the project owner.

No contributor branch modification, sponsorship/waiver, readiness promotion, merge or deployment was performed. Please keep the current validation limits explicit when completing the readiness checklist.

Independent focused execution update — 2026-10-11

The initial admission deferral above is now superseded for the DOM file only. After the admission guard verified that foreign builds were absent, I executed the unchanged exact-head suite with Bun 1.4.0 (34cbb9a40), from gui/:

bun test --no-env-file --preload ../tests/preload.ts --isolate ./tests/ultrafast-tier-setting.test.tsx --timeout 15000

14 passed / 0 failed / 60 assertions, complete file, 2.01 seconds. This is my measured independent result, not just the author's receipt. The mounted component tests use happy-dom and synthetic fetch responses; no live management/provider/native client was invoked. The cases include stale polls and old-target pending load/save, but do not establish a real-browser/network outcome or full Models page integration.

The ubuntu-owned isolated worktree used fresh private /tmp HOME/CODEX_HOME/OPENCODEX_HOME/TMPDIR and verified effective CPU75%, memoryHigh1280M/max1536M, swap0, tasks64, nice10, RuntimeMaxSec120. IOWeight20 is configured without delegated io-controller enforcement. The unit terminated successfully, with no overlapping own test workload, cap increase, local scan, build/install or live configuration change. Typecheck/build/lint/docs/screenshot receipts remain the author's, and hosted CI, full suites and owner UI acceptance remain separate holds. This review stays COMMENTED, not APPROVED.

@oocheol oocheol changed the title feat(gui): make Ultra Fast retention easier to find in Models feat(codex): expose declared Ultra Fast in the desktop speed picker Oct 11, 2026

@Ingwannu Ingwannu left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Re-reviewed the changed proposal at 446ba7e2c3d4e95f891fef777ae7bd313f49a95e against trusted dev 9b6f4b2632492b3df637dccc009d6a01ed47c85d: 13 files, backend catalog projection, not the previous six-file dashboard toggle. My previous 14 DOM passes apply only to the superseded 3eeebc32 UI proposal and do not validate this implementation.

The current implementation uses captured eligible service-tier policy and requires the explicit ultrafast -> ultrafast mapping. It strips stale discovery hints, excludes native/account/combo rows, gives conflicting duplicate declarations a conservative outcome, and runs after ordinary row admission. The exact-slug generated marker is used for revocation, not as authority to create a capability; the existing operator-retention helper strips the old tier before the configured choice is appended. The configured overlay also does not import an operator's old Ultra Fast default. Both retained-sync and convergence pass the captured set into the same merge.

The docs correctly distinguish a provider-wide mapping from a per-model supported subset, selectable menu metadata from access, and configured capability from the separate operator-retention setting. I cross-checked the current OpenAI API guide, including its HTTP alternative, and Codex access guide. They do not establish any third-party gateway's entitlement or measured performance. Your app-server receipt is catalog/model-list evidence, not rendered Desktop selection or a live successful Ultra Fast request.

No concrete source-level blocker found in the reviewed projection. The new test covers declaration withdrawal, retained/manual tiers, defaults, duplicates, aliases, disabled/selected rows and both writers using disposable configuration. I have not executed that new suite: foreign Cargo/rustc workloads currently prevent independent local admission under the serial resource rule. Your 436-test/typecheck/docs receipts remain author-reported, not mine.

Please keep this Draft until current-head readiness and required independent review/CI are complete. Cross-platform 38110693774, Catalog 38110693755 and React Doctor 38110693773 are action_required. Final client/menu acceptance remains an owner decision; this is not approval, sponsorship, CI authorization or a live configuration change.

@oocheol
oocheol force-pushed the codex/ultrafast-model-controls branch 2 times, most recently from 8430c52 to 004fef7 Compare October 12, 2026 07:10

@Ingwannu Ingwannu left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Refreshed the actual 13-file PR diff at 004fef7bda2c406f669763c0e031319e394d259e against its merge base, not an old UI proposal or unrelated commits added by rebasing.

The projection still requires captured eligible service-tier policy with the exact ultrafast wire mapping, fences conflicting duplicate declarations, and excludes combo/native authority. Both catalog writers pass captured exact routed slugs. The exact-slug generated marker revokes a withdrawn generated tier without converting it into operator-retention evidence; publishing a choice leaves the default unchanged. Existing independently supplied operator tiers remain a distinct opt-in contract. I found no concrete new source blocker in those boundaries.

I read the configured-picker regression including both writer children, but did not execute it or touch real catalog/cache/native clients in this pass. Old UI-only test receipts are not this implementation's coverage. The remaining project-owner decision and native picker/wire acceptance are not settled by a green rollup. Keep the Draft and documented limits; this is an ordinary source follow-up, not provider entitlement verification, policy acceptance, approval or a review waiver.

jun added 2 commits October 14, 2026 01:53
# Conflicts:
#	scripts/test-layout/layout.json
#	src/codex/catalog/build-entries.ts
#	structure/catalog.md
@lidge-jun

Copy link
Copy Markdown
Owner

Maintainer integration into dev (MAINTAINERS.md dev-only exception), at exact head 9d66fe199.

The branch was conflicting with dev, so I merged dev into it (no force push). The three conflicts came from #7039's native Ultrafast overlay. Both overlays are kept: routed provider/model rows use applyConfiguredUltraFast, and native gpt-6-astra/gpt-6.1-sol rows use applyNativeUltraFastTier. Their row sets and provenance markers do not overlap. A second, clean merge brought in #7024. Details are in the description's maintainer update.

Exact-head hosted evidence: Cross-platform CI test 1/4 through 4/4, gates, structure gate, docs site build, docker smoke, storage policy, api usage, npm-global and keyring all passed; Catalog async contracts, React Doctor, hygiene and enforce-target passed. No outstanding change requests; @Ingwannu's source review reported no blocker. Author credit: @oocheol (PR author; Co-authored-by in the description).

@lidge-jun
lidge-jun marked this pull request as ready for review October 13, 2026 17:21
@lidge-jun
lidge-jun self-requested a review as a code owner October 13, 2026 17:21
@lidge-jun
lidge-jun merged commit 23acccb into lidge-jun:dev Oct 13, 2026
33 of 35 checks passed
@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-13T17:28:08.703740Z 9d66fe1 Draft marked ready
ℹ️ 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.

@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: 9d66fe199b

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

|| isNativeAliasCatalogEntry(entry) || isExactComboCatalogEntry(entry, exactComboSlugs)
|| trustedAccountBoundNativeCatalogSlug(entry) !== undefined) continue;
preserveOperatorUltraFastTiers(entry, operatorRows.get(entry.slug), ultraFastTier);
applyConfiguredUltraFast(entry, operatorRows.get(entry.slug), configuredUltraFastSlugs.has(entry.slug), ultraFastTier);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Project Ultra Fast into live Codex catalogs

When a Codex client obtains its catalog from GET /v1/models?client_version=..., this overlay never runs: the branch in src/server/index/serve-options.ts builds and returns buildCatalogEntries(...) directly, while applyConfiguredUltraFast is only invoked by mergeCatalogEntriesFromObservedState. The gathered model carries supportsUltraFastTier, but the direct builder only projects supportsServiceTier, so live-discovery rows advertise Fast but not Ultra Fast and those clients cannot select the newly configured tier. Project the metadata in the shared entry derivation, or explicitly cover that HTTP path too.

AGENTS.md reference: src/AGENTS.md:L18-L18

Useful? React with 👍 / 👎.

this choice. Ordinary Fast support, a GPT-like name, native/account rows and combo aliases
do not enable it. Removing the mapping or disabling that model's service-tier support
removes the generated choice from both the catalog and cache on the next successful sync.
The separate `ultraFastTier` setting still only retains hand-supplied catalog tiers.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Correct the ultraFastTier description for native rows

The ultraFastTier setting does not only retain hand-supplied tiers: for bare and account-bound gpt-6-astra and gpt-6.1-sol, mergeCatalogEntriesFromObservedState calls applyNativeUltraFastTier(e, ultraFastTier), which actively adds generated Ultrafast descriptors. This sentence can mislead users about what enabling the setting changes (and the Korean translation repeats the same claim), so qualify it as the routed-row behavior and document the native-row generation here as well.

AGENTS.md reference: docs-site/AGENTS.md:L7-L10

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants