60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
|
|
import asyncio
|
|
import functools
|
|
from typing import Annotated, Literal
|
|
|
|
import pydantic
|
|
from fastapi import APIRouter, Query, Request
|
|
from fastapi.responses import JSONResponse
|
|
|
|
import vllm.envs as envs
|
|
from vllm.collect_env import get_env_info
|
|
from vllm.config import VllmConfig
|
|
from vllm.logger import init_logger
|
|
|
|
logger = init_logger(__name__)
|
|
|
|
|
|
router = APIRouter()
|
|
PydanticVllmConfig = pydantic.TypeAdapter(VllmConfig)
|
|
|
|
|
|
def _get_vllm_env_vars():
|
|
from vllm.config.utils import normalize_value
|
|
|
|
vllm_envs = {}
|
|
for key in dir(envs):
|
|
if key.startswith("VLLM_") and "KEY" not in key:
|
|
value = getattr(envs, key, None)
|
|
if value is not None:
|
|
value = normalize_value(value)
|
|
vllm_envs[key] = value
|
|
return vllm_envs
|
|
|
|
|
|
@functools.lru_cache(maxsize=1)
|
|
def _get_system_env_info_cached():
|
|
return get_env_info()._asdict()
|
|
|
|
|
|
@router.get("/server_info")
|
|
async def show_server_info(
|
|
raw_request: Request,
|
|
config_format: Annotated[Literal["text", "json"], Query()] = "text",
|
|
):
|
|
vllm_config: VllmConfig = raw_request.app.state.vllm_config
|
|
server_info = {
|
|
"vllm_config": (
|
|
str(vllm_config)
|
|
if config_format == "text"
|
|
else PydanticVllmConfig.dump_python(vllm_config, mode="json", fallback=str)
|
|
),
|
|
# fallback=str is needed to handle e.g. torch.dtype
|
|
"vllm_env": _get_vllm_env_vars(),
|
|
"system_env": await asyncio.to_thread(_get_system_env_info_cached),
|
|
}
|
|
return JSONResponse(content=server_info)
|