Repository navigation
feat: retire model families from the provider catalogue - #21
Merged
Merged
Conversation
Add an OpenSpec change proposal to collapse the provider catalogue to provider plumbing only, removing the FAMILY keyword, the --model-family flag, and the per-family model lists and default models. The user names the model directly via MODEL/ALIAS, which already passes through the block builders. Includes proposal, design, spec deltas (provider-catalog, provider-selection, outfit-files, shell-completion), and tasks. No code changes yet — implementation follows via the apply flow. Claude-Session: https://claude.ai/code/session_01WmyqktzL3xrG4bVQYoP7aT
Collapse the catalogue to provider plumbing only. Models change all the time, so the hand-curated per-family model lists were an unbounded maintenance burden — yet BuildProviderBlock already synthesises a model entry for any id the user names, so arbitrary models already work. The family layer only bundled several models under one name, and no shipped Outfit used FAMILY. Changes: - providers.yaml drops every families block (models + defaultModel); each provider keeps only description/name/npm/apiKey*/options/pi. - catalog: remove Family, Provider.Families, MatchFamily, SortedFamilyNames, Family.ModelKeys; drop the familyName parameter from BuildProviderBlock and BuildPiProvider. - Outfit format: remove the FAMILY keyword and Selection.Family. - CLI: remove --model-family/-f; simplify list (providers + plumbing), export (names the model directly), and remove (no family expansion). - completion: drop family names; --model has no static source now. - docs updated throughout; FAMILY/-f removed. BREAKING: Outfits or scripts using FAMILY/--model-family must switch to MODEL/ALIAS. No shipped example used FAMILY. Implements the retire-model-families OpenSpec change. Claude-Session: https://claude.ai/code/session_01WmyqktzL3xrG4bVQYoP7aT
Archive the completed OpenSpec change and fold its deltas into the main specs. OpenSpec cannot drop a scenario from a MODIFIED requirement, so the requirements whose family scenarios were removed are expressed as remove+add under family-free names: - provider-catalog: Embedded provider catalogue -> Embedded provider definitions - provider-selection: Selection validation -> Validating a selection; Removing a selection -> Removing a provider or model - shell-completion: Completion coverage -> Completion surface coverage Also refresh the two spec Purpose sections (non-normative, untouched by the delta sync) to drop their family wording. Claude-Session: https://claude.ai/code/session_01WmyqktzL3xrG4bVQYoP7aT
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.
Collapse the provider catalogue to provider plumbing only, retiring the model-family concept.
Summary
FAMILYOutfit keyword and the--model-family/-fflag; a selection is now a provider plus aMODELand/orALIAS.providers.yamlto plumbing (description, name, npm, API-key config, options,pi) — no morefamilies:blocks, model lists, or per-family default models.Family,Provider.Families,MatchFamily,SortedFamilyNames,Family.ModelKeys) and thefamilyNameparameter fromBuildProviderBlock/BuildPiProvider.outfit list(providers plus plumbing),outfit export(names the model directly),outfit remove(no family expansion), and shell completion.Implementation details
The per-family model lists were the catalogue's only real churn: models change constantly, but the plumbing (around six providers) rarely does.
BuildProviderBlockalready synthesises a model entry for any id the user names, so arbitrary models worked without being listed — the curated lists were conveniences, not an authoritative registry, and no shipped Outfit usedFAMILY. Single-model selection, default-model resolution, and alias-keying are unchanged. Model completion loses its static source here; a follow-up change (#22) restores a browsable, self-updating list by querying each provider's own/modelsendpoint. Delivered as theretire-model-familiesOpenSpec change (proposal, design, spec deltas, and implementation).