{"record":{"id":"cff826899982c448","repo":"charmbracelet/crush","slug":"default-small-model-s-not-found-for-provider-s","errorCode":null,"errorMessage":"default small model %s not found for provider %s","messagePattern":"default small model (.+?) not found for provider (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/load.go","lineNumber":748,"sourceCode":"\t\tif defaultLargeModel == nil {\n\t\t\tslog.Warn(\"Default large model %s not found for provider %s\", p.DefaultLargeModelID, p.ID)\n\t\t\tif len(providerConfig.Models) == 0 {\n\t\t\t\treturn largeModel, smallModel, fmt.Errorf(\"default large model %s not found for provider %s\", p.DefaultLargeModelID, p.ID)\n\t\t\t}\n\t\t\tdefaultLargeModel = &providerConfig.Models[0]\n\t\t}\n\t\tlargeModel = SelectedModel{\n\t\t\tProvider:        string(p.ID),\n\t\t\tModel:           defaultLargeModel.ID,\n\t\t\tMaxTokens:       defaultLargeModel.DefaultMaxTokens,\n\t\t\tReasoningEffort: defaultLargeModel.DefaultReasoningEffort,\n\t\t}\n\n\t\tdefaultSmallModel := c.GetModel(string(p.ID), p.DefaultSmallModelID)\n\t\tif defaultSmallModel == nil {\n\t\t\tslog.Warn(\"Default small model %s not found for provider %s\", p.DefaultSmallModelID, p.ID)\n\t\t\tif len(providerConfig.Models) == 0 {\n\t\t\t\treturn largeModel, smallModel, fmt.Errorf(\"default small model %s not found for provider %s\", p.DefaultSmallModelID, p.ID)\n\t\t\t}\n\t\t\tdefaultSmallModel = &providerConfig.Models[0]\n\t\t}\n\t\tsmallModel = SelectedModel{\n\t\t\tProvider:        string(p.ID),\n\t\t\tModel:           defaultSmallModel.ID,\n\t\t\tMaxTokens:       defaultSmallModel.DefaultMaxTokens,\n\t\t\tReasoningEffort: defaultSmallModel.DefaultReasoningEffort,\n\t\t}\n\t\treturn largeModel, smallModel, err\n\t}\n\n\tenabledProviders := c.EnabledProviders()\n\tslices.SortFunc(enabledProviders, func(a, b ProviderConfig) int {\n\t\treturn strings.Compare(a.ID, b.ID)\n\t})\n\n\tif len(enabledProviders) == 0 {","sourceCodeStart":730,"sourceCodeEnd":766,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/config/load.go#L730-L766","documentation":"Same fallback path as the large model, but for the small/utility model: defaultModelSelection calls c.GetModel(providerID, p.DefaultSmallModelID) and throws when the small default model ID cannot be resolved for that provider. It is fatal only when the provider has zero models configured to fall back to; otherwise the first configured model is silently used.","triggerScenarios":"Load/reloadFromDiskLocked runs and a provider's DefaultSmallModelID does not match any model in providerConfig.Models or the catwalk catalog, making GetModel return nil.","commonSituations":"Typo or stale default small model ID after a provider deprecated a model; copy-pasting a model ID from another provider; custom providers in crushrc whose models list omits the referenced default.","solutions":["Correct default_model_small in the provider config to a valid model ID for that provider","List the provider's models (crush models) and pick an existing ID","Add the referenced model to the provider's models list so the fallback resolves","Refresh the provider catalog to pick up renamed model IDs"],"exampleFix":"// before\n\"provider\": { \"id\": \"openai\", \"default_model_small\": \"gpt-4o-mn\" }\n// after\n\"provider\": { \"id\": \"openai\", \"default_model_small\": \"gpt-4o-mini\" }","handlingStrategy":"validation","validationCode":"if cfg.GetModel(providerID, p.DefaultSmallModelID) == nil {\n  return fmt.Errorf(\"provider %s: unknown default small model %q\", providerID, p.DefaultSmallModelID)\n}","typeGuard":null,"tryCatchPattern":"if err := cfg.Validate(); err != nil {\n  if strings.Contains(err.Error(), \"default small model\") {\n    // correct default_model_small before starting agents\n  }\n}","preventionTips":["Define the small model explicitly in the provider's models list","Re-verify default_model_small after provider deprecations","Use short utility models that providers keep stable across versions"],"tags":["config","model-resolution","startup"],"backgroundTag":"model-not-found","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}