Skip to content

[Core] Add Watermarking Framework & Support Watermarked Audio Generation w/ AudioSeal - #7366

Merged
linyueqian merged 30 commits into
vllm-project:mainfrom
alex-jw-brooks:watermark
Oct 28, 2026
Merged

linyueqian merged 30 commits into
vllm-project:mainfrom
alex-jw-brooks:watermark

Conversation

@alex-jw-brooks

@alex-jw-brooks alex-jw-brooks commented Sep 10, 2026 •

Copy link
Copy Markdown
Collaborator

Purpose

Implements the core work for #7365

This adds a framework for watermarking multimodal outputs, and a first pass at integrating it in an endpoint / engine agnostic way. By default, the watermarking is off, and is configured at the engine level.

It also adds support for text watermarking through vLLM by forwarding the multimodal subconfig, as well as docs.

Test Plan

  • Added unit tests
  • Added integration tests for:
    • stable audio, which uses the diffusion path and also produces lots of edge cases for AudioSeal (i.e., not 16khz, so ensures the generator/detector are okay in native SR without resampling, and produces stereo audio, which requires downmixing)
    • Qwen3TTS, which hits the non diffusion path
      ^ Integration tests also load the AudioSeal detector and ensure the watermark was actually applied.

The AudioSeal generator is implemented with the streaming model, which is also used in the non-streaming case. I will post some benchmarking scripts for reproducibility, but it looked like the streaming model was pretty comparable in throughput to the non-streaming AudioSeal model, so it seems cleaner to just use it there.

Test Result

Tests pass. I also ran some validations checking that
- offline, realtime, chat completions, and audio gen look correct for watermarked vs not watermarked for the above & qwen3omni
- For those ^ that the watermarked results sound audibly identical to the not watermarked results
- And also tested both streaming and not streaming to ensure that the watermark is still correctly detected when streaming in chunks.

I still need to write some docs, so will make sure that there are examples for this in there

@vllm-omni-review-bot

Copy link
Copy Markdown

This PR appears to belong to: docs/design/module/observability.md, docs/design/module/input_output_modality_contracts.md.

Module owners: @lishunyang12 @vraiti @amy-why-3459

Routing: @lishunyang12 via module of the changed files; @vraiti via module of the changed files; @amy-why-3459 via semantic router

@alex-jw-brooks, please review your own changes and leave a short self-review comment describing what you checked. PRs without author self-review may not be assigned a reviewer.

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

@vllm-omni-review-bot

vllm-omni-review-bot commented Sep 10, 2026 •

Copy link
Copy Markdown

Omni ReviewBot triage note

Automated triage of commit dbb1b31ce26d produced:

  • Priority: high. Prompt maintainer attention is suggested.

These are automated triage suggestions only — the final decision belongs to the maintainers.

@hsliuustc0106 hsliuustc0106 added core related to core module: cache, scheduler, engine, worker, modelrunner tts code related to tts models enhancement New feature or request high priority high priority issue, needs to be done asap labels Sep 11, 2026
@linyueqian linyueqian added the ready label to trigger buildkite CI label Sep 14, 2026
Comment thread vllm_omni/engine/stage_pool.py Resolved
Comment thread vllm_omni/watermarking/audio_seal.py Resolved
Comment thread pyproject.toml Resolved
@vllm-omni-review-bot

vllm-omni-review-bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Omni ReviewBot: superseded

The CI failure noted on bb36db1c5072 refers to an earlier head; the pull request now points at c63b3ffb9acd.

@vllm-omni-review-bot

vllm-omni-review-bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Omni ReviewBot: superseded

The CI failure noted on c63b3ffb9acd refers to an earlier head; the pull request now points at 5490565213dd.

@vllm-omni-review-bot

vllm-omni-review-bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Omni ReviewBot: superseded

The CI failure noted on 5490565213dd refers to an earlier head; the pull request now points at 8dc48d4fd909.

@vllm-omni-review-bot

vllm-omni-review-bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Omni ReviewBot: superseded

The CI failure noted on 8dc48d4fd909 refers to an earlier head; the pull request now points at 1209ae916a4b.

@hsliuustc0106

Copy link
Copy Markdown
Collaborator

@alex-jw-brooks this PR is labeled ready + high priority, but CI is failing on the latest commit:

Could you please take a look and push an update to get CI green? Once the checks pass we can proceed with review/merge. Thanks!

@vllm-omni-review-bot

vllm-omni-review-bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Omni ReviewBot: superseded

The CI failure noted on 190734467e5b refers to an earlier head; the pull request now points at fd2e9d92819e.

@vllm-omni-review-bot

Copy link
Copy Markdown
Omni ReviewBot routing record

Assigned Strict on zcode (GLM-5.3-Flash) under experiment fleet-strict-cursor-grok46-zcode-glm53flash-5050-c5-z10-20261002.

Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>

fix headless flag

Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
Signed-off-by: Alex Brooks <albrooks@redhat.com>
@alex-jw-brooks alex-jw-brooks added ready label to trigger buildkite CI and removed ready label to trigger buildkite CI labels Oct 27, 2026
Signed-off-by: Alex Brooks <albrooks@redhat.com>
@alex-jw-brooks alex-jw-brooks added ready label to trigger buildkite CI and removed ready label to trigger buildkite CI labels Oct 27, 2026

@linyueqian linyueqian 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.

Thanks for the follow-ups, approving at dbb1b31.

Opt-out: agreed. Matching vLLM's per-request opt-out API is reasonable, and the docs already say deployments that need watermarking should restrict opt-out at ingress.

Engine args: thanks, overriding watermark_config only when the Omni config yields a value keeps existing per-stage configs intact on the default-off path.

Throughput: thanks for measuring it. Since watermarking is off by default, batching the watermarker in a follow-up PR sounds good to me. It would help to link a tracking issue here so the TTFA numbers and the plan stay together.

@linyueqian
linyueqian merged commit 61a6ac2 into vllm-project:main Oct 28, 2026
10 of 11 checks passed
@alex-jw-brooks

Copy link
Copy Markdown
Collaborator Author

Follow-up issue to track batching optimization here: #9501, thanks!

princepride added a commit to princepride/vllm-omni that referenced this pull request Oct 28, 2026
…gine

Main (vllm-project#7366) now passes watermarking= to diffusion_engine.generate() from
the pure-diffusion chat path. The test's fake engine had a fixed signature,
so every request failed with an ErrorResponse once the PR was merged with
main in CI. Accept and ignore extra keyword arguments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: princepride <wangzhipeng628@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core related to core module: cache, scheduler, engine, worker, modelrunner enhancement New feature or request high priority high priority issue, needs to be done asap ready label to trigger buildkite CI tts code related to tts models

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants