diff --git a/internal/config/init.go b/internal/config/init.go index 200359bff2bea913940cb78588c97733efb7a142..4c8176e40e8a012824f49e3558d7e47e52d1d3a2 100644 --- a/internal/config/init.go +++ b/internal/config/init.go @@ -103,3 +103,11 @@ func MarkProjectInitialized() error { return nil } + +func HasInitialDataConfig() bool { + cfgPath := globalConfigData() + if _, err := os.Stat(cfgPath); err != nil { + return false + } + return true +} diff --git a/internal/tui/components/chat/chat.go b/internal/tui/components/chat/chat.go index f10362f30bdfad64bb8d73d16819c1a9f1129f34..22b7ef812e1cc710a9f902487dc9c304c824ff2e 100644 --- a/internal/tui/components/chat/chat.go +++ b/internal/tui/components/chat/chat.go @@ -8,7 +8,6 @@ import ( tea "github.com/charmbracelet/bubbletea/v2" "github.com/charmbracelet/crush/internal/app" "github.com/charmbracelet/crush/internal/llm/agent" - "github.com/charmbracelet/crush/internal/logging" "github.com/charmbracelet/crush/internal/message" "github.com/charmbracelet/crush/internal/pubsub" "github.com/charmbracelet/crush/internal/session" @@ -81,7 +80,6 @@ func (m *messageListCmp) Init() tea.Cmd { // Update handles incoming messages and updates the component state. func (m *messageListCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - logging.Info("messageListCmp.Update", "msg", msg) switch msg := msg.(type) { case SessionSelectedMsg: if msg.ID != m.session.ID { @@ -380,7 +378,6 @@ func (m *messageListCmp) handleNewAssistantMessage(msg message.Message) tea.Cmd // SetSession loads and displays messages for a new session. func (m *messageListCmp) SetSession(session session.Session) tea.Cmd { - logging.Info("messageListCmp.SetSession", "sessionID", session.ID) if m.session.ID == session.ID { return nil } diff --git a/internal/tui/components/dialogs/models/list.go b/internal/tui/components/dialogs/models/list.go index e9da21de7725b6cb903f6d3ff7777e1b90e01a69..bb489c587e2e2d77256a4737083c0cbb58300618 100644 --- a/internal/tui/components/dialogs/models/list.go +++ b/internal/tui/components/dialogs/models/list.go @@ -61,34 +61,43 @@ func (m *ModelListComponent) SelectedIndex() int { func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { m.modelType = modelType - providers := config.Providers() + providers, err := config.Providers() + if err != nil { + return util.ReportError(err) + } + modelItems := []util.Model{} selectIndex := 0 cfg := config.Get() - var currentModel config.PreferredModel + var currentModel config.SelectedModel if m.modelType == LargeModelType { - currentModel = cfg.Models.Large + currentModel = cfg.Models[config.SelectedModelTypeLarge] } else { - currentModel = cfg.Models.Small + currentModel = cfg.Models[config.SelectedModelTypeSmall] } - addedProviders := make(map[provider.InferenceProvider]bool) + // Create a map to track which providers we've already added + addedProviders := make(map[string]bool) + // First, add any configured providers that are not in the known providers list + // These should appear at the top of the list knownProviders := provider.KnownProviders() for providerID, providerConfig := range cfg.Providers { - if providerConfig.Disabled { + if providerConfig.Disable { continue } // Check if this provider is not in the known providers list - if !slices.Contains(knownProviders, providerID) { + if !slices.Contains(knownProviders, provider.InferenceProvider(providerID)) { + // Convert config provider to provider.Provider format configProvider := provider.Provider{ - Name: string(providerID), - ID: providerID, + Name: string(providerID), // Use provider ID as name for unknown providers + ID: provider.InferenceProvider(providerID), Models: make([]provider.Model, len(providerConfig.Models)), } + // Convert models for i, model := range providerConfig.Models { configProvider.Models[i] = provider.Model{ ID: model.ID, @@ -101,11 +110,12 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { DefaultMaxTokens: model.DefaultMaxTokens, CanReason: model.CanReason, HasReasoningEffort: model.HasReasoningEffort, - DefaultReasoningEffort: model.ReasoningEffort, + DefaultReasoningEffort: model.DefaultReasoningEffort, SupportsImages: model.SupportsImages, } } + // Add this unknown provider to the list name := configProvider.Name if name == "" { name = string(configProvider.ID) @@ -116,20 +126,23 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { Provider: configProvider, Model: model, })) - if model.ID == currentModel.ModelID && configProvider.ID == currentModel.Provider { - selectIndex = len(modelItems) - 1 + if model.ID == currentModel.Model && string(configProvider.ID) == currentModel.Provider { + selectIndex = len(modelItems) - 1 // Set the selected index to the current model } } addedProviders[providerID] = true } } + // Then add the known providers from the predefined list for _, provider := range providers { - if addedProviders[provider.ID] { + // Skip if we already added this provider as an unknown provider + if addedProviders[string(provider.ID)] { continue } - if providerConfig, exists := cfg.Providers[provider.ID]; exists && providerConfig.Disabled { + // Check if this provider is configured and not disabled + if providerConfig, exists := cfg.Providers[string(provider.ID)]; exists && providerConfig.Disable { continue } @@ -143,8 +156,8 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { Provider: provider, Model: model, })) - if model.ID == currentModel.ModelID && provider.ID == currentModel.Provider { - selectIndex = len(modelItems) - 1 + if model.ID == currentModel.Model && string(provider.ID) == currentModel.Provider { + selectIndex = len(modelItems) - 1 // Set the selected index to the current model } } } @@ -156,4 +169,3 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { func (m *ModelListComponent) GetModelType() int { return m.modelType } - diff --git a/internal/tui/components/dialogs/models/models.go b/internal/tui/components/dialogs/models/models.go index cab864ef1dafd67fe2b5f6933e480f37fdb19498..a88086131476f8843a607b726675b86c9242ed03 100644 --- a/internal/tui/components/dialogs/models/models.go +++ b/internal/tui/components/dialogs/models/models.go @@ -105,7 +105,7 @@ func (m *modelDialogCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var modelType config.SelectedModelType if m.modelList.GetModelType() == LargeModelType { - modelType = config.LargeModel + modelType = config.SelectedModelTypeLarge } else { modelType = config.SelectedModelTypeSmall }