Browse Source

error handling

Roy Han 8 months ago
parent
commit
a5181a8c51
3 changed files with 9 additions and 7 deletions
  1. 2 1
      api/types.go
  2. 6 6
      server/routes.go
  3. 1 0
      server/sched.go

+ 2 - 1
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.

+ 6 - 6
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
 }
 

+ 1 - 0
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