@@ -3,10 +3,12 @@ package models
33import (
44 "fmt"
55 "slices"
6+ "strings"
67
78 tea "github.com/charmbracelet/bubbletea/v2"
89 "github.com/charmbracelet/catwalk/pkg/catwalk"
910 "github.com/charmbracelet/crush/internal/config"
11+ "github.com/charmbracelet/crush/internal/env"
1012 "github.com/charmbracelet/crush/internal/tui/exp/list"
1113 "github.com/charmbracelet/crush/internal/tui/styles"
1214 "github.com/charmbracelet/crush/internal/tui/util"
@@ -49,6 +51,16 @@ func (m *ModelListComponent) Init() tea.Cmd {
4951 var cmds []tea.Cmd
5052 if len(m.providers) == 0 {
5153 providers, err := config.Providers()
54+ filteredProviders := []catwalk.Provider{}
55+ for _, p := range providers {
56+ hasApiKeyEnv := strings.HasPrefix(p.APIKey, "$")
57+ resolver := config.NewEnvironmentVariableResolver(env.New())
58+ endpoint, _ := resolver.ResolveValue(p.APIEndpoint)
59+ if endpoint != "" && hasApiKeyEnv {
60+ filteredProviders = append(filteredProviders, p)
61+ }
62+ }
63+
5264 m.providers = providers
5365 if err != nil {
5466 cmds = append(cmds, util.ReportError(err))
@@ -242,7 +254,3 @@ func (m *ModelListComponent) GetModelType() int {
242254func (m *ModelListComponent) SetInputPlaceholder(placeholder string) {
243255 m.list.SetInputPlaceholder(placeholder)
244256}
245−
246−func (m *ModelListComponent) SetProviders(providers []catwalk.Provider) {
247− m.providers = providers
248−}