Skip to content

[Bug] Registry model renames never reach existing key-auth provider configs (qwen3.8-max-preview persists) #1610

Description

@lidge-jun

Client or integration

OpenCodex dashboard

Area

Catalog / models

Summary

When a registry preset renames or retires a model id, existing key-auth provider configs are never updated. The stale id stays in config.json forever, so the dashboard keeps listing a model the vendor is retiring and the real replacement never appears.

Concrete case: d40367c0c renamed qwen3.8-max-preview to qwen3.8-max across both Alibaba Token Plan providers. My alibaba-token-plan-intl entry still carried the preview id in six places today, and alibaba-token-plan-intl/qwen3.8-max was simply absent from the picker.

The cause is the guard in reconcileOAuthProviders (src/oauth/index.ts:917):

if (!def || prov.authMode !== "oauth") continue;

OAUTH_RECONCILE_FIELDS already contains exactly the fields that go stale — models, modelContextWindows, modelInputModalities, modelReasoningEfforts, modelReasoningEffortMap — and there is already a heal step for a defaultModel that no longer exists in the refreshed list. None of it runs for authKind: "key" presets, because reconciliation is keyed on OAUTH_PROVIDERS and an oauth auth mode rather than on "this provider came from a registry preset".

So the repair path exists and is well tested; it is simply unreachable for every key-auth preset (Alibaba Token Plan, Moonshot, Volcengine, and the rest).

Reproduction

  1. Configure alibaba-token-plan-intl on a build from before d40367c0c (registry seeds qwen3.8-max-preview).
  2. Upgrade to any build after d40367c0c (registry seeds qwen3.8-max).
  3. Restart the service and open the dashboard model list for alibaba-token-plan-intl.

Observed: the list shows alibaba-token-plan-intl/qwen3.8-max-preview. alibaba-token-plan-intl/qwen3.8-max is not offered.

Expected: the retired id is replaced by the supported one, carrying the registry's current context window, modalities, and reasoning ladder.

Persisted state on my machine before the manual fix:

models[0]                              qwen3.8-max-preview
modelContextWindows                    qwen3.8-max-preview: 983616
modelInputModalities                   qwen3.8-max-preview: [text, image]
modelReasoningEfforts                  qwen3.8-max-preview: [low, high, xhigh]
modelDefaultReasoningEfforts           qwen3.8-max-preview: xhigh
preserveReasoningContentModels         includes qwen3.8-max-preview
thinkingBudgetModels                   includes qwen3.8-max-preview
disabledModels                         alibaba-token-plan-intl/qwen3.8-max-preview

Two of those had drifted from the registry beyond the rename, which is the part a plain string replacement would miss:

  • ladder was ["low","high","xhigh"]; the registry's QWEN38_REASONING_EFFORTS is ["low","medium","xhigh"]
  • the id sat in thinkingBudgetModels, but the registry puts qwen3.8-max in directReasoningEffortModels and explicitly filters it out of thinkingBudgetModels

A user who edits the id by hand keeps the wrong reasoning contract, silently.

Version

dev at acef0a584

Operating system

macOS

Provider and model

alibaba-token-plan-intl / qwen3.8-max (was qwen3.8-max-preview)

Logs or error output

No error is emitted. That is the problem: the rename fails silently and the only symptom is a model list that disagrees with the registry.

Screenshots and supporting files

Dashboard shows alibaba-token-plan-intl/qwen3.8-max-preview in the 1/15 model list for alibaba-token-plan-intl, with no qwen3.8-max row.

Redacted configuration

{
  "providers": {
    "alibaba-token-plan-intl": {
      "adapter": "openai-chat",
      "baseUrl": "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
      "authMode": "key",
      "apiKey": "<redacted>",
      "defaultModel": "qwen3.7-max",
      "models": ["qwen3.8-max-preview", "qwen3.7-max", "..."],
      "liveModels": false
    }
  }
}

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

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

    account-poolOAuth, credentials, Codex pool, quota, failover, plansbugSomething isn't workingcatalogModel catalog, slugs, visibility, routed entries

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions