main
py 61 lines 1.63 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 from http import HTTPStatus
5
6 from fastapi import APIRouter, Depends, Request
7
8 from vllm.entrypoints.serve.engine.protocol import ErrorResponse
9 from vllm.entrypoints.serve.utils.api_utils import (
10 load_aware_call,
11 validate_json_request,
12 with_cancellation,
13 )
14
15 from .protocol import CohereEmbedRequest, EmbeddingRequest
16 from .serving import ServingEmbedding
17
18 router = APIRouter()
19
20
21 def embedding(request: Request) -> ServingEmbedding:
22 handler = getattr(request.app.state, "serving_embedding", None)
23 if handler is None:
24 raise NotImplementedError("The model does not support Embeddings API")
25 return handler
26
27
28 @router.post(
29 "/v1/embeddings",
30 dependencies=[Depends(validate_json_request)],
31 responses={
32 HTTPStatus.BAD_REQUEST.value: {"model": ErrorResponse},
33 HTTPStatus.INTERNAL_SERVER_ERROR.value: {"model": ErrorResponse},
34 },
35 )
36 @with_cancellation
37 @load_aware_call
38 async def create_embedding(
39 request: EmbeddingRequest,
40 raw_request: Request,
41 ):
42 handler = embedding(raw_request)
43 return await handler(request, raw_request)
44
45
46 @router.post(
47 "/v2/embed",
48 dependencies=[Depends(validate_json_request)],
49 responses={
50 HTTPStatus.BAD_REQUEST.value: {"model": ErrorResponse},
51 HTTPStatus.INTERNAL_SERVER_ERROR.value: {"model": ErrorResponse},
52 },
53 )
54 @with_cancellation
55 @load_aware_call
56 async def create_cohere_embedding(
57 request: CohereEmbedRequest,
58 raw_request: Request,
59 ):
60 handler = embedding(raw_request)
61 return await handler(request, raw_request)