on main help sign in
refactor(config): add ToProvider method to ProviderConfig
3c22cb8Ayman Bagabas
internal/config/config.go+30
@@ -124,6 +124,36 @@ type ProviderConfig struct {
124 Models []catwalk.Model `json:"models,omitempty" jsonschema:"description=List of models available from this provider"`
124 Models []catwalk.Model `json:"models,omitempty" jsonschema:"description=List of models available from this provider"`
125}
125}
126
126
127+// ToProvider converts the [ProviderConfig] to a [catwalk.Provider].
128+func (pc *ProviderConfig) ToProvider() catwalk.Provider {
129+ // Convert config provider to provider.Provider format
130+ provider := catwalk.Provider{
131+ Name: pc.Name,
132+ ID: catwalk.InferenceProvider(pc.ID),
133+ Models: make([]catwalk.Model, len(pc.Models)),
134+ }
135+
136+ // Convert models
137+ for i, model := range pc.Models {
138+ provider.Models[i] = catwalk.Model{
139+ ID: model.ID,
140+ Name: model.Name,
141+ CostPer1MIn: model.CostPer1MIn,
142+ CostPer1MOut: model.CostPer1MOut,
143+ CostPer1MInCached: model.CostPer1MInCached,
144+ CostPer1MOutCached: model.CostPer1MOutCached,
145+ ContextWindow: model.ContextWindow,
146+ DefaultMaxTokens: model.DefaultMaxTokens,
147+ CanReason: model.CanReason,
148+ ReasoningLevels: model.ReasoningLevels,
149+ DefaultReasoningEffort: model.DefaultReasoningEffort,
150+ SupportsImages: model.SupportsImages,
151+ }
152+ }
153+
154+ return provider
155+}
156+
127func (pc *ProviderConfig) SetupClaudeCode() {
157func (pc *ProviderConfig) SetupClaudeCode() {
128 pc.SystemPromptPrefix = "You are Claude Code, Anthropic's official CLI for Claude."
158 pc.SystemPromptPrefix = "You are Claude Code, Anthropic's official CLI for Claude."
129 pc.ExtraHeaders["anthropic-version"] = "2023-06-01"
159 pc.ExtraHeaders["anthropic-version"] = "2023-06-01"
internal/tui/components/dialogs/models/list.go+1−23
@@ -148,29 +148,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
148 if !slices.ContainsFunc(knownProviders, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) ||
148 if !slices.ContainsFunc(knownProviders, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) ||
149 !slices.ContainsFunc(m.providers, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) {
149 !slices.ContainsFunc(m.providers, func(p catwalk.Provider) bool { return p.ID == catwalk.InferenceProvider(providerID) }) {
150 // Convert config provider to provider.Provider format
150 // Convert config provider to provider.Provider format
151− configProvider := catwalk.Provider{
152− Name: providerConfig.Name,
151+ configProvider := providerConfig.ToProvider()
153− ID: catwalk.InferenceProvider(providerID),
154− Models: make([]catwalk.Model, len(providerConfig.Models)),
155− }
156−
157− // Convert models
158− for i, model := range providerConfig.Models {
159− configProvider.Models[i] = catwalk.Model{
160− ID: model.ID,
161− Name: model.Name,
162− CostPer1MIn: model.CostPer1MIn,
163− CostPer1MOut: model.CostPer1MOut,
164− CostPer1MInCached: model.CostPer1MInCached,
165− CostPer1MOutCached: model.CostPer1MOutCached,
166− ContextWindow: model.ContextWindow,
167− DefaultMaxTokens: model.DefaultMaxTokens,
168− CanReason: model.CanReason,
169− ReasoningLevels: model.ReasoningLevels,
170− DefaultReasoningEffort: model.DefaultReasoningEffort,
171− SupportsImages: model.SupportsImages,
172− }
173− }
174
152
175 // Add this unknown provider to the list
153 // Add this unknown provider to the list
176 name := configProvider.Name
154 name := configProvider.Name