on main help sign in
fix: avoid startup crash if unable to find default models (#3066)

This can happen on edge cases when a models was removed from a provider on Catwalk on Hyper. Use the first model in the list instead crashing. This is not critical to justify preventing Crush to start.

commitffaeec192ff121408b9a115b14e3be9965ca138e authorAndrey Nering <andreynering@users.noreply.github.com> dateTue 2 Jun 2026, 15:00 (4 months ago) parent154a323
2 files changed+12−6
internal/config/load.go+10−4 internal/config/load_test.go+2−2
internal/config/load.go+10−4
@@ -545,8 +545,11 @@ func (c *Config) defaultModelSelection(knownProviders []catwalk.Provider) (large
545545 }
546546 defaultLargeModel := c.GetModel(string(p.ID), p.DefaultLargeModelID)
547547 if defaultLargeModel == nil {
548− err = fmt.Errorf("default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
549− return largeModel, smallModel, err
548+ slog.Warn("Default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
549+ if len(providerConfig.Models) == 0 {
550+ return largeModel, smallModel, fmt.Errorf("default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
551+ }
552+ defaultLargeModel = &providerConfig.Models[0]
550553 }
551554 largeModel = SelectedModel{
552555 Provider: string(p.ID),
@@ -557,8 +560,11 @@ func (c *Config) defaultModelSelection(knownProviders []catwalk.Provider) (large
557560
558561 defaultSmallModel := c.GetModel(string(p.ID), p.DefaultSmallModelID)
559562 if defaultSmallModel == nil {
560− err = fmt.Errorf("default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
561− return largeModel, smallModel, err
563+ slog.Warn("Default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
564+ if len(providerConfig.Models) == 0 {
565+ return largeModel, smallModel, fmt.Errorf("default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
566+ }
567+ defaultSmallModel = &providerConfig.Models[0]
562568 }
563569 smallModel = SelectedModel{
564570 Provider: string(p.ID),
internal/config/load_test.go+2−2
@@ -1148,7 +1148,7 @@ func TestConfig_defaultModelSelection(t *testing.T) {
11481148 _, _, err = cfg.defaultModelSelection(knownProviders)
11491149 require.Error(t, err)
11501150 })
1151− t.Run("should error if model is missing", func(t *testing.T) {
1151+ t.Run("should not error if model is missing", func(t *testing.T) {
11521152 knownProviders := []catwalk.Provider{
11531153 {
11541154 ID: "openai",
@@ -1175,7 +1175,7 @@ func TestConfig_defaultModelSelection(t *testing.T) {
11751175 err := cfg.configureProviders(testStore(cfg), env, resolver, knownProviders)
11761176 require.NoError(t, err)
11771177 _, _, err = cfg.defaultModelSelection(knownProviders)
1178− require.Error(t, err)
1178+ require.NoError(t, err)
11791179 })
11801180
11811181 t.Run("should configure the default models with a custom provider", func(t *testing.T) {