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)