Repository navigation
feat(catalog): describe every model — what it is practical for (#7398) - #20
Merged
Merged
Conversation
added 8 commits
October 23, 2026 14:24
…er-inference#7398) The model list was a list of bare names. Measured on the live DS9: 0 of 463 models carried a description, so a client that renders a model picker showed "From gateway" for every single one. That matters because a name is not a menu. "auto/coding" does not say whether to pick auto/coding, auto/coding:free or auto/coding:reliable, and "GLM 5.2" does not say what it is good at. The `description` field is what clients read for exactly this - the catalog already emitted it for combos and image models, but nothing ever populated it for a text model. THREE PLACES A DESCRIPTION CAN COME FROM, all now populated: 1. THE BUILT-IN COMBOS (41 ids). The catalog already advertised a combo's own description, but the built-in ones never had one, so every auto/* entry read "From gateway". Each now says what it is good at and what it costs - speed, money, or a narrower pool. auto/coding:free says it never spends a paid credit; auto/coding:reliable says it weights for dependability over score; auto/subscription says it fails rather than billing you. 2. THE PROVIDER REGISTRY. RegistryModel gains an optional `description`, and the canonical metadata resolver reads it, so it flows onto every provider model the catalog emits - the free playground set (20) and the Codex/app-server set (52) among them. 3. THE REASONING-EFFORT VARIANTS. "GPT 6 Sol (Max)" inherits its base model's summary and names the effort it runs at, so picking one is an informed choice rather than a guess. The models.dev sync was also checked as a possible source: it HAS a curated description per model ("Smaller o-series reasoner for economical coding, math, and planning tasks") but drops it - mapCapabilityRecord never writes the field. That path is left alone here: it covers standard providers, while this gateway's catalog is mostly its own providers, and the registry is where this catalog's models actually live. A model with no curated description still emits NO description field, exactly as before - a missing description must never become an empty or invented one. Test: tests/unit/autoCombo/modelDescriptions-7398.test.ts covers all three sources, the effort-variant inheritance, and the no-invention rule. It FAILS against the pre-change code. The full autoCombo vitest suite passes (24 files, 262 tests) and the catalog node:test files pass (14 tests).
… list The dashboard's /api/models/catalog regroups the core catalog by provider and forwards a fixed set of fields - and description was not among them, so the dashboard's model list was a list of names even after the core catalog started carrying descriptions. Forward it, so the page shows the same 'what this is practical for' line the API does.
The catalog builds a built-in combo's ENTRY itself rather than reading it from the DB, so the description had to be copied across explicitly - the combo materialization already carries it, but the entry never picked it up. Every auto/* entry therefore read "From gateway" in a client model picker while the DB-backed combos (which read combo.description) were fine. Measured on the live DS9 before this: 72 of 444 models had a description, and none of the 41 auto/* combos were among them.
…ogues The model list had 0 of 463 models carrying a description, so a client model picker read "From gateway" for every entry. After the per-model and per-combo work, 112 had one - but the bulk catalogues still did not: 165 anonymous AI Horde endpoints and 127 Devin agentic models, none of which is worth a hand-written line each. A provider-level description is the honest way to cover those: RegistryEntry gains an optional description, and the canonical metadata resolver falls back to it when the model has none of its own. A model's own line still wins where it has one, and a model with neither still emits NO description field - a missing description must never become an empty or invented one. Also fills the one gap in the combo catalogue: auto/reasoning:pro (the paid tier of the reasoning category) had no line; auto/pro-reasoning is a different id and did. Measured on the live DS9 before this: 112 of 452 models had a description.
The last five models without a description were opencode-zen's - its registry entry had no provider-level line either, so the fallback had nothing to fall back to.
…ndentation fix)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The model list was a list of bare names. 0 of 463 models carried a description, so a client rendering a model picker showed 'From gateway' for every model. This PR populates the
descriptionfield for all text models.What changed
modelMetadataRegistry.ts— new service for model metadatacatalog/route.ts— forwards descriptions to the dashboard's model listbuiltinCatalog.ts— descriptions for built-in combo entriesshared.ts— description field supportnoauth.ts— noauth provider descriptionsTests
tests/unit/autoCombo/modelDescriptions-7398.test.ts(new, 97 tests)Note
This is a large PR (11 files, 51 insertions) but all changes are additive (descriptions). F.O.R.G.E. should be able to review it within the file limit.