main
py 61 lines 1.88 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 from http import HTTPStatus
4
5 from fastapi import APIRouter, Depends, FastAPI, Request
6 from fastapi.responses import JSONResponse
7
8 from vllm.entrypoints.generate.generative_scoring.serving import (
9 GenerativeScoringRequest,
10 GenerativeScoringResponse,
11 ServingGenerativeScoring,
12 )
13 from vllm.entrypoints.serve.engine.protocol import ErrorResponse
14 from vllm.entrypoints.serve.utils.api_utils import (
15 load_aware_call,
16 validate_json_request,
17 with_cancellation,
18 )
19 from vllm.logger import init_logger
20
21 router = APIRouter()
22
23 logger = init_logger(__name__)
24
25
26 def generative_scoring(request: Request) -> ServingGenerativeScoring | None:
27 return request.app.state.serving_generative_scoring
28
29
30 @router.post(
31 "/generative_scoring",
32 dependencies=[Depends(validate_json_request)],
33 responses={
34 HTTPStatus.BAD_REQUEST.value: {"model": ErrorResponse},
35 HTTPStatus.NOT_FOUND.value: {"model": ErrorResponse},
36 HTTPStatus.INTERNAL_SERVER_ERROR.value: {"model": ErrorResponse},
37 },
38 )
39 @with_cancellation
40 @load_aware_call
41 async def create_generative_scoring(
42 request: GenerativeScoringRequest, raw_request: Request
43 ):
44 handler = generative_scoring(raw_request)
45 if handler is None:
46 raise NotImplementedError(
47 "The model does not support the Generative Scoring API"
48 )
49
50 result = await handler.create_generative_scoring(request, raw_request)
51
52 if isinstance(result, ErrorResponse):
53 return JSONResponse(content=result.model_dump(), status_code=result.error.code)
54 elif isinstance(result, GenerativeScoringResponse):
55 return JSONResponse(content=result.model_dump())
56
57 raise ValueError(f"Unexpected response type: {type(result)}")
58
59
60 def register_generative_scoring_api_router(app: FastAPI):
61 app.include_router(router)