main
py 94 lines 2.74 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 from argparse import Namespace
4 from typing import TYPE_CHECKING
5
6 from fastapi import FastAPI
7
8 from vllm.engine.protocol import EngineClient
9 from vllm.logger import init_logger
10 from vllm.tasks import SupportedTask
11
12 if TYPE_CHECKING:
13 from starlette.datastructures import State
14
15 from vllm.entrypoints.serve.utils.request_logger import RequestLogger
16 else:
17 RequestLogger = object
18
19 logger = init_logger(__name__)
20
21
22 def init_render_state(
23 state: "State",
24 request_logger: RequestLogger | None,
25 ):
26 from .derender.serving import ServingDerender
27 from .render.serving import ServingRender
28
29 state.serving_render = ServingRender(
30 state.openai_serving_models,
31 state.online_renderer,
32 request_logger=request_logger,
33 tool_server=state.tool_server,
34 )
35
36 state.serving_derender = ServingDerender(
37 state.openai_serving_models,
38 state.online_derenderer,
39 request_logger=request_logger,
40 )
41
42
43 def init_scale_out_state(
44 state: "State",
45 args: "Namespace",
46 engine_client: "EngineClient",
47 request_logger: RequestLogger | None,
48 ):
49 init_render_state(state, request_logger)
50
51 from vllm.entrypoints.scale_out.token_in_token_out.serving import ServingTokens
52
53 state.serving_tokens = ServingTokens(
54 engine_client,
55 state.openai_serving_models,
56 state.online_renderer,
57 request_logger=request_logger,
58 return_tokens_as_token_ids=args.return_tokens_as_token_ids,
59 enable_prompt_tokens_details=args.enable_prompt_tokens_details,
60 enable_log_outputs=args.enable_log_outputs,
61 force_no_detokenize=args.tokens_only,
62 )
63
64
65 def register_scale_out_api_routers(
66 app: FastAPI,
67 supported_tasks: tuple["SupportedTask", ...],
68 ):
69 args = getattr(app.state, "args", None)
70 # `vllm launch render` and `vllm serve --tokens-only` are dedicated to
71 # serving these endpoints, so they always register them regardless of
72 # `--enable-scale-out`.
73 dedicated_mode = "render" in supported_tasks or getattr(args, "tokens_only", False)
74 enabled = dedicated_mode or getattr(args, "enable_scale_out", False)
75 if not enabled:
76 logger.info(
77 "Scale-out endpoints are disabled. Set --enable-scale-out to enable them."
78 )
79 return
80
81 from .render.api_router import router as render_render
82
83 app.include_router(render_render)
84
85 from .derender.api_router import router as derender_render
86
87 app.include_router(derender_render)
88
89 if "generate" in supported_tasks:
90 from .token_in_token_out.api_router import (
91 attach_router as attach_disagg_router,
92 )
93
94 attach_disagg_router(app)