Skip to content

[EPD] Support metadata-only audio-in-video requests - #62573

Merged
DarkLight1337 merged 5 commits into
vllm-project:mainfrom
gty111:codex/epd-audio-in-video
Oct 21, 2026
Merged

DarkLight1337 merged 5 commits into
vllm-project:mainfrom
gty111:codex/epd-audio-in-video

Conversation

@gty111

@gty111 gty111 commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Overview

Support metadata-only use_audio_in_video requests for Qwen2.5-Omni and Qwen3-Omni in the Python EPD frontend/proxy.

Claims

  • Forward video timing and audio lengths without repeating media preprocessing on the consumer.
  • Preserve both features' EC hashes and transfer handles; fall back to raw media for the whole request when metadata is incomplete.

Validation

Original validation before the review fixes, GB200, 1E + 1PD, Model Runner V2: 48/48 functional smoke requests succeeded across ECExample, Mooncake TCP, and CPU/NIXL with Qwen/Qwen2.5-Omni-3B and Qwen/Qwen3-Omni-30B-A3B-Instruct.

Covered one/two videos with audio, image + video, and audio disabled, each repeated twice. Audio-enabled requests use mm_processor_kwargs={"use_audio_in_video": true}; both instances use --trust-request-mm-kwargs.

Review-fix validation:

  • GB200, cached Qwen3-Omni-30B-A3B-Instruct weights, MRV2, eager mode, enable_mm_embeds=True, no EC connector: 4/4 synthetic embedding requests completed (one/two images and one/two videos), followed by a successful text request on the same engine. Inputs used BF16 embeddings shaped (4 * n, 8192) with grid_thw=[[1,4,4]] * n; this checks request completion and item handling, not semantic accuracy. Runtime: Torch 2.13.0+cu130, Transformers 5.15.0, existing precompiled extensions.
  • VLLM_GPU_SYNC_CHECK=error passes the changed embedding-split path, then stops at the pre-existing input_ids.cpu() in Qwen3-Omni's embed_input_ids; the successful smoke above ran without that strict check. The full EPD connector matrix was not rerun for this follow-up.

Details

A video with audio produces two encoder features. Carry both in one video_embeds content part with a companion audio_embeds payload and shared source UUID, preserving the chat template's single video item and interleaved placeholders.

Review fixes keep precomputed vision embeddings split by grid_thw in the shared Omni mixin. For push transfers, proxy-assigned IDs remain per occurrence even when encoder responses aggregate repeated hashes. Encoder response modalities select the audiovisual path; a single video feature uses the existing matching and raw-fallback behavior. Non-push connector-provided transfer handles remain supported.

Related: #52409. Duplicate checks found no equivalent PR; #57275 fixes raw-fallback identity and transfer lifecycle, not audiovisual metadata-only inputs.


Pull Request Checklist
  • I used vLLM's /pr-checklist skill. (Mandatory for agents, optional for humans).

  • AI assistance was used during the creation of this PR.

  • Design Fit: Minimizes impact on core components, reuses existing functionality, and justifies added complexity.

  • Testing and Validation: Validates the change and ensures any added tests are meaningful and reliable, with CI coverage or documented CI resource constraints and validation performed outside CI.

  • Code Quality and Style: Keeps code and comments clear and concise, and updates relevant documentation and examples.

  • Pull Request Contents: Includes a brief summary and relevant links, supports claims with evidence, explains root causes and implementation trade-offs, and follows the contributing guide.

BEFORE SUBMITTING, PLEASE READ https://docs.vllm.ai/en/latest/contributing (anything written below this line will be removed by GitHub Actions)

Assisted-by: OpenAI Codex <codex@openai.com>
Signed-off-by: Tianyu Guo <guoty@inferact.ai>
@mergify

mergify Bot commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Documentation preview: https://vllm--62573.org.readthedocs.build/en/62573/

@mergify mergify Bot added documentation Improvements or additions to documentation multi-modality Related to multi-modality (#4194) qwen Related to Qwen models kv-connector labels Oct 20, 2026
Assisted-by: OpenAI Codex <codex@openai.com>
Signed-off-by: Tianyu Guo <guoty@inferact.ai>
@gty111
gty111 marked this pull request as ready for review October 20, 2026 02:04

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@DarkLight1337

Copy link
Copy Markdown
Member

@claude review

Comment thread vllm/model_executor/models/qwen3_omni_moe_thinker.py
Comment thread examples/disaggregated/disaggregated_encoder/disagg_epd_proxy.py Outdated
Comment thread examples/disaggregated/disaggregated_encoder/disagg_epd_proxy.py
Split supplied vision embeddings per media item, preserve per-occurrence push transfer IDs, and accept video-only encoder replies when use_audio_in_video is ignored.

Co-authored-by: OpenAI Codex <codex@openai.com>

Signed-off-by: Tianyu Guo <guoty@inferact.ai>
@DarkLight1337

Copy link
Copy Markdown
Member

@claude review

Comment thread vllm/distributed/ec_transfer/ec_connector/utils.py
Comment thread examples/disaggregated/disaggregated_encoder/disagg_epd_proxy.py
Include modality in producer metadata expectations and pass per-item feature lists to rewrite_for_decode in the failure-isolation helper.

Co-authored-by: OpenAI Codex <codex@openai.com>

Signed-off-by: Tianyu Guo <guoty@inferact.ai>
@DarkLight1337

Copy link
Copy Markdown
Member

@claude review

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Code review completed

Nothing new to post: everything this review found is already covered by existing comments on this pull request or didn't merit a separate one.

@DarkLight1337
DarkLight1337 enabled auto-merge (squash) October 21, 2026 06:42
@DarkLight1337

Copy link
Copy Markdown
Member

/ci run

@github-actions github-actions Bot added the ready ONLY add when PR is ready to merge/full CI is needed label Oct 21, 2026
@github-actions

Copy link
Copy Markdown

✅ Triggered Buildkite CI #96347 for commit f34886afb6e0.

@gty111

gty111 commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

/ci retry

@github-actions

Copy link
Copy Markdown

✅ Queued 1 failed job(s) for retry in Buildkite CI #96347.

@DarkLight1337
DarkLight1337 merged commit dc61c6d into vllm-project:main Oct 21, 2026
180 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation kv-connector multi-modality Related to multi-modality (#4194) qwen Related to Qwen models ready ONLY add when PR is ready to merge/full CI is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants