|
6 | 6 |
|
7 | 7 | "github.com/AlecAivazis/survey/v2" |
8 | 8 | "github.com/m7medvision/lazycommit/internal/config" |
| 9 | + "github.com/m7medvision/lazycommit/internal/provider/models" |
9 | 10 | "github.com/spf13/cobra" |
10 | 11 | ) |
11 | 12 |
|
@@ -47,7 +48,7 @@ func runInteractiveConfig() { |
47 | 48 |
|
48 | 49 | providerPrompt := &survey.Select{ |
49 | 50 | Message: "Choose a provider:", |
50 | | - Options: []string{"openai", "copilot"}, |
| 51 | + Options: []string{"openai", "openrouter", "copilot"}, |
51 | 52 | Default: currentProvider, |
52 | 53 | } |
53 | 54 | var selectedProvider string |
@@ -87,34 +88,69 @@ func runInteractiveConfig() { |
87 | 88 | } |
88 | 89 | } |
89 | 90 |
|
| 91 | + // Dynamically generate available models for OpenAI |
90 | 92 | 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 | + } |
93 | 111 | } |
94 | 112 |
|
95 | 113 | modelPrompt := &survey.Select{ |
96 | 114 | Message: "Choose a model:", |
97 | 115 | Options: availableModels[selectedProvider], |
98 | 116 | } |
99 | 117 |
|
| 118 | + // Try to set the default to the current model if possible |
100 | 119 | 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 | + } |
105 | 136 | } |
106 | 137 | } |
107 | 138 | if isValidDefault { |
108 | | - modelPrompt.Default = currentModel |
| 139 | + modelPrompt.Default = currentDisplay |
109 | 140 | } |
110 | 141 |
|
111 | | - var selectedModel string |
112 | | - err = survey.AskOne(modelPrompt, &selectedModel) |
| 142 | + var selectedDisplay string |
| 143 | + err = survey.AskOne(modelPrompt, &selectedDisplay) |
113 | 144 | if err != nil { |
114 | 145 | fmt.Println(err.Error()) |
115 | 146 | return |
116 | 147 | } |
117 | 148 |
|
| 149 | + selectedModel := selectedDisplay |
| 150 | + if selectedProvider == "openai" || selectedProvider == "openrouter" { |
| 151 | + selectedModel = modelDisplayToID[selectedDisplay] |
| 152 | + } |
| 153 | + |
118 | 154 | if selectedModel != currentModel { |
119 | 155 | err := config.SetModel(selectedModel) |
120 | 156 | if err != nil { |
|
0 commit comments