From 6bcfa9a0923958ccdd0ab06a2ae9a820c29d7061 Mon Sep 17 00:00:00 2001 From: sufubao Date: Tue, 7 Apr 2026 05:00:47 +0000 Subject: [PATCH] fix error response format to match OpenAI API standard Wrap error responses in {"error": {"message", "type", "param", "code"}} envelope to align with vLLM and OpenAI SDK expectations. --- lightllm/server/api_http.py | 17 +++++++++++++++-- lightllm/server/api_openai.py | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lightllm/server/api_http.py b/lightllm/server/api_http.py index 50d992bf9..efab14a2f 100755 --- a/lightllm/server/api_http.py +++ b/lightllm/server/api_http.py @@ -117,9 +117,22 @@ def set_args(self, args: StartArgs): g_objs.app = app -def create_error_response(status_code: HTTPStatus, message: str) -> JSONResponse: +def create_error_response( + status_code: HTTPStatus, message: str, err_type: str = None, param: str = None +) -> JSONResponse: + if err_type is None: + if status_code.value >= 500: + err_type = "InternalServerError" + elif status_code == HTTPStatus.NOT_FOUND: + err_type = "NotFoundError" + else: + err_type = "BadRequestError" + g_objs.metric_client.counter_inc("lightllm_request_failure") - return JSONResponse({"message": message}, status_code=status_code.value) + return JSONResponse( + {"error": {"message": message, "type": err_type, "param": param, "code": status_code.value}}, + status_code=status_code.value, + ) @app.get("/liveness") diff --git a/lightllm/server/api_openai.py b/lightllm/server/api_openai.py index 1a17691a9..3dd2a2e49 100644 --- a/lightllm/server/api_openai.py +++ b/lightllm/server/api_openai.py @@ -58,11 +58,24 @@ logger = init_logger(__name__) -def create_error_response(status_code: HTTPStatus, message: str) -> JSONResponse: +def create_error_response( + status_code: HTTPStatus, message: str, err_type: str = None, param: str = None +) -> JSONResponse: from .api_http import g_objs + if err_type is None: + if status_code.value >= 500: + err_type = "InternalServerError" + elif status_code == HTTPStatus.NOT_FOUND: + err_type = "NotFoundError" + else: + err_type = "BadRequestError" + g_objs.metric_client.counter_inc("lightllm_request_failure") - return JSONResponse({"message": message}, status_code=status_code.value) + return JSONResponse( + {"error": {"message": message, "type": err_type, "param": param, "code": status_code.value}}, + status_code=status_code.value, + ) def _process_tool_call_id(