on main help sign in
fix: avoid startup crash if unable to find default models (#3066)
ffaeec1Andrey Nering
internal/config/load.go+10−4
@@ -545,8 +545,11 @@ func (c *Config) defaultModelSelection(knownProviders []catwalk.Provider) (large
545 }
545 }
546 defaultLargeModel := c.GetModel(string(p.ID), p.DefaultLargeModelID)
546 defaultLargeModel := c.GetModel(string(p.ID), p.DefaultLargeModelID)
547 if defaultLargeModel == nil {
547 if defaultLargeModel == nil {
548+ slog.Warn("Default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
549+ if len(providerConfig.Models) == 0 {
548− err = fmt.Errorf("default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
550+ return largeModel, smallModel, fmt.Errorf("default large model %s not found for provider %s", p.DefaultLargeModelID, p.ID)
549− return largeModel, smallModel, err
551+ }
552+ defaultLargeModel = &providerConfig.Models[0]
550 }
553 }
551 largeModel = SelectedModel{
554 largeModel = SelectedModel{
552 Provider: string(p.ID),
555 Provider: string(p.ID),
@@ -557,8 +560,11 @@ func (c *Config) defaultModelSelection(knownProviders []catwalk.Provider) (large
557
560
558 defaultSmallModel := c.GetModel(string(p.ID), p.DefaultSmallModelID)
561 defaultSmallModel := c.GetModel(string(p.ID), p.DefaultSmallModelID)
559 if defaultSmallModel == nil {
562 if defaultSmallModel == nil {
563+ slog.Warn("Default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
564+ if len(providerConfig.Models) == 0 {
560− err = fmt.Errorf("default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
565+ return largeModel, smallModel, fmt.Errorf("default small model %s not found for provider %s", p.DefaultSmallModelID, p.ID)
561− return largeModel, smallModel, err
566+ }
567+ defaultSmallModel = &providerConfig.Models[0]
562 }
568 }
563 smallModel = SelectedModel{
569 smallModel = SelectedModel{
564 Provider: string(p.ID),
570 Provider: string(p.ID),
internal/config/load_test.go+2−2
@@ -1148,7 +1148,7 @@ func TestConfig_defaultModelSelection(t *testing.T) {
1148 _, _, err = cfg.defaultModelSelection(knownProviders)
1148 _, _, err = cfg.defaultModelSelection(knownProviders)
1149 require.Error(t, err)
1149 require.Error(t, err)
1150 })
1150 })
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) {
1152 knownProviders := []catwalk.Provider{
1152 knownProviders := []catwalk.Provider{
1153 {
1153 {
1154 ID: "openai",
1154 ID: "openai",
@@ -1175,7 +1175,7 @@ func TestConfig_defaultModelSelection(t *testing.T) {
1175 err := cfg.configureProviders(testStore(cfg), env, resolver, knownProviders)
1175 err := cfg.configureProviders(testStore(cfg), env, resolver, knownProviders)
1176 require.NoError(t, err)
1176 require.NoError(t, err)
1177 _, _, err = cfg.defaultModelSelection(knownProviders)
1177 _, _, err = cfg.defaultModelSelection(knownProviders)
1178− require.Error(t, err)
1178+ require.NoError(t, err)
1179 })
1179 })
1180
1180
1181 t.Run("should configure the default models with a custom provider", func(t *testing.T) {
1181 t.Run("should configure the default models with a custom provider", func(t *testing.T) {