{"record":{"id":"bd136ee6b19c4e7b","repo":"charmbracelet/crush","slug":"failed-to-configure-selected-models-w","errorCode":null,"errorMessage":"failed to configure selected models: %w","messagePattern":"failed to configure selected models: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/load.go","lineNumber":144,"sourceCode":"\tstore.writeMu.Lock()\n\tdefer store.writeMu.Unlock()\n\n\t// Apply top-level env vars before configuring providers so variables\n\t// like AWS_PROFILE are visible to the AWS SDK credential chain.\n\tcfg.applyEnv(valueResolver)\n\n\tif err := cfg.configureProviders(context.Background(), store, env, valueResolver, store.knownProviders); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to configure providers: %w\", err)\n\t}\n\n\tif !cfg.IsConfigured() {\n\t\tslog.Warn(\"No providers configured\")\n\t\treturn store, nil\n\t}\n\n\tresolved, err := resolveSelectedModels(cfg, store.knownProviders)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to configure selected models: %w\", err)\n\t}\n\tcfg.Models[SelectedModelTypeLarge] = resolved.Large\n\tcfg.Models[SelectedModelTypeSmall] = resolved.Small\n\n\t// Persist any fallback corrections while we still hold writeMu.\n\tif resolved.LargeFallback {\n\t\tif err := store.updateLocked(ScopeGlobal, func(c *Config) map[string]any {\n\t\t\treturn store.updatePreferredModelFields(c, SelectedModelTypeLarge, resolved.Large)\n\t\t}); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to update preferred large model: %w\", err)\n\t\t}\n\t}\n\tif resolved.SmallFallback {\n\t\tif err := store.updateLocked(ScopeGlobal, func(c *Config) map[string]any {\n\t\t\treturn store.updatePreferredModelFields(c, SelectedModelTypeSmall, resolved.Small)\n\t\t}); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to update preferred small model: %w\", err)\n\t\t}","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/config/load.go#L126-L162","documentation":"After providers are configured, Load() calls resolveSelectedModels to pick the user's selected large/small models (validating them against known providers). Any failure resolving those selections is wrapped with this message.","triggerScenarios":"resolveSelectedModels returns an error — typically because c.Providers is empty and no known providers exist (from defaultModelSelection), or the configured selected model references an unknown provider/model.","commonSituations":"Config names a preferred model from a provider that no longer exists or was removed from the catwalk catalog; providers section emptied while preferred models still reference it; typo'd model ID in options.preferred_model.","solutions":["Read the wrapped error to see whether it's 'no providers configured' or an unknown model/provider reference","Configure at least one provider, or re-enable default providers if disabled","Remove or correct the preferred large/small model entries in crush.json so they match a configured provider","Update crush / refresh the provider catalog if the model was renamed upstream"],"exampleFix":"// before (crush.json)\n\"options\": {\"preferred_model\": {\"large\": \"claude-opus-4-20250514\"}}\n// after\n\"options\": {\"preferred_model\": {\"large\": \"anthropic/claude-sonnet-4-20250514\"}}","handlingStrategy":"try-catch","validationCode":"if cfg.Providers.Len() == 0 && len(knownProviders) == 0 {\n    return errors.New(\"configure at least one provider before selecting models\")\n}\n// also verify preferred model IDs reference an existing provider","typeGuard":null,"tryCatchPattern":"store, err := config.Load(ctx, opts)\nif err != nil {\n    if strings.Contains(err.Error(), \"failed to configure selected models:\") {\n        return fmt.Errorf(\"reselect models via `crush models`: %w\", err)\n    }\n    return err\n}","preventionTips":["Use model IDs exactly as listed by `crush models`","After removing a provider, clear its preferred model entries","Keep preferred_model in sync with the configured providers section","Refresh the provider catalog regularly so IDs stay valid"],"tags":["config","models","providers"],"backgroundTag":"model-resolution-failed","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}