main
py 110 lines 4.6 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 from argparse import Namespace
4
5 from starlette.datastructures import State
6
7 from vllm.config import VllmConfig
8 from vllm.entrypoints.chat_utils import load_chat_template
9 from vllm.entrypoints.launchers.cli_args import resolve_default_chat_template_kwargs
10 from vllm.entrypoints.mcp.tool_server import init_tool_server
11 from vllm.entrypoints.openai.models.protocol import BaseModelPath
12 from vllm.entrypoints.openai.models.serving import OpenAIModelRegistry
13 from vllm.entrypoints.scale_out.factories import init_render_state
14 from vllm.entrypoints.serve.tokenize.serving import ServingTokenization
15 from vllm.entrypoints.serve.utils.request_logger import RequestLogger
16 from vllm.plugins.endpoint_plugins.interface import init_endpoint_plugins_state
17 from vllm.renderers import renderer_from_config
18 from vllm.renderers.online_derenderer import OnlineDerenderer
19 from vllm.renderers.online_renderer import OnlineRenderer
20
21
22 async def init_render_app_state(
23 vllm_config: VllmConfig,
24 state: State,
25 args: Namespace,
26 ) -> None:
27 """Initialise FastAPI app state for a CPU-only render server.
28
29 Unlike :func:`init_app_state` this function does not require an
30 :class:`~vllm.engine.protocol.EngineClient`; it bootstraps the
31 preprocessing pipeline (renderer, input_processor)
32 directly from the :class:`~vllm.config.VllmConfig`.
33 """
34 served_model_names = args.served_model_name or [args.model]
35 model_registry = OpenAIModelRegistry(
36 model_config=vllm_config.model_config,
37 base_model_paths=[
38 BaseModelPath(name=name, model_path=args.model)
39 for name in served_model_names
40 ],
41 )
42
43 if args.enable_log_requests:
44 request_logger = RequestLogger(max_log_len=args.max_log_len)
45 else:
46 request_logger = None
47
48 renderer = renderer_from_config(vllm_config)
49 resolved_chat_template = load_chat_template(args.chat_template)
50 default_chat_template_kwargs = resolve_default_chat_template_kwargs(args)
51 state.tool_server = await init_tool_server(args)
52
53 state.online_renderer = OnlineRenderer(
54 model_config=vllm_config.model_config,
55 renderer=renderer,
56 request_logger=request_logger,
57 chat_template=resolved_chat_template,
58 chat_template_content_format=args.chat_template_content_format,
59 trust_request_chat_template=args.trust_request_chat_template,
60 trust_request_mm_kwargs=args.trust_request_mm_kwargs,
61 enable_auto_tools=args.enable_auto_tool_choice,
62 exclude_tools_when_tool_choice_none=args.exclude_tools_when_tool_choice_none,
63 tool_parser=args.tool_call_parser,
64 tool_strict_level=args.tool_strict_level,
65 reasoning_parser=args.reasoning_parser,
66 default_chat_template_kwargs=default_chat_template_kwargs,
67 log_error_stack=args.log_error_stack,
68 )
69 state.online_renderer.warmup()
70
71 state.online_derenderer = OnlineDerenderer(
72 model_config=vllm_config.model_config,
73 renderer=renderer,
74 request_logger=request_logger,
75 chat_template=resolved_chat_template,
76 chat_template_content_format=args.chat_template_content_format,
77 trust_request_chat_template=args.trust_request_chat_template,
78 enable_auto_tools=args.enable_auto_tool_choice,
79 exclude_tools_when_tool_choice_none=args.exclude_tools_when_tool_choice_none,
80 tool_parser=args.tool_call_parser,
81 tool_strict_level=args.tool_strict_level,
82 reasoning_parser=args.reasoning_parser,
83 default_chat_template_kwargs=default_chat_template_kwargs,
84 log_error_stack=args.log_error_stack,
85 )
86
87 state.openai_serving_models = model_registry
88 state.serving_tokenization = ServingTokenization(
89 model_registry,
90 state.online_renderer,
91 request_logger=request_logger,
92 chat_template=resolved_chat_template,
93 chat_template_content_format=args.chat_template_content_format,
94 default_chat_template_kwargs=default_chat_template_kwargs,
95 trust_request_chat_template=args.trust_request_chat_template,
96 )
97
98 init_render_state(state, request_logger)
99
100 state.vllm_config = vllm_config
101 # Disable stats logging — there is no engine to poll.
102 state.log_stats = False
103 state.engine_client = None
104 state.args = args
105 state.enable_server_load_tracking = False
106 state.server_load_metrics = 0
107
108 # No `EngineClient` exists for the render server, so plugins get `None` and
109 # must handle it themselves (see `EndpointPlugin.init_state`).
110 await init_endpoint_plugins_state(None, state, args)