diff --git a/backend/internal/handler/gateway_handler.go b/backend/internal/handler/gateway_handler.go index fc92b2d8..a2f833ff 100644 --- a/backend/internal/handler/gateway_handler.go +++ b/backend/internal/handler/gateway_handler.go @@ -88,6 +88,12 @@ func (h *GatewayHandler) Messages(c *gin.Context) { reqModel := parsedReq.Model reqStream := parsedReq.Stream + // 验证 model 必填 + if reqModel == "" { + h.errorResponse(c, http.StatusBadRequest, "invalid_request_error", "model is required") + return + } + // Track if we've started streaming (for error handling) streamStarted := false @@ -517,6 +523,12 @@ func (h *GatewayHandler) CountTokens(c *gin.Context) { return } + // 验证 model 必填 + if parsedReq.Model == "" { + h.errorResponse(c, http.StatusBadRequest, "invalid_request_error", "model is required") + return + } + // 获取订阅信息(可能为nil) subscription, _ := middleware2.GetSubscriptionFromContext(c) diff --git a/backend/internal/handler/openai_gateway_handler.go b/backend/internal/handler/openai_gateway_handler.go index 7fcb329d..7c9934c6 100644 --- a/backend/internal/handler/openai_gateway_handler.go +++ b/backend/internal/handler/openai_gateway_handler.go @@ -80,6 +80,12 @@ func (h *OpenAIGatewayHandler) Responses(c *gin.Context) { reqModel, _ := reqBody["model"].(string) reqStream, _ := reqBody["stream"].(bool) + // 验证 model 必填 + if reqModel == "" { + h.errorResponse(c, http.StatusBadRequest, "invalid_request_error", "model is required") + return + } + // For non-Codex CLI requests, set default instructions userAgent := c.GetHeader("User-Agent") if !openai.IsCodexCLIRequest(userAgent) {