diff --git a/internal/config/config.go b/internal/config/config.go index b7717b273af3fe7497afe7e63775c19c19fcd5ec..a91350b5bc894161bc5fdbd44720c27b46fc1063 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -124,6 +124,36 @@ type ProviderConfig struct { Models []catwalk.Model `json:"models,omitempty" jsonschema:"description=List of models available from this provider"` } +// ToProvider converts the [ProviderConfig] to a [catwalk.Provider]. +func (pc *ProviderConfig) ToProvider() catwalk.Provider { + // Convert config provider to provider.Provider format + provider := catwalk.Provider{ + Name: pc.Name, + ID: catwalk.InferenceProvider(pc.ID), + Models: make([]catwalk.Model, len(pc.Models)), + } + + // Convert models + for i, model := range pc.Models { + provider.Models[i] = catwalk.Model{ + ID: model.ID, + Name: model.Name, + CostPer1MIn: model.CostPer1MIn, + CostPer1MOut: model.CostPer1MOut, + CostPer1MInCached: model.CostPer1MInCached, + CostPer1MOutCached: model.CostPer1MOutCached, + ContextWindow: model.ContextWindow, + DefaultMaxTokens: model.DefaultMaxTokens, + CanReason: model.CanReason, + ReasoningLevels: model.ReasoningLevels, + DefaultReasoningEffort: model.DefaultReasoningEffort, + SupportsImages: model.SupportsImages, + } + } + + return provider +} + func (pc *ProviderConfig) SetupClaudeCode() { pc.SystemPromptPrefix = "You are Claude Code, Anthropic's official CLI for Claude." pc.ExtraHeaders["anthropic-version"] = "2023-06-01" diff --git a/internal/tui/components/dialogs/models/list.go b/internal/tui/components/dialogs/models/list.go index 82bc2d4ab786492b10a056a2eb65e9d3ac61bd8f..9640b894d8e5bfb8659440f18f4cf04fb413bf02 100644 --- a/internal/tui/components/dialogs/models/list.go +++ b/internal/tui/components/dialogs/models/list.go @@ -148,29 +148,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd { if !slices.ContainsFunc(knownProviders, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) || !slices.ContainsFunc(m.providers, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) { // Convert config provider to provider.Provider format - configProvider := catwalk.Provider{ - Name: providerConfig.Name, - ID: catwalk.InferenceProvider(providerID), - Models: make([]catwalk.Model, len(providerConfig.Models)), - } - - // Convert models - for i, model := range providerConfig.Models { - configProvider.Models[i] = catwalk.Model{ - ID: model.ID, - Name: model.Name, - CostPer1MIn: model.CostPer1MIn, - CostPer1MOut: model.CostPer1MOut, - CostPer1MInCached: model.CostPer1MInCached, - CostPer1MOutCached: model.CostPer1MOutCached, - ContextWindow: model.ContextWindow, - DefaultMaxTokens: model.DefaultMaxTokens, - CanReason: model.CanReason, - ReasoningLevels: model.ReasoningLevels, - DefaultReasoningEffort: model.DefaultReasoningEffort, - SupportsImages: model.SupportsImages, - } - } + configProvider := providerConfig.ToProvider() // Add this unknown provider to the list name := configProvider.Name