Skip to content

Copilot small-model pick still prefers gpt-5-mini, retired by GitHub on 2026-10-19, so session titles fail when the model catalogue is the bundled snapshot or a stale cache #1695

Open

Description

@sahrizvi

What happens

On the github-copilot and github-copilot-enterprise providers, Provider.getSmallModel (packages/opencode/src/provider/provider.ts) prefers gpt-5-mini for small background requests: session titles, prompt enhancement. GitHub retired GPT-5 mini from Copilot on 2026-10-19 (Copilot "Model retirement history"; models.dev marks github-copilot/gpt-5-mini status = "deprecated" since its 2026-10-21 commit). Every title request on those providers now goes to a retired model and fails, while chat on a current model works, so new TUI sessions keep New session - <timestamp>.

provider.ts removes models with status === "deprecated" from the list, but only when the catalogue carries that status:

  • the live models.dev feed does;
  • the bundled models-snapshot.ts shipped in v0.12.8, v0.12.9 and v0.12.10 does not (no status on any Copilot model);
  • a disk cache (<cache>/models.json) written before 2026-10-21 does not, and it is kept for as long as the live fetch keeps failing.

So on a machine that cannot reach models.dev (a common corporate-network case, seen in a field report from a Windows 11 Copilot Enterprise user whose titles stopped on every session after mid-October while chat kept working), the retired model stays selected indefinitely. With v0.12.10 each failed attempt is reported as title_generation_failed with model_id gpt-5-mini, so the scale will be visible in telemetry.

Workaround for users: set small_model to a model their Copilot plan serves, for example "small_model": "github-copilot-enterprise/claude-haiku-4.5" (or their chat model).

Expected

  1. getSmallModel never picks a model the catalogue marks deprecated or retired, and does not hard-code a model that a provider has retired; for Copilot the priority list should start from current small models and fall back to the session's chat model rather than fail.
  2. The bundled snapshot is refreshed at each release so an offline or blocked machine gets the retirement statuses too, and the snapshot refresh is part of the release checklist.
  3. A small request that fails with a "model not supported / retired" class error falls back to the chat model for that request instead of retrying the same retired model.

Activity

  1. self-assigned this
    on Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions