Skip to content

[Bugfix] Stop reading the removed OmniRequestOutput.request_output accessor - #6172

Merged
hsliuustc0106 merged 1 commit into
vllm-project:mainfrom
MrlixiangWE:fix-6133-request-output-accessor
Aug 14, 2026
Merged

hsliuustc0106 merged 1 commit into
vllm-project:mainfrom
MrlixiangWE:fix-6133-request-output-accessor

Conversation

@MrlixiangWE

Copy link
Copy Markdown
Contributor

Purpose

Fixes #6133.

OmniRequestOutput used to hold a nested RequestOutput in a request_output field. #5146 made
it inherit RequestOutput, so the generation content lives on the object itself and the nested
field no longer exists. 21 call sites across 12 files still read it, and three nightly CUDA jobs
fail deterministically:

AttributeError: 'OmniRequestOutput' object has no attribute 'request_output'

This PR routes every one of them at the output object directly (outputs[0].images rather than
outputs[0].request_output.images).

Two things worth flagging that are not in the issue:

The blast radius is wider than the three jobs. examples/offline_inference/image_to_video/README.md:99
sits inside a python snippet that tests/examples/offline_inference/test_image_to_video.py
collects and runs, so the image-to-video Doc Test fails the same way.

Two call sites fail differently, which is why the log-scraped issue did not group them. They
guarded the access with hasattr, so instead of the AttributeError they take a branch that was
never meant to run: tests/diffusion/distributed/test_flux2_vae_patch_parallel.py now always
raises ValueError("No request_output found in OmniRequestOutput"), and
tests/diffusion/models/minimax_h3/test_minimax_h3_quantization_quality.py silently skips its
worker peak-memory update. Both guards are dropped along with the accessor.

One correction to the issue's list: more_cli_examples_003 is the bash NextStep-1.1 snippet.
Neither it, nor text_to_image.py, nor diffusion/utils/image_output.py reads the removed
accessor — #5146 already updated those — so that case is not addressed here and, if it is
still failing, it has another cause.

tests/e2e/accuracy/ltx/run_ltx_reference.py and
tests/diffusion/models/minimax_h3/test_minimax_h3_quantization_quality.py lose a few lines
rather than gaining a rename: their nested-unwrap blocks became unreachable when the nesting went
away, and the code immediately around them already reads the content off the outer object.

Regression test

tests/docs/test_example_output_accessors.py (new, core_model + cpu, following the
tests/docs/test_generate_examples.py idiom) pins both halves of the contract: the field really is
gone from the class, and no doc, example, test or tool reads it. The nested field only fails once a
real model has produced an output, which is why a GPU nightly job was the first thing to notice;
this turns that into a millisecond CPU check. #5146 is part of a series, so the next removal should
not have to wait for nightly either.

Test Plan

# regression test, red on unmodified main and green here
pytest tests/docs/test_example_output_accessors.py -q
pytest tests/docs/ -q

# adjacent output-contract suites, untouched by this PR
pytest tests/engine/test_omni_request_output.py tests/engine/test_output_processor.py -q

# the edited GPU tests still import and collect
pytest --collect-only -q tests/diffusion/distributed/test_vae_decode_parallelism.py \
    tests/diffusion/distributed/test_flux2_vae_patch_parallel.py \
    tests/diffusion/models/minimax_h3/test_minimax_h3_quantization_quality.py
python -m py_compile tests/e2e/accuracy/ltx/run_ltx_reference.py \
    tools/baselines/omni_hash_baseline.py examples/offline_inference/minicpmo/end2end.py

# the four CI-collected snippets, read back through the repo's own extractor
python -c "from tests.examples.helpers import ReadmeSnippet; ..."

pre-commit run --files <the 13 changed files>

vLLM Version: 0.27.0

vLLM-Omni Commit: dbc0dd6 (upstream main)

Test Result

The accessor is gone and the replacement is the right one, against an output built the way
diffusion/output_formatter.py builds it:

final_output_type : image
out.images        : [<PIL.Image.Image image mode=RGB size=8x8 ...>]
out.request_output: AttributeError: 'OmniRequestOutput' object has no attribute 'request_output'

The snippets the Doc Test collects, read back through ReadmeSnippet.extract_readme_snippets:

examples/offline_inference/text_to_image/README.md: 15 snippets collected, 0 still using .request_output
    quick_start_001       : images = outputs[0].images
    more_cli_examples_008 : output.images[0].save(f"{i}.jpg")
    more_cli_examples_009 : output.images[0].save(f"{i}.jpg")
examples/offline_inference/image_to_video/README.md: 17 snippets collected, 0 still using .request_output
    quick_start_001       : frames = outputs[0].images

The new test is red on unmodified main and green here:

# upstream main dbc0dd6d
pytest tests/docs/test_example_output_accessors.py -q
FAILED tests/docs/test_example_output_accessors.py::test_no_source_reads_the_nested_request_output
  ... 21 offenders across 12 files ...
1 failed, 1 passed, 14 warnings in 0.22s

# this branch
pytest tests/docs/ -q
6 passed, 14 warnings in 0.21s

Adjacent suites and collection:

pytest tests/engine/test_omni_request_output.py tests/engine/test_output_processor.py -q
41 passed, 14 warnings in 0.18s

pytest --collect-only -q <the three edited GPU tests>
7 tests collected in 1.48s
py_compile: ltx reference + hash baseline + minicpmo end2end OK

pre-commit on the 13 changed files: all hooks pass (actionlint skipped, no workflow files
touched).

Run on one A800 against upstream main dbc0dd6d, vLLM 0.27.0. The three failing nightly jobs
themselves need the CUDA runners and are covered by the Diffusion X2I Doc Test, X2V Other Accuracy
Test and Distributed Test with H100 jobs.

…cessor

vllm-project#5146 made OmniRequestOutput inherit RequestOutput instead of holding one in a
nested request_output field. The field is gone, but 21 call sites across docs,
examples, tests and tools still read it, so three nightly CUDA jobs fail
deterministically:

  AttributeError: 'OmniRequestOutput' object has no attribute 'request_output'

Read the generation content off the output object itself. Two call sites had
guarded the access with hasattr, so instead of the AttributeError they now take
a branch that was never meant to run: the Flux2 VAE patch-parallel helper always
raises ValueError("No request_output found in OmniRequestOutput"), and the H3
quantization-quality helper silently skips its worker peak-memory update. Both
are dropped along with the accessor.

The nested field only fails once a real model has produced an output, which is
why a GPU nightly job was the first thing to notice. Add a CPU test in
tests/docs that pins both halves of the contract - the field is really gone, and
no doc, example, test or tool still reaches for it - so the next removal is
caught before nightly.

Signed-off-by: MrlixiangWE <mrdanaer@gmail.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@vllm-omni-review-bot

Copy link
Copy Markdown

This PR appears to be related to model: minicpm.

Model owners: @y-null

Please take a look when you have a chance. If you would like an automated review, mention @vllm-omni-review-bot in a comment.

@congw729 congw729 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@hsliuustc0106 hsliuustc0106 added ready label to trigger buildkite CI cuda-test Used to trigger vllm-omni cuda CI separately. labels Aug 13, 2026
@Gaohan123 Gaohan123 added this to the v0.28.0 milestone Aug 14, 2026
@hsliuustc0106
hsliuustc0106 merged commit b95c737 into vllm-project:main Aug 14, 2026
6 checks passed
khairulkabir1661 pushed a commit to khairulkabir1661/vllm-omni that referenced this pull request Sep 25, 2026
…cessor (vllm-project#6172)

Signed-off-by: MrlixiangWE <mrdanaer@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cuda-test Used to trigger vllm-omni cuda CI separately. ready label to trigger buildkite CI

Projects

None yet

5 participants