@@ -4,7 +4,6 @@ import (
9 "charm.land/bubbles/v2/help"
8 "charm.land/bubbles/v2/help"
10 "charm.land/bubbles/v2/key"
9 "charm.land/bubbles/v2/key"
@@ -15,6 +14,7 @@ import (
15 "github.com/charmbracelet/crush/internal/ui/common"
14 "github.com/charmbracelet/crush/internal/ui/common"
16 "github.com/charmbracelet/crush/internal/ui/util"
15 "github.com/charmbracelet/crush/internal/ui/util"
17 uv "github.com/charmbracelet/ultraviolet"
16 uv "github.com/charmbracelet/ultraviolet"
17+ xslice "github.com/charmbracelet/x/exp/slice"
20// ModelType represents the type of model to select.
20// ModelType represents the type of model to select.
@@ -143,12 +143,14 @@ func NewModels(com *common.Common, isOnboarding bool) (*Models, error) {
144 m.keyMap.Close = CloseKey
144 m.keyMap.Close = CloseKey
146− providers, err := getFilteredProviders(com.Config())
146+ m.providers = slices.Collect(
147− if err != nil {
147+ xslice.Map(
148− return nil, fmt.Errorf("failed to get providers: %w", err)
148+ com.Config().Providers.Seq(),
149+ func(pc config.ProviderConfig) catwalk.Provider {
150+ return pc.ToProvider()
151− m.providers = providers
153+ )
152 if err := m.setProviderItems(); err != nil {
154 if err := m.setProviderItems(); err != nil {
153 return nil, fmt.Errorf("failed to set provider items: %w", err)
155 return nil, fmt.Errorf("failed to set provider items: %w", err)
@@ -521,27 +523,6 @@ func (m *Models) setProviderItems() error {
521 return nil
523 return nil
524−func getFilteredProviders(cfg *config.Config) ([]catwalk.Provider, error) {
525− providers, err := config.Providers(cfg)
527− return nil, fmt.Errorf("failed to get providers: %w", err)
529− var filteredProviders []catwalk.Provider
530− for _, p := range providers {
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))
538− if isAzure || isCopilot || isHyper || hasAPIKeyEnv || isConfigured {
539− filteredProviders = append(filteredProviders, p)
542− return filteredProviders, nil
545func modelKey(providerID, modelID string) string {
526func modelKey(providerID, modelID string) string {
546 if providerID == "" || modelID == "" {
527 if providerID == "" || modelID == "" {
547 return ""
528 return ""