@@ -4,7 +4,6 @@ import (
44 "cmp"
55 "fmt"
66 "slices"
7− "strings"
87
98 "charm.land/bubbles/v2/help"
109 "charm.land/bubbles/v2/key"
@@ -15,6 +14,7 @@ import (
1514 "github.com/charmbracelet/crush/internal/ui/common"
1615 "github.com/charmbracelet/crush/internal/ui/util"
1716 uv "github.com/charmbracelet/ultraviolet"
17+ xslice "github.com/charmbracelet/x/exp/slice"
1818)
1919
2020// ModelType represents the type of model to select.
@@ -143,12 +143,14 @@ func NewModels(com *common.Common, isOnboarding bool) (*Models, error) {
143143 )
144144 m.keyMap.Close = CloseKey
145145
146− providers, err := getFilteredProviders(com.Config())
147− if err != nil {
148− return nil, fmt.Errorf("failed to get providers: %w", err)
149− }
150−
151− m.providers = providers
146+ m.providers = slices.Collect(
147+ xslice.Map(
148+ com.Config().Providers.Seq(),
149+ func(pc config.ProviderConfig) catwalk.Provider {
150+ return pc.ToProvider()
151+ },
152+ ),
153+ )
152154 if err := m.setProviderItems(); err != nil {
153155 return nil, fmt.Errorf("failed to set provider items: %w", err)
154156 }
@@ -521,27 +523,6 @@ func (m *Models) setProviderItems() error {
521523 return nil
522524}
523525
524−func getFilteredProviders(cfg *config.Config) ([]catwalk.Provider, error) {
525− providers, err := config.Providers(cfg)
526− if err != nil {
527− return nil, fmt.Errorf("failed to get providers: %w", err)
528− }
529− var filteredProviders []catwalk.Provider
530− for _, p := range providers {
531− var (
532− isAzure = p.ID == catwalk.InferenceProviderAzure
533− isCopilot = p.ID == catwalk.InferenceProviderCopilot
534− isHyper = string(p.ID) == "hyper"
535− hasAPIKeyEnv = strings.HasPrefix(p.APIKey, "$")
536− _, isConfigured = cfg.Providers.Get(string(p.ID))
537− )
538− if isAzure || isCopilot || isHyper || hasAPIKeyEnv || isConfigured {
539− filteredProviders = append(filteredProviders, p)
540− }
541− }
542− return filteredProviders, nil
543−}
544−
545526func modelKey(providerID, modelID string) string {
546527 if providerID == "" || modelID == "" {
547528 return ""