Files
vllm-omni/vllm_omni/distributed/omni_connectors/utils/env.py
T
2026-05-20 14:51:33 +08:00

48 lines
1.5 KiB
Python

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import os
import re
from typing import Any
AUTO_HOST_VALUES = {"", "auto", "*", "0.0.0.0", "::"}
AUTO_DEVICE_VALUES = {"", "auto"}
_UNEXPANDED_ENV_VAR_PATTERN = re.compile(r"\$\{([^}]+)\}|\$([A-Za-z_][A-Za-z0-9_]*)|%([^%]+)%")
class EnvVarExpansionError(ValueError):
pass
def _unexpanded_env_vars(value: str) -> list[str]:
names: list[str] = []
for match in _UNEXPANDED_ENV_VAR_PATTERN.finditer(value):
name = next(group for group in match.groups() if group)
if name not in names:
names.append(name)
return names
def expand_env_value(value: Any, *, strict: bool = False, field_name: str = "value") -> Any:
if not isinstance(value, str):
return value
expanded = os.path.expandvars(value)
if strict:
unresolved = _unexpanded_env_vars(expanded)
if unresolved:
names = ", ".join(unresolved)
raise EnvVarExpansionError(
f"{field_name} references unset environment variable(s): {names}. Original value: {value!r}"
)
return expanded
def expand_env_int(value: Any, field_name: str) -> int:
expanded = expand_env_value(value, strict=True, field_name=field_name)
try:
return int(expanded)
except (TypeError, ValueError) as exc:
raise ValueError(f"{field_name} must be an integer after environment expansion, got {expanded!r}") from exc