@@ -61,34 +61,43 @@ func (m *ModelListComponent) SelectedIndex() int {
61func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
61func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
62 m.modelType = modelType
62 m.modelType = modelType
64− providers := config.Providers()
64+ providers, err := config.Providers()
66+ return util.ReportError(err)
65 modelItems := []util.Model{}
69 modelItems := []util.Model{}
66 selectIndex := 0
70 selectIndex := 0
68 cfg := config.Get()
72 cfg := config.Get()
69− var currentModel config.PreferredModel
73+ var currentModel config.SelectedModel
70 if m.modelType == LargeModelType {
74 if m.modelType == LargeModelType {
71− currentModel = cfg.Models.Large
75+ currentModel = cfg.Models[config.SelectedModelTypeLarge]
73− currentModel = cfg.Models.Small
77+ currentModel = cfg.Models[config.SelectedModelTypeSmall]
80+ // Create a map to track which providers we've already added
76− addedProviders := make(map[provider.InferenceProvider]bool)
81+ addedProviders := make(map[string]bool)
83+ // First, add any configured providers that are not in the known providers list
84+ // These should appear at the top of the list
78 knownProviders := provider.KnownProviders()
85 knownProviders := provider.KnownProviders()
79 for providerID, providerConfig := range cfg.Providers {
86 for providerID, providerConfig := range cfg.Providers {
80− if providerConfig.Disabled {
87+ if providerConfig.Disable {
84 // Check if this provider is not in the known providers list
91 // Check if this provider is not in the known providers list
85− if !slices.Contains(knownProviders, providerID) {
92+ if !slices.Contains(knownProviders, provider.InferenceProvider(providerID)) {
93+ // Convert config provider to provider.Provider format
86 configProvider := provider.Provider{
94 configProvider := provider.Provider{
87− Name: string(providerID),
95+ Name: string(providerID), // Use provider ID as name for unknown providers
88− ID: providerID,
96+ ID: provider.InferenceProvider(providerID),
89 Models: make([]provider.Model, len(providerConfig.Models)),
97 Models: make([]provider.Model, len(providerConfig.Models)),
92 for i, model := range providerConfig.Models {
101 for i, model := range providerConfig.Models {
93 configProvider.Models[i] = provider.Model{
102 configProvider.Models[i] = provider.Model{
94 ID: model.ID,
103 ID: model.ID,
@@ -101,11 +110,12 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
101 DefaultMaxTokens: model.DefaultMaxTokens,
110 DefaultMaxTokens: model.DefaultMaxTokens,
102 CanReason: model.CanReason,
111 CanReason: model.CanReason,
103 HasReasoningEffort: model.HasReasoningEffort,
112 HasReasoningEffort: model.HasReasoningEffort,
104− DefaultReasoningEffort: model.ReasoningEffort,
113+ DefaultReasoningEffort: model.DefaultReasoningEffort,
105 SupportsImages: model.SupportsImages,
114 SupportsImages: model.SupportsImages,
118+ // Add this unknown provider to the list
109 name := configProvider.Name
119 name := configProvider.Name
110 if name == "" {
120 if name == "" {
111 name = string(configProvider.ID)
121 name = string(configProvider.ID)
@@ -116,20 +126,23 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
116 Provider: configProvider,
126 Provider: configProvider,
117 Model: model,
127 Model: model,
119− if model.ID == currentModel.ModelID && configProvider.ID == currentModel.Provider {
129+ if model.ID == currentModel.Model && string(configProvider.ID) == currentModel.Provider {
120− selectIndex = len(modelItems) - 1
130+ selectIndex = len(modelItems) - 1 // Set the selected index to the current model
123 addedProviders[providerID] = true
133 addedProviders[providerID] = true
137+ // Then add the known providers from the predefined list
127 for _, provider := range providers {
138 for _, provider := range providers {
139+ // Skip if we already added this provider as an unknown provider
128− if addedProviders[provider.ID] {
140+ if addedProviders[string(provider.ID)] {
144+ // Check if this provider is configured and not disabled
132− if providerConfig, exists := cfg.Providers[provider.ID]; exists && providerConfig.Disabled {
145+ if providerConfig, exists := cfg.Providers[string(provider.ID)]; exists && providerConfig.Disable {
@@ -143,8 +156,8 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
143 Provider: provider,
156 Provider: provider,
144 Model: model,
157 Model: model,
146− if model.ID == currentModel.ModelID && provider.ID == currentModel.Provider {
159+ if model.ID == currentModel.Model && string(provider.ID) == currentModel.Provider {
147− selectIndex = len(modelItems) - 1
160+ selectIndex = len(modelItems) - 1 // Set the selected index to the current model
@@ -156,4 +169,3 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
156func (m *ModelListComponent) GetModelType() int {
169func (m *ModelListComponent) GetModelType() int {
157 return m.modelType
170 return m.modelType