diff --git a/api/types.go b/api/types.go index f67a8847..38343828 100644 --- a/api/types.go +++ b/api/types.go @@ -457,7 +457,8 @@ type GenerateResponse struct { } type WhisperCompletion struct { - Text string `json:"text"` + Text string `json:"text"` + Error string `json:"error,omitempty"` } // ModelDetails provides details about a model. diff --git a/server/routes.go b/server/routes.go index 7c50b41c..e28722a3 100644 --- a/server/routes.go +++ b/server/routes.go @@ -112,7 +112,7 @@ func (s *Server) scheduleRunner(ctx context.Context, name string, caps []Capabil func (s *Server) runWhisperServer(c *gin.Context, portCh chan int, modelPath string) { s.sched.whisperMu.Lock() if s.sched.whisperLoaded[modelPath] != nil { - slog.Info("whisper server already running %s on port %d", modelPath, *s.sched.whisperLoaded[modelPath]) + slog.Info(fmt.Sprintf("whisper server already running %s on port %d", modelPath, *s.sched.whisperLoaded[modelPath])) portCh <- *s.sched.whisperLoaded[modelPath] s.sched.whisperMu.Unlock() return @@ -239,17 +239,17 @@ func whisperInference(c *gin.Context, filePath string, port int) (*api.WhisperCo return nil, err } - if res.StatusCode >= 400 { - slog.Error("error response from whisper server", "status", res.Status, "body", string(body)) - c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "error response from whisper server"}) - } - var w api.WhisperCompletion if err := json.Unmarshal(body, &w); err != nil { c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "failed to unmarshal response"}) return nil, err } + if w.Error != "" { + c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": w.Error}) + return nil, fmt.Errorf(w.Error) + } + return &w, nil } diff --git a/server/sched.go b/server/sched.go index b660315b..15fcd6b8 100644 --- a/server/sched.go +++ b/server/sched.go @@ -75,6 +75,7 @@ func InitScheduler(ctx context.Context) *Scheduler { getGpuFn: gpu.GetGPUInfo, getCpuFn: gpu.GetCPUInfo, reschedDelay: 250 * time.Millisecond, + whisperLoaded: make(map[string]*int), } sched.loadFn = sched.load return sched