Skip to content

Commit c2179ca

Browse files
authored
Fix spice chat error handling (spiceai#5433)
* Fix spice chat error handling * fix: lint
1 parent e627e47 commit c2179ca

2 files changed

Lines changed: 39 additions & 24 deletions

File tree

bin/spice/cmd/chat.go

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -174,30 +174,40 @@ spice chat --model <model> --cloud
174174
rtcontext.RequireModelsFlavor(cmd)
175175
}
176176

177+
httpEndpoint, err := cmd.Flags().GetString("http-endpoint")
178+
if err != nil {
179+
slog.Error("could not get http-endpoint flag", "error", err)
180+
os.Exit(1)
181+
}
182+
if httpEndpoint != "" {
183+
rtcontext.SetHttpEndpoint(httpEndpoint)
184+
}
185+
177186
model, err := cmd.Flags().GetString(modelKeyFlag)
178187
if err != nil {
179188
slog.Error("could not get model flag", "error", err)
180189
os.Exit(1)
181190
}
182-
if model == "" {
183-
models, err := api.GetDataSingle[api.ModelResponse](rtcontext, "/v1/models?status=true")
184-
if err != nil {
185-
slog.Error("could not list models", "error", err)
186-
os.Exit(1)
187-
}
188191

189-
if len(models.Data) == 0 {
190-
slog.Error("No models found")
191-
os.Exit(1)
192-
}
192+
models, err := api.GetDataSingle[api.ModelResponse](rtcontext, "/v1/models?status=true")
193+
if err != nil {
194+
slog.Error("could not list models", "error", err)
195+
os.Exit(1)
196+
}
193197

194-
availableModels := []string{}
195-
for _, model := range models.Data {
196-
if model.Status == "Ready" {
197-
availableModels = append(availableModels, model.Id)
198-
}
198+
if len(models.Data) == 0 {
199+
slog.Error("No models found")
200+
os.Exit(1)
201+
}
202+
203+
availableModels := []string{}
204+
for _, model := range models.Data {
205+
if model.Status == "Ready" {
206+
availableModels = append(availableModels, model.Id)
199207
}
208+
}
200209

210+
if model == "" {
201211
if len(availableModels) == 0 {
202212
slog.Error("No models are ready")
203213
os.Exit(1)
@@ -221,15 +231,20 @@ spice chat --model <model> --cloud
221231

222232
cmd.Printf("Using model: %s\n", selectedModel)
223233
model = selectedModel
224-
}
234+
} else {
235+
modelIsAvailable := false
236+
for _, availableModel := range availableModels {
237+
if availableModel == model {
238+
modelIsAvailable = true
239+
break
240+
}
241+
}
225242

226-
httpEndpoint, err := cmd.Flags().GetString("http-endpoint")
227-
if err != nil {
228-
slog.Error("could not get http-endpoint flag", "error", err)
229-
os.Exit(1)
230-
}
231-
if httpEndpoint != "" {
232-
rtcontext.SetHttpEndpoint(httpEndpoint)
243+
if !modelIsAvailable {
244+
slog.Error("Requested model is not available", "model", model)
245+
slog.Info("Available models", "models", strings.Join(availableModels, ", "))
246+
os.Exit(1)
247+
}
233248
}
234249

235250
var messages = []Message{}

bin/spice/pkg/api/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func doRuntimeApiRequest[T interface{}](rtcontext *context.RuntimeContext, metho
8484
}()
8585

8686
if resp.StatusCode == http.StatusUnauthorized {
87-
return *new(T), fmt.Errorf("Unauthorized")
87+
return *new(T), fmt.Errorf("unauthorized: invalid or missing Spice API key")
8888
}
8989

9090
if resp.StatusCode == http.StatusNotFound {

0 commit comments

Comments
 (0)