Skip to content

Commit 2588009

Browse files
committed
refactor(models): restructure models in internal/provider/models/models.go for better readability
1 parent 401d4b2 commit 2588009

2 files changed

Lines changed: 523 additions & 13 deletions

File tree

cmd/config.go

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/AlecAivazis/survey/v2"
88
"github.com/m7medvision/lazycommit/internal/config"
9+
"github.com/m7medvision/lazycommit/internal/provider/models"
910
"github.com/spf13/cobra"
1011
)
1112

@@ -47,7 +48,7 @@ func runInteractiveConfig() {
4748

4849
providerPrompt := &survey.Select{
4950
Message: "Choose a provider:",
50-
Options: []string{"openai", "copilot"},
51+
Options: []string{"openai", "openrouter", "copilot"},
5152
Default: currentProvider,
5253
}
5354
var selectedProvider string
@@ -87,34 +88,69 @@ func runInteractiveConfig() {
8788
}
8889
}
8990

91+
// Dynamically generate available models for OpenAI
9092
availableModels := map[string][]string{
91-
"openai": {"gpt-4", "gpt-3.5-turbo", "gpt-4o"},
92-
"copilot": {"gpt-4o"},
93+
"openai": {},
94+
"openrouter": {},
95+
"copilot": {"gpt-4o"}, // TODO: update if copilot models are dynamic
96+
}
97+
98+
modelDisplayToID := map[string]string{}
99+
if selectedProvider == "openai" {
100+
for id, m := range models.OpenAIModels {
101+
display := fmt.Sprintf("%s (%s)", m.Name, string(id))
102+
availableModels["openai"] = append(availableModels["openai"], display)
103+
modelDisplayToID[display] = string(id)
104+
}
105+
} else if selectedProvider == "openrouter" {
106+
for id, m := range models.OpenRouterModels {
107+
display := fmt.Sprintf("%s (%s)", m.Name, string(id))
108+
availableModels["openrouter"] = append(availableModels["openrouter"], display)
109+
modelDisplayToID[display] = string(id)
110+
}
93111
}
94112

95113
modelPrompt := &survey.Select{
96114
Message: "Choose a model:",
97115
Options: availableModels[selectedProvider],
98116
}
99117

118+
// Try to set the default to the current model if possible
100119
isValidDefault := false
101-
for _, model := range availableModels[selectedProvider] {
102-
if model == currentModel {
103-
isValidDefault = true
104-
break
120+
currentDisplay := ""
121+
if selectedProvider == "openai" || selectedProvider == "openrouter" {
122+
for display, id := range modelDisplayToID {
123+
if id == currentModel || display == currentModel {
124+
isValidDefault = true
125+
currentDisplay = display
126+
break
127+
}
128+
}
129+
} else {
130+
for _, model := range availableModels[selectedProvider] {
131+
if model == currentModel {
132+
isValidDefault = true
133+
currentDisplay = model
134+
break
135+
}
105136
}
106137
}
107138
if isValidDefault {
108-
modelPrompt.Default = currentModel
139+
modelPrompt.Default = currentDisplay
109140
}
110141

111-
var selectedModel string
112-
err = survey.AskOne(modelPrompt, &selectedModel)
142+
var selectedDisplay string
143+
err = survey.AskOne(modelPrompt, &selectedDisplay)
113144
if err != nil {
114145
fmt.Println(err.Error())
115146
return
116147
}
117148

149+
selectedModel := selectedDisplay
150+
if selectedProvider == "openai" || selectedProvider == "openrouter" {
151+
selectedModel = modelDisplayToID[selectedDisplay]
152+
}
153+
118154
if selectedModel != currentModel {
119155
err := config.SetModel(selectedModel)
120156
if err != nil {

0 commit comments

Comments
 (0)