test(vllm): fix omni 0.23 contract guards (regressed by #11374) - #11516
Conversation
PR #11374 bumped vllm-omni v0.21.0rc1 -> v0.23.0rc1, turning the vllm-runtime CPU test jobs red on release/1.3.0. Three contract-guard tests reacted to omni 0.23 internals; the guarded runtime paths still work, so only the guards need updating: - test_engine_core_struct_contract: omni 0.23's bundled vLLM adds a trailing `multimodal_output` field to EngineCoreOutput. Construction in vllm_processor.py is keyword-based with defaults, so it is unaffected; add `multimodal_output` to the omni field variants. - test_request_exposes_all_token_ids: omni monkeypatches Request with OmniRequest, whose body does not redeclare `_all_token_ids` (it inherits it). Walk the MRO so the inherited attribute is detected while a real rename in vLLM still fails. - test_all_diffusion_parallel_config_fields_covered: omni 0.23 adds DiffusionParallelConfig.mask_sp_padding, an internal SP detail that is not a benchmark-facing knob; add it to _SKIP_FIELDS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: tanmayv25 <tanmay2592@gmail.com>
| omni_output_extra_fields = ( | ||
| "multimodal_output", | ||
| "is_segment_finished", | ||
| "new_prompt_len_snapshot", | ||
| ) |
There was a problem hiding this comment.
🔍 vllm_processor.py does not forward multimodal_output to EngineCoreOutput
The new multimodal_output field is added to the valid omni output field variants in this test, but components/src/dynamo/frontend/vllm_processor.py:666-674 only dynamically forwards is_segment_finished and new_prompt_len_snapshot when constructing EngineCoreOutput. It does not check for or forward multimodal_output. If the downstream OutputProcessor or omni formatters (like AudioFormatter at components/src/dynamo/vllm/omni/output_formatter.py:280) expect multimodal_output to be populated on EngineCoreOutput, it would be None/default when constructed by vllm_processor.py. This may be intentional if multimodal_output is only populated by the omni engine path (not the disaggregated router path through vllm_processor.py), but worth confirming.
Was this helpful? React with 👍 or 👎 to provide feedback.
Overview
PR #11374 (vllm-omni
v0.21.0rc1→v0.23.0rc1) turned thevllm-runtime / TestCPU jobs red onrelease/1.3.0— the parent commit was green, the merge commit failed all four jobs, and every subsequent cherry-pick (e.g. #11455) inherits it.Three
pre_mergecontract-guard tests reacted to omni 0.23 internals. In all three the guarded runtime path still works — only the guards are over-strict — so this PR updates the guards, with no product-code change.Root cause per test
test_engine_core_struct_contract— omni 0.23's bundled vLLM adds a trailingmultimodal_outputfield toEngineCoreOutput. The CI assertion printed:vllm_processor.pyconstructsEngineCoreOutputby keyword and only sets fields it knows (output_kwargs+if "…" in __struct_fields__), so the new optional field just defaults — construction is unaffected. Fix: addmultimodal_outputto the omni field variants.test_request_exposes_all_token_ids— omni monkeypatchesvllm.v1.request.Request→OmniRequest, whose body doesn't redeclare_all_token_ids(it inherits it), so theinspect.getsource(Request)text check fails. The attribute still exists at runtime;InstrumentedScheduleris fine. Fix: walk the MRO so the inherited attribute is detected, while a genuine rename in vLLM still fails.test_all_diffusion_parallel_config_fields_covered— omni 0.23 addsDiffusionParallelConfig.mask_sp_padding(internal sequence-parallel detail, defaultsFalse, not a benchmark-facing knob). Fix: add to_SKIP_FIELDS, consistent with the existingsequence_parallel_size/enable_expert_parallelskips.Verification (on the real
vllm-omni 0.23.0rc1/vllm 0.23.0release/1.3.0 image)test_omni_base_handler.py: 3 passed.EngineCoreOutputreally hasmultimodal_outputand keyword-constructs with it defaulting toNone;Requestis monkeypatched toOmniRequestwith_all_token_idsresolvable via the MRO;DiffusionParallelConfig.mask_sp_paddingpresent.Qwen3-0.6B, valid/v1/chat/completions) and diffusion generation (Z-Image-Turbo, valid 512×512 PNG via/v1/images/generations) both succeeded with no errors in the guarded paths.Not addressed
The GPU
test_omni_serve_deployment[omni_i2v]failure on the same run is a separate ffmpeg / "No valid H.264 encoder" environment issue, unrelated to the pin.🤖 Generated with Claude Code