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.

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