[Misc] Warn When vLLM / vLLM-Omni Have Mismatched Versions (#2691)

Signed-off-by: Alex Brooks <albrooks@redhat.com>
Co-authored-by: lengrongfu <lenronfu@gmail.com>
This commit is contained in:
Alex Brooksandlengrongfu authored and GitHub committed 2026-04-17 20:15:16 +08:00
1 parent 18ac679763
commit 6c57ab7ac2
3 files changed
+99 -4

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Unit tests for version compatibility warnings."""
import warnings
from unittest import mock
import pytest
from vllm_omni.version import warn_if_misaligned_vllm_version
@mock.patch("vllm_omni.version.__version_tuple__", (0, 19, 0))
@mock.patch("vllm_omni.version.__version__", "0.19.0")
@mock.patch("vllm.__version_tuple__", (0, 18, 0))
@mock.patch("vllm.__version__", "0.18.0")
def test_version_mismatch_warning():
"""Ensure that we warn when vLLM and vLLM-Omni major/minor versions differ."""
with pytest.warns(RuntimeWarning, match="mismatched major/minor versions"):
warn_if_misaligned_vllm_version()
@pytest.mark.parametrize(
"vllm_ver,vllm_tuple,omni_ver,omni_tuple",
[
("0.19.0", (0, 19, 0), "0.19.5", (0, 19, 5)), # Patch differs
("0.18.0", (0, 18, 0), "dev", (0, 0, "dev")), # Omni dev
("dev", (0, 0, "dev"), "0.19.0", (0, 19, 0)), # vLLM dev
# Ensure local identifies don't matter for the warning
("0.19.0+foo", (0, 19, 0, "foo"), "0.19.5", (0, 19, 0)),
("0.19.0", (0, 19, 0), "0.19.5+bar", (0, 19, 0, "bar")),
("0.19.0+foo", (0, 19, 0, "foo"), "0.19.5+bar", (0, 19, 0, "bar")),
],
)
def test_no_warning_cases(vllm_ver, vllm_tuple, omni_ver, omni_tuple):
"""Ensure we don't warn when minor versions match or either is a dev build."""
with (
mock.patch.multiple("vllm", __version__=vllm_ver, __version_tuple__=vllm_tuple),
mock.patch.multiple("vllm_omni.version", __version__=omni_ver, __version_tuple__=omni_tuple),
):
with warnings.catch_warnings():
warnings.simplefilter("error")
warn_if_misaligned_vllm_version()
@mock.patch("vllm_omni.version.__version_tuple__", (0, 19, 0))
@mock.patch("vllm_omni.version.__version__", "0.19.0rc2.dev21")
@mock.patch("vllm.__version_tuple__", (0, 18, 0))
@mock.patch("vllm.__version__", "0.18.0")
def test_warning_contains_version_strings():
"""Ensure that the warning contains the full version strings."""
with pytest.warns(RuntimeWarning) as record:
warn_if_misaligned_vllm_version()
assert len(record) == 1
msg = str(record[0].message)
assert "0.19.0rc2.dev21" in msg
assert "0.18.0" in msg
+6 -2
View File
@@ -12,6 +12,12 @@ Architecture:
processing
"""
# We import version early, because it will warn if vLLM / vLLM Omni
# are not using the same major + minor version (if vLLM is installed).
# We should do this before applying patch, because vLLM imports might
# throw in patch if the versions differ.
from .version import __version__, __version_tuple__ # isort:skip # noqa: F401
try:
from . import patch # noqa: F401
except ModuleNotFoundError as exc: # pragma: no cover - optional dependency
@@ -25,8 +31,6 @@ from vllm_omni.transformers_utils import configs as _configs # noqa: F401, E402
from .config import OmniModelConfig
from .version import __version__, __version_tuple__ # isort:skip
def __getattr__(name: str):
# Lazy import for AsyncOmni and Omni to avoid pulling in heavy
+35 -2
View File
@@ -5,12 +5,12 @@ The version is automatically generated from git tags via setuptools_scm
and written to _version.py during package build.
"""
import warnings
try:
# Import auto-generated version from _version.py (created by setuptools_scm)
from ._version import __version__, __version_tuple__
except ImportError as e:
import warnings
warnings.warn(
f"Failed to import version from _version.py: {e}\n"
"This typically happens in development mode before building.\n"
@@ -22,4 +22,37 @@ except ImportError as e:
__version__ = "dev"
__version_tuple__ = (0, 0, "dev")
def warn_if_misaligned_vllm_version():
"""Warn if vLLM and vllm-omni versions don't match (major.minor)."""
# Import vllm lazily since import order may be sensitive with current monkeypatching,
# but we want to check this before potentially breaking imports run.
from vllm import __version__ as vllm_version
from vllm import __version_tuple__ as vllm_version_tuple
omni_ver: tuple[str | int, ...] = __version_tuple__[:2]
vllm_ver: tuple[str | int, ...] = vllm_version_tuple[:2]
# Skip if either version is dev (0, 0)
if omni_ver == (0, 0) or vllm_ver == (0, 0):
return
# Compare major.minor
if omni_ver != vllm_ver:
warnings.warn(
"vLLM and vLLM-Omni appear to have mismatched major/minor versions:\n"
f" --> vLLM-Omni version {__version__}\n"
f" --> vLLM version {vllm_version}\n"
"This will likely cause compatibility issues.",
RuntimeWarning,
stacklevel=2,
)
__all__ = ["__version__", "__version_tuple__"]
# Run version check automatically when this module is imported
try:
warn_if_misaligned_vllm_version()
except ModuleNotFoundError:
# vLLM not installed (e.g., documentation builds)
pass