Repository navigation
[Feature]: grey out zero-credit models/combos in the served model catalog and picker #1711
Description
Area
Catalog / models
Goal
Make the model picker reflect known quota exhaustion without removing entries from the catalog.
When a routed model or combo has zero remaining credit across all of its routable targets, OpenCodex should mark that catalog entry as inactive so picker consumers can grey it out and explain why it is unavailable. The entry should become active again automatically when quota resets or refills.
Current problem
Models and combos with known zero remaining credit can still appear as normal selectable entries in the catalog-backed model picker. Users can therefore select an option that OpenCodex already knows cannot currently serve a request.
In scope
- Catalog state. Represent known all-target quota exhaustion in the served model catalog without hiding the model/combo.
- Picker semantics. Expose enough stable metadata for picker consumers to render the entry as inactive, ideally with a reason such as
no_credit. - Recovery. Remove the inactive state automatically when authoritative quota state shows that credit has reset or refilled.
- Honest unknowns. Do not mark an entry exhausted merely because quota data is absent or stale; only positive exhaustion evidence should disable it.
Example shape, if compatible with the catalog contract:
{
"disabled_reason": "no_credit"
}The exact field name is an implementation decision; the required product behavior is a stable visible entry that can be rendered inactive with an exhaustion reason.
Out of scope
- Combo workspace controls and per-target quota badges: tracked by child issue [Feature]: surface per-target quota state in the combo workspace — disable actions when all targets have 0 credits #1702 and its implementation work.
- Runtime candidate failover / retry-loop prevention after a terminal candidate failure: tracked by [Feature]: re-evaluate a routing profile when the selected candidate fails terminally #1572.
- Sticky per-target routing state after a runtime 402/429: belongs with runtime routing/failover policy, not this catalog/picker issue.
Relationship
- Parent UX/catalog tracker: this issue.
- Child workspace issue: [Feature]: surface per-target quota state in the combo workspace — disable actions when all targets have 0 credits #1702.
- Runtime routing/failover owner: [Feature]: re-evaluate a routing profile when the selected candidate fails terminally #1572.
Example
Before: combo/grok-4.5 has known zero credit across every routable target but appears active in the picker.
After: the entry remains visible, is marked inactive with a no-credit reason, and becomes active again after quota recovery.
Alternatives considered
- Manually checking the dashboard before selecting a model: works but duplicates information OpenCodex already has.
- Hiding exhausted models entirely: rejected because keeping the entry visible preserves catalog stability and explains why it is unavailable.
Additional context
- [Feature]: surface per-target quota state in the combo workspace — disable actions when all targets have 0 credits #1702 covers the combo-workspace UI side.
- [Feature]: re-evaluate a routing profile when the selected candidate fails terminally #1572 covers runtime re-evaluation/failover when a selected candidate fails terminally.
- Original context: https://x.com/rdjooo/status/2088314157628010897
Checks
- I searched existing issues and documentation.
- This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
- I removed secrets and personal data.
Activity
coderabbitai commentedon Aug 14, 2026
🔗 Related PRs
#426 - feat(codex): add account-qualified model namespaces [open]
#965 - fix(catalog): custom model rows inherit provider reasoning metadata [open]
#1212 - feat(codex): converge account picker catalogs [merged]
#1331 - fix(catalog): keep failover combos when live discovery omits members [merged]
#1669 - feat(catalog): add modelPickerOrder to customize the Codex model-picker order [open]
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 Issue enrichment is currently in open beta.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:💬 Have feedback or questions? Drop into our discord!
github-actions commentedon Aug 14, 2026
Maintainer decision respected
A maintainer has reopened this issue. The automated closure has been deactivated.
[-][Feature]: mark zero-credit models/combos inactive in the model picker and fail fast instead of retry-looping on exhausted credit[/-][+][Feature]: grey out zero-credit models/combos in the model picker and fail fast on exhausted credit instead of retry-looping[/+][-][Feature]: grey out zero-credit models/combos in the model picker and fail fast on exhausted credit instead of retry-looping[/-][+][Feature]: grey out zero-credit models/combos in the served model catalog and picker[/+]lidge-jun commentedon Aug 19, 2026
리뷰 · 우선순위 40 / 80
할당량이 모든 라우팅 타깃에서 0인 모델/콤보를 카탈로그에서 지우지 말고, 피커에서 비활성으로 보이게 하고 이유를 보여 달라는 요청입니다. 크레딧이 다시 차면 자동으로 활성으로 돌아와야 합니다. 콤보 워크스페이스 UI는 #1702, 런타임 페일오버는 #1572입니다.
현재
dev의 served catalog는src/codex/catalog/sync.ts에서visibility: "list"/ hide와config.disabledModels로 줄을 빼거나 숨깁니다. 쿼터 소진을disabled_reason: "no_credit"처럼 남기면서 줄을 유지하는 필드는 이 병합 경로에 없습니다.src/codex/reset-credit-recovery.ts에no_credit코드가 있지만, 리셋 복구 결과이지 카탈로그 피커 메타데이터가 아닙니다. 할당량 숫자는src/providers/quota.ts쪽에 있습니다.원하는 동작은 피커 소비자가 안정적으로 회색 처리할 수 있는 상태입니다. 쿼터 데이터가 없거나 오래됐다고 지워서는 안 되고, 모든 타깃이 실제로 소진됐다는 증거가 있을 때만 비활성이어야 합니다. 엔트리를 숨기면 카탈로그가 흔들리고 왜 못 쓰는지 설명이 사라집니다.
해결방안: 권위 있는 쿼터 상태가 all-target 0일 때 catalog row에 비활성 이유만 붙이고, 피커는 그 필드를 읽으면 됩니다. 쿼터가 차면 필드를 걷어 다시 고를 수 있게 하면 됩니다. 런타임 402/429 스티키 라우팅이나 콤보 버튼 비활성은 이 이슈에 넣지 않는 편이 맞습니다.
이 댓글은 grok-bot이 작성했습니다
lidge-jun commentedon Aug 19, 2026
리뷰 · 우선순위 40 / 80 · 유지
크레딧 0인 모델/콤보를 카탈로그에서 지우지 말고, 피커에서 회색 +
no_credit같은 이유로 보여 달라는 요청. 쿼타 데이터 없거나 오래되면 회색 처리 안 함. 자식 UI는 #1702, 런타임 페일오버는 #1572.유지함. #1702랑 같이 가는 피커 쪽. 숨기면 안 됨. 회복되면 자동으로 다시 활성.
해결방안: served catalog에 안정적인 inactive + reason. 피커는 그 메타만 그림. 워크스페이스 뱃지는 #1702.
이 댓글은 grok-bot이 작성했습니다
docs(devlog): lock the round-2 two-lane delivery roadmap
docs(devlog): re-split the round-2 lanes after the roadmap audit
Merge branch 'dev' into lane-b/4-1711
lidge-jun commentedon Sep 10, 2026
Closed by #4165, merged to
devas27836a0128b1cc386a05cd324a9260483a3d6fe7.Models and combos whose usable targets are all quota-exhausted are now marked inactive in the served catalog and in the Dashboard, with a No credit chip and an explanation that the entry stays listed and becomes usable again when credit resets. As the issue asked, the row is not hidden. The marker is a management and Dashboard projection: it is never serialized into the Codex catalog and never affects routing or visibility, and the native Codex picker ignores it, which is the honest limit of what a custom catalog field can do. The badge is driven by cached quota evidence, so a provider that has never been probed is treated as unknown rather than exhausted.
PRs here target
dev, so GitHub does not auto-close the linked issue; this is the manual close with the merge commit as evidence.feat(catalog): mark quota-exhausted models and combos inactive
docs(devlog): lock the round-2 two-lane delivery roadmap
docs(devlog): re-split the round-2 lanes after the roadmap audit
feat(catalog): mark quota-exhausted models and combos inactive
Merge branch 'dev' into lane-b/4-1711