From b11c91722cf0e2aa600eccddc84985bb6b25028c Mon Sep 17 00:00:00 2001 From: Tim Pietrusky Date: Fri, 19 Jun 2026 19:02:49 +0200 Subject: [PATCH] test: complete vllm stub so src.utils imports under py<3.14 src.utils uses ErrorResponse (a vllm import) as a module-level return annotation, evaluated eagerly on python <3.14. the vllm stub lacked it, so collection failed with NameError on ci (py3.11) while passing locally (py3.14, lazy annotations). add the missing vllm.utils / protocol / SamplingParams symbols to the stub. --- tests/conftest.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index d0d56f4..9c6bef0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -56,9 +56,33 @@ def _install_vllm_stub(): max_parallel_loading_workers: Optional[int] = None kv_cache_dtype: Optional[str] = None + class _Stub: # pragma: no cover - placeholder for vllm symbols + def __init__(self, *args, **kwargs): + pass + vllm.AsyncEngineArgs = AsyncEngineArgs + vllm.SamplingParams = _Stub sys.modules["vllm"] = vllm + # src.utils imports these at module load and uses ErrorResponse as a return + # annotation, which Python evaluates eagerly on <3.14 -> must be defined. + vllm_utils = types.ModuleType("vllm.utils") + vllm_utils.random_uuid = lambda: "stub-uuid" + vllm.utils = vllm_utils + sys.modules["vllm.utils"] = vllm_utils + + protocol = types.ModuleType("vllm.entrypoints.openai.engine.protocol") + protocol.ErrorResponse = _Stub + protocol.ErrorInfo = _Stub + protocol.RequestResponseMetadata = _Stub + for name in ( + "vllm.entrypoints", + "vllm.entrypoints.openai", + "vllm.entrypoints.openai.engine", + ): + sys.modules.setdefault(name, types.ModuleType(name)) + sys.modules["vllm.entrypoints.openai.engine.protocol"] = protocol + # vllm.model_executor.model_loader.tensorizer.TensorizerConfig model_executor = types.ModuleType("vllm.model_executor") model_loader = types.ModuleType("vllm.model_executor.model_loader")