@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / b95697d731
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 14, 05:30 UTC

[Frontend] improve error logging of chat completion (#22957)

Signed-off-by: Chen Zhang <zhangch99@outlook.com>

Chen Zhang committed Aug 20, 2025 at 13:03 UTC b95697d7310637399998ebf1f21a26b523aa6611
1 file changed +57 -17
vllm/entrypoints/openai/api_server.py
+57 -17
@@ -600,8 +600,11 @@ async def create_responses(request: ResponsesRequest, raw_request: Request):
600 if handler is None:
601 return base(raw_request).create_error_response(
602 message="The model does not support Responses API")
603 -
604 - generator = await handler.create_responses(request, raw_request)
603 + try:
604 + generator = await handler.create_responses(request, raw_request)
605 + except Exception as e:
606 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
607 + detail=str(e)) from e
608
609 if isinstance(generator, ErrorResponse):
610 return JSONResponse(content=generator.model_dump(),
@@ -618,7 +621,11 @@ async def retrieve_responses(response_id: str, raw_request: Request):
621 return base(raw_request).create_error_response(
622 message="The model does not support Responses API")
623
621 - response = await handler.retrieve_responses(response_id)
624 + try:
625 + response = await handler.retrieve_responses(response_id)
626 + except Exception as e:
627 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
628 + detail=str(e)) from e
629
630 if isinstance(response, ErrorResponse):
631 return JSONResponse(content=response.model_dump(),
@@ -633,7 +640,11 @@ async def cancel_responses(response_id: str, raw_request: Request):
640 return base(raw_request).create_error_response(
641 message="The model does not support Responses API")
642
636 - response = await handler.cancel_responses(response_id)
643 + try:
644 + response = await handler.cancel_responses(response_id)
645 + except Exception as e:
646 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
647 + detail=str(e)) from e
648
649 if isinstance(response, ErrorResponse):
650 return JSONResponse(content=response.model_dump(),
@@ -667,9 +678,11 @@ async def create_chat_completion(request: ChatCompletionRequest,
678 if handler is None:
679 return base(raw_request).create_error_response(
680 message="The model does not support Chat Completions API")
670 -
671 - generator = await handler.create_chat_completion(request, raw_request)
672 -
681 + try:
682 + generator = await handler.create_chat_completion(request, raw_request)
683 + except Exception as e:
684 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
685 + detail=str(e)) from e
686 if isinstance(generator, ErrorResponse):
687 return JSONResponse(content=generator.model_dump(),
688 status_code=generator.error.code)
@@ -742,7 +755,11 @@ async def create_embedding(request: EmbeddingRequest, raw_request: Request):
755 return base(raw_request).create_error_response(
756 message="The model does not support Embeddings API")
757
745 - generator = await handler.create_embedding(request, raw_request)
758 + try:
759 + generator = await handler.create_embedding(request, raw_request)
760 + except Exception as e:
761 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
762 + detail=str(e)) from e
763
764 if isinstance(generator, ErrorResponse):
765 return JSONResponse(content=generator.model_dump(),
@@ -770,8 +787,11 @@ async def create_pooling(request: PoolingRequest, raw_request: Request):
787 if handler is None:
788 return base(raw_request).create_error_response(
789 message="The model does not support Pooling API")
773 -
774 - generator = await handler.create_pooling(request, raw_request)
790 + try:
791 + generator = await handler.create_pooling(request, raw_request)
792 + except Exception as e:
793 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
794 + detail=str(e)) from e
795 if isinstance(generator, ErrorResponse):
796 return JSONResponse(content=generator.model_dump(),
797 status_code=generator.error.code)
@@ -791,7 +811,11 @@ async def create_classify(request: ClassificationRequest,
811 return base(raw_request).create_error_response(
812 message="The model does not support Classification API")
813
794 - generator = await handler.create_classify(request, raw_request)
814 + try:
815 + generator = await handler.create_classify(request, raw_request)
816 + except Exception as e:
817 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
818 + detail=str(e)) from e
819 if isinstance(generator, ErrorResponse):
820 return JSONResponse(content=generator.model_dump(),
821 status_code=generator.error.code)
@@ -820,7 +844,11 @@ async def create_score(request: ScoreRequest, raw_request: Request):
844 return base(raw_request).create_error_response(
845 message="The model does not support Score API")
846
823 - generator = await handler.create_score(request, raw_request)
847 + try:
848 + generator = await handler.create_score(request, raw_request)
849 + except Exception as e:
850 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
851 + detail=str(e)) from e
852 if isinstance(generator, ErrorResponse):
853 return JSONResponse(content=generator.model_dump(),
854 status_code=generator.error.code)
@@ -878,8 +906,12 @@ async def create_transcriptions(raw_request: Request,
906 message="The model does not support Transcriptions API")
907
908 audio_data = await request.file.read()
881 - generator = await handler.create_transcription(audio_data, request,
882 - raw_request)
909 + try:
910 + generator = await handler.create_transcription(audio_data, request,
911 + raw_request)
912 + except Exception as e:
913 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
914 + detail=str(e)) from e
915
916 if isinstance(generator, ErrorResponse):
917 return JSONResponse(content=generator.model_dump(),
@@ -919,8 +951,12 @@ async def create_translations(request: Annotated[TranslationRequest,
951 message="The model does not support Translations API")
952
953 audio_data = await request.file.read()
922 - generator = await handler.create_translation(audio_data, request,
923 - raw_request)
954 + try:
955 + generator = await handler.create_translation(audio_data, request,
956 + raw_request)
957 + except Exception as e:
958 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
959 + detail=str(e)) from e
960
961 if isinstance(generator, ErrorResponse):
962 return JSONResponse(content=generator.model_dump(),
@@ -949,7 +985,11 @@ async def do_rerank(request: RerankRequest, raw_request: Request):
985 if handler is None:
986 return base(raw_request).create_error_response(
987 message="The model does not support Rerank (Score) API")
952 - generator = await handler.do_rerank(request, raw_request)
988 + try:
989 + generator = await handler.do_rerank(request, raw_request)
990 + except Exception as e:
991 + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR.value,
992 + detail=str(e)) from e
993 if isinstance(generator, ErrorResponse):
994 return JSONResponse(content=generator.model_dump(),
995 status_code=generator.error.code)