openai / openai/codex

[Desktop] Luna Reserve collapses model picker to Reserve only, hiding custom/routed models after native quota exhaustion

Open
#42,830 1 comment 7 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

Summary

On Windows Codex Desktop 26.901.4073.0 (bundled CLI 0.153.1), exhausting the normal ChatGPT Codex quota activates Luna Reserve as expected, but the Desktop model picker then stops exposing other otherwise-available models. This includes custom/routed models backed by independent providers and independent quota.

This appears distinct from the existing Luna Reserve entitlement/write issues: the app-server still reports the custom models as visible and usable in model/list; the Desktop UI removes them only after Reserve mode becomes active.

Environment

  • Windows 11 x64
  • Codex Desktop: 26.901.4073.0
  • bundled codex-cli: 0.153.1
  • ChatGPT authentication
  • custom model catalog supplied through a local OpenAI-compatible router

Reproduction

  1. Start with normal Codex quota available. Custom/routed models are visible in the Desktop model picker.
  2. Exhaust the normal Codex quota.
  3. The account rate-limit state changes to normal Codex usage disallowed, while an additional gpt-reserve (base_model_inference) bucket remains allowed and rate_limit_upsell.banner_type becomes luna_reserve.
  4. Luna Reserve activates.
  5. Open the Desktop model picker.
Actual

The picker is reduced to the Reserve/Luna model. Custom/routed models disappear and cannot be selected, even though the app-server's current model/list still returns them as visible and without lock/upgrade/availability restrictions.

For example, during the exhausted state I verified that model/list still returned routed models such as zai-coding/glm-5.3, zai-coding/glm-5.2, and zai-coding/glm-5-turbo as visible, alongside native models. The router's merged catalog also still marked those models visible.

Expected

Activating Luna Reserve should provide the native Reserve fallback without globally suppressing custom/provider-backed models that do not consume the exhausted native Codex quota. The picker should retain independently available models, or quota gating should be scoped only to models that actually depend on the exhausted Codex allowance.

Root-cause evidence

I reproduced this without sending an inference request. A read-only app-server probe showed:

  • primary Codex rate-limit bucket: exhausted / disallowed
  • additional gpt-reserve bucket: allowed
  • upsell banner type: luna_reserve
  • model/list: custom/routed models still visible

I also inspected the packaged Desktop renderer logic. In the Luna Reserve-active branch, the picker first obtains the normal model list, then replaces that list with only the first Reserve/Luna entry. Separately, the composer model is overridden to gpt-reserve while Reserve is active. This explains why custom models remain present in the app-server catalog but disappear in Desktop.

The custom router has no Luna/Reserve-specific picker logic, and no catalog visibility mutation occurs when the quota transition happens.

Related issues

Potentially related but different behavior:

  • #40939 — CLI cannot use Luna Reserve after standard usage exhaustion
  • #42153 — manual switch to GPT-5.6 Luna still blocked after exhaustion
  • #41277 — request to disable Luna fallback

This report is specifically about Reserve activation globally collapsing the Desktop model picker and hiding independent custom/routed models.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Trace the packaged Desktop renderer's Luna Reserve-active model-picker branch after it obtains the normal model list, alongside the composer override to gpt-reserve. Compare its behavior with the app-server model/list response and the exhausted/Reserve rate-limit state. Done means Reserve remains available while visible independent custom/routed models remain selectable.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop, frontend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.