{"record":{"id":"8774956aebb2f587","repo":"charmbracelet/crush","slug":"failed-to-select-default-models-w","errorCode":null,"errorMessage":"failed to select default models: %w","messagePattern":"failed to select default models: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"internal/config/load.go","lineNumber":809,"sourceCode":"// resolvedModels holds the result of resolving user-configured model\n// selections against the provider catalog.\ntype resolvedModels struct {\n\tLarge         SelectedModel\n\tSmall         SelectedModel\n\tLargeFallback bool // true if Large was corrected to a default\n\tSmallFallback bool // true if Small was corrected to a default\n}\n\n// resolveSelectedModels validates the user's configured model selections\n// against the provider catalog, falling back to defaults when a model ID is\n// invalid. It is pure resolution logic: it does not mutate the store or\n// touch disk. The caller assigns the results to c.Models and persists any\n// fallback corrections as appropriate.\nfunc resolveSelectedModels(cfg *Config, knownProviders []catwalk.Provider) (resolvedModels, error) {\n\tvar result resolvedModels\n\tdefaultLarge, defaultSmall, err := cfg.defaultModelSelection(knownProviders)\n\tif err != nil {\n\t\treturn result, fmt.Errorf(\"failed to select default models: %w\", err)\n\t}\n\tlarge, small := defaultLarge, defaultSmall\n\n\tlargeModelSelected, largeModelConfigured := cfg.Models[SelectedModelTypeLarge]\n\tif largeModelConfigured {\n\t\tif largeModelSelected.Model != \"\" {\n\t\t\tlarge.Model = largeModelSelected.Model\n\t\t}\n\t\tif largeModelSelected.Provider != \"\" {\n\t\t\tlarge.Provider = largeModelSelected.Provider\n\t\t}\n\t\tmodel := cfg.GetModel(large.Provider, large.Model)\n\t\tif model == nil {\n\t\t\tlarge = defaultLarge\n\t\t\tresult.LargeFallback = true\n\t\t} else {\n\t\t\tif largeModelSelected.MaxTokens > 0 {\n\t\t\t\tlarge.MaxTokens = largeModelSelected.MaxTokens","sourceCodeStart":791,"sourceCodeEnd":827,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/config/load.go#L791-L827","documentation":"resolveSelectedModels wraps any failure from cfg.defaultModelSelection with 'failed to select default models: %w'. It is the user-facing wrapper for errors 530-533 (missing default large/small model, no providers, or provider with no models) raised during Load or reloadFromDiskLocked.","triggerScenarios":"Load or reloadFromDiskLocked calls resolveSelectedModels and defaultModelSelection returns any error (unresolvable default model IDs, zero enabled providers, first provider has no models).","commonSituations":"Any of: no providers configured after fresh install; default model IDs stale after a provider catalog update; provider blocks missing models. The wrapped message appears in CLI startup failures.","solutions":["Read the wrapped cause after the colon to identify which of the underlying conditions fired","Fix the underlying cause (valid default model IDs, at least one enabled provider with models)","Validate your crush.json/crushrc before startup: providers enabled, default_model_large/default_model_small resolvable","Use crush models to confirm the model IDs you reference exist"],"exampleFix":"// before\n\"anthropic\": { \"default_model_large\": \"opus-x\" }\n// after\n\"anthropic\": { \"default_model_large\": \"claude-sonnet-4-20250514\", \"models\": [{ \"id\": \"claude-sonnet-4-20250514\" }] }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"models, err := config.Load(ctx, ...)\nif err != nil {\n  var selErr error\n  if strings.Contains(err.Error(), \"failed to select default models\") {\n    fmt.Fprintln(os.Stderr, \"model selection failed:\", errors.Unwrap(err))\n    os.Exit(1)\n  }\n  return err\n}","preventionTips":["Always inspect the %w-wrapped cause, not just the wrapper text","Validate providers and default model IDs at deploy time, not runtime","Pin default model IDs that exist in your frozen catalog snapshot"],"tags":["config","startup","error-wrapping"],"backgroundTag":"default-model-resolution-failed","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}