[Desktop] Luna Reserve collapses model picker to Reserve only, hiding custom/routed models after native quota exhaustion
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
- Start with normal Codex quota available. Custom/routed models are visible in the Desktop model picker.
- Exhaust the normal Codex quota.
- The account rate-limit state changes to normal Codex usage disallowed, while an additional
gpt-reserve(base_model_inference) bucket remains allowed andrate_limit_upsell.banner_typebecomesluna_reserve. - Luna Reserve activates.
- 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-reservebucket: 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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