Skip to content

[Feature]: grey out zero-credit models/combos in the served model catalog and picker #1711

Closed

Description

@ardjo-s

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

  1. Catalog state. Represent known all-target quota exhaustion in the served model catalog without hiding the model/combo.
  2. Picker semantics. Expose enough stable metadata for picker consumers to render the entry as inactive, ideally with a reason such as no_credit.
  3. Recovery. Remove the inactive state automatically when authoritative quota state shows that credit has reset or refilled.
  4. 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

Relationship

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

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

  1. coderabbitai commented on Aug 14, 2026

    @coderabbitai
    Contributor
    🔗 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 plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  2. github-actions commented on Aug 14, 2026

    @github-actions
    Contributor

    Maintainer decision respected

    A maintainer has reopened this issue. The automated closure has been deactivated.

  3. changed the title [-][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[/+] on Aug 15, 2026
  4. changed the title [-][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[/+] on Aug 16, 2026
  5. reopened this on Aug 16, 2026
  6. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 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이 작성했습니다

  7. lidge-jun commented on Aug 19, 2026

    @lidge-jun
    Owner

    리뷰 · 우선순위 40 / 80 · 유지

    크레딧 0인 모델/콤보를 카탈로그에서 지우지 말고, 피커에서 회색 + no_credit 같은 이유로 보여 달라는 요청. 쿼타 데이터 없거나 오래되면 회색 처리 안 함. 자식 UI는 #1702, 런타임 페일오버는 #1572.

    유지함. #1702랑 같이 가는 피커 쪽. 숨기면 안 됨. 회복되면 자동으로 다시 활성.

    해결방안: served catalog에 안정적인 inactive + reason. 피커는 그 메타만 그림. 워크스페이스 뱃지는 #1702.

    이 댓글은 grok-bot이 작성했습니다

  8. lidge-jun commented on Sep 10, 2026

    @lidge-jun
    Owner

    Closed by #4165, merged to dev as 27836a0128b1cc386a05cd324a9260483a3d6fe7.

    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.

  9. added a commit that references this issue on Sep 10, 2026
    04c4a80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    catalogModel catalog, slugs, visibility, routed entriesenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions