Repository navigation
[Core] Add Watermarking Framework & Support Watermarked Audio Generation w/ AudioSeal - #7366
Conversation
|
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. |
Omni ReviewBot triage noteAutomated triage of commit
These are automated triage suggestions only — the final decision belongs to the maintainers. |
95c9271 to
bb36db1
Compare
Omni ReviewBot: supersededThe CI failure noted on |
bb36db1 to
c63b3ff
Compare
Omni ReviewBot: supersededThe CI failure noted on |
Omni ReviewBot: supersededThe CI failure noted on |
Omni ReviewBot: supersededThe CI failure noted on |
|
@alex-jw-brooks this PR is labeled 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! |
8dc48d4 to
1209ae9
Compare
Omni ReviewBot: supersededThe CI failure noted on |
Omni ReviewBot routing recordAssigned Strict on zcode (GLM-5.3-Flash) under experiment |
1907344 to
fd2e9d9
Compare
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>
f729d7b to
672d4a1
Compare
Signed-off-by: Alex Brooks <albrooks@redhat.com>
linyueqian
left a comment
There was a problem hiding this comment.
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.
|
Follow-up issue to track batching optimization here: #9501, thanks! |
…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>
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
AudioSeal(i.e., not 16khz, so ensures the generator/detector are okay in native SR without resampling, and produces stereo audio, which requires downmixing)^ Integration tests also load the
AudioSealdetector and ensure the watermark was actually applied.The
AudioSealgenerator 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-streamingAudioSealmodel, 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