diff --git a/tests/entrypoints/test_serve.py b/tests/entrypoints/test_serve.py index 0f51a4320..ad5e33dc1 100644 --- a/tests/entrypoints/test_serve.py +++ b/tests/entrypoints/test_serve.py @@ -15,7 +15,10 @@ import pytest from pytest_mock import MockerFixture from vllm.v1.engine.utils import EngineZmqAddresses -from vllm_omni.config.omni_config import VllmOmniDiffusionStageConfig +from vllm_omni.config.omni_config import ( + VllmOmniDiffusionStageConfig, + normalize_and_validate_diffusion_engine_ingress_kwargs, +) from vllm_omni.config.resolver import OmniConfigResolution from vllm_omni.engine.stage_engine_startup import StageReplicaResources from vllm_omni.engine.stage_runtime import StageEngineLaunch @@ -87,6 +90,26 @@ def _parse_serve_args(argv: list[str]) -> TrackingNamespace: return parser.parse_args(argv) +def test_no_guardrails_is_only_forwarded_as_model_config(mocker: MockerFixture) -> None: + """The CLI alias must not reach the strict diffusion config validator.""" + parser = TrackingArgumentParser() + subparsers = parser.add_subparsers(dest="subparser") + OmniServeCommand().subparser_init(subparsers) + args = parser.parse_args(["serve", "fake-model", "--omni", "--no-guardrails"]) + assert args.get_explicit_kwargs_dict()["no_guardrails"] is True + + # Keep the real CLI parser and config validator, but do not start a server. + args.headless = True + mocker.patch.dict("os.environ", {"VLLM_DISABLE_LOG_LOGO": "1"}) + mocker.patch("vllm_omni.entrypoints.cli.serve.run_headless") + OmniServeCommand.cmd(args) + + explicit = args.get_explicit_kwargs_dict() + normalized = normalize_and_validate_diffusion_engine_ingress_kwargs(explicit, stage_id=0) + assert normalized["model_config"]["guardrails"] is False + assert "no_guardrails" not in explicit + + def test_omni_serve_requires_model_when_none_provided() -> None: """Regression for https://github.com/vllm-project/vllm-omni/issues/4158: ``vllm serve --omni`` with no model must fail fast instead of silently diff --git a/vllm_omni/entrypoints/cli/serve.py b/vllm_omni/entrypoints/cli/serve.py index 10ae2166d..57514bbe9 100644 --- a/vllm_omni/entrypoints/cli/serve.py +++ b/vllm_omni/entrypoints/cli/serve.py @@ -149,7 +149,8 @@ class OmniServeCommand(CLISubcommand): args.model_config = model_config explicit_keys = getattr(args, "explicit_keys", None) if explicit_keys is not None: - args.explicit_keys = explicit_keys | {"model_config"} + # --no-guardrails is a CLI-only alias, not a diffusion engine arg. + args.explicit_keys = (explicit_keys - {"no_guardrails"}) | {"model_config"} if args.headless: run_headless(args)