chore: simplify model filtering

Kujtim Hoxha created

Change summary

internal/tui/components/chat/splash/splash.go    | 14 --------------
internal/tui/components/dialogs/models/list.go   | 16 ++++++++++++----
internal/tui/components/dialogs/models/models.go | 11 -----------
3 files changed, 12 insertions(+), 29 deletions(-)

Detailed changes

internal/tui/components/chat/splash/splash.go 🔗

@@ -100,20 +100,6 @@ func New() Splash {
 
 func (s *splashCmp) SetOnboarding(onboarding bool) {
 	s.isOnboarding = onboarding
-	if onboarding {
-		providers, err := config.Providers()
-		if err != nil {
-			return
-		}
-		filteredProviders := []catwalk.Provider{}
-
-		for _, p := range providers {
-			if strings.HasPrefix(p.APIKey, "$") && p.ID != catwalk.InferenceProviderAzure {
-				filteredProviders = append(filteredProviders, p)
-			}
-		}
-		s.modelList.SetProviders(filteredProviders)
-	}
 }
 
 func (s *splashCmp) SetProjectInit(needsInit bool) {

internal/tui/components/dialogs/models/list.go 🔗

@@ -3,10 +3,12 @@ package models
 import (
 	"fmt"
 	"slices"
+	"strings"
 
 	tea "github.com/charmbracelet/bubbletea/v2"
 	"github.com/charmbracelet/catwalk/pkg/catwalk"
 	"github.com/charmbracelet/crush/internal/config"
+	"github.com/charmbracelet/crush/internal/env"
 	"github.com/charmbracelet/crush/internal/tui/exp/list"
 	"github.com/charmbracelet/crush/internal/tui/styles"
 	"github.com/charmbracelet/crush/internal/tui/util"
@@ -49,6 +51,16 @@ func (m *ModelListComponent) Init() tea.Cmd {
 	var cmds []tea.Cmd
 	if len(m.providers) == 0 {
 		providers, err := config.Providers()
+		filteredProviders := []catwalk.Provider{}
+		for _, p := range providers {
+			hasApiKeyEnv := strings.HasPrefix(p.APIKey, "$")
+			resolver := config.NewEnvironmentVariableResolver(env.New())
+			endpoint, _ := resolver.ResolveValue(p.APIEndpoint)
+			if endpoint != "" && hasApiKeyEnv {
+				filteredProviders = append(filteredProviders, p)
+			}
+		}
+
 		m.providers = providers
 		if err != nil {
 			cmds = append(cmds, util.ReportError(err))
@@ -242,7 +254,3 @@ func (m *ModelListComponent) GetModelType() int {
 func (m *ModelListComponent) SetInputPlaceholder(placeholder string) {
 	m.list.SetInputPlaceholder(placeholder)
 }
-
-func (m *ModelListComponent) SetProviders(providers []catwalk.Provider) {
-	m.providers = providers
-}

internal/tui/components/dialogs/models/models.go 🔗

@@ -2,7 +2,6 @@ package models
 
 import (
 	"fmt"
-	"strings"
 	"time"
 
 	"github.com/charmbracelet/bubbles/v2/help"
@@ -96,16 +95,6 @@ func NewModelDialogCmp() ModelDialog {
 }
 
 func (m *modelDialogCmp) Init() tea.Cmd {
-	providers, err := config.Providers()
-	if err == nil {
-		filteredProviders := []catwalk.Provider{}
-		for _, p := range providers {
-			if strings.HasPrefix(p.APIKey, "$") && p.ID != catwalk.InferenceProviderAzure {
-				filteredProviders = append(filteredProviders, p)
-			}
-		}
-		m.modelList.SetProviders(filteredProviders)
-	}
 	return tea.Batch(m.modelList.Init(), m.apiKeyInput.Init())
 }