Add panic recovery and request size limit

This commit is contained in:
2026-03-05 06:32:26 +00:00
parent df6b677a15
commit 214e63b0c5
9 changed files with 754 additions and 13 deletions

View File

@@ -69,7 +69,14 @@ func (s *GatewayServer) handleModels(w http.ResponseWriter, r *http.Request) {
}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(resp)
if err := json.NewEncoder(w).Encode(resp); err != nil {
s.logger.ErrorContext(r.Context(), "failed to encode models response",
logger.LogAttrsWithTrace(r.Context(),
slog.String("request_id", logger.FromContext(r.Context())),
slog.String("error", err.Error()),
)...,
)
}
}
func (s *GatewayServer) handleResponses(w http.ResponseWriter, r *http.Request) {
@@ -80,6 +87,11 @@ func (s *GatewayServer) handleResponses(w http.ResponseWriter, r *http.Request)
var req api.ResponseRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
// Check if error is due to request size limit
if err.Error() == "http: request body too large" {
http.Error(w, "request body too large", http.StatusRequestEntityTooLarge)
return
}
http.Error(w, "invalid JSON payload", http.StatusBadRequest)
return
}
@@ -202,7 +214,15 @@ func (s *GatewayServer) handleSyncResponse(w http.ResponseWriter, r *http.Reques
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_ = json.NewEncoder(w).Encode(resp)
if err := json.NewEncoder(w).Encode(resp); err != nil {
s.logger.ErrorContext(r.Context(), "failed to encode response",
logger.LogAttrsWithTrace(r.Context(),
slog.String("request_id", logger.FromContext(r.Context())),
slog.String("response_id", responseID),
slog.String("error", err.Error()),
)...,
)
}
}
func (s *GatewayServer) handleStreamingResponse(w http.ResponseWriter, r *http.Request, provider providers.Provider, providerMsgs []api.Message, resolvedReq *api.ResponseRequest, origReq *api.ResponseRequest, storeMsgs []api.Message) {