Skip to content

[Model][Core] Add native Lychee-FD support for Unified Duplex and MRV2 - #8635

Draft
elpsykongloo wants to merge 3 commits into
vllm-project:mainfrom
elpsykongloo:feat/lychee-fd-upstream-20261008
Draft

elpsykongloo wants to merge 3 commits into
vllm-project:mainfrom
elpsykongloo:feat/lychee-fd-upstream-20261008

Conversation

@elpsykongloo

Copy link
Copy Markdown

Purpose

Add native Lychee-FD serving through Unified Duplex and MRV2. AR produces separate semantic, codec and control channels; native Token2Wav produces ordered 24 kHz PCM with hop10/lookahead3 and natural-final flushing. Cancellation, speech EOS and slot reuse retain request/epoch ownership. This also adds the generic append/recovery and output-lifetime support needed by that path.

C1 eager single-GPU serving is the default, with explicit C2/C4 profiles. Configuration aliases, weight mapping, deployment profiles, model documentation and a public-model recipe are included. Migration-only oracles and tuning tools are excluded. Third-party decoder source retains its license notices.

Design: #8634

Validation

  • Final head: ce737762, based on upstream 4e675f8b, with DCO Signed-off-by.
  • Final CPU regression: 1425 passed, 2 skipped, 1 deselected, 78.72 seconds. Includes affected core tests and the current upstream Duplex API regression.
  • Applicable import/CUDA-helper/SPDX/test-mark/Ruff checks, upstream mypy scope and documentation checks: passed. Real fresh-environment libdevice imports and prompt Mel dependency regressions: passed.
  • Final source image: built; CPU runtime imports and pip check passed.
  • Earlier migration image on A100 80 GiB: 327 committed windows; ordinary C2/C4 admission, cancellation, barge-in and reopen; actual WebSocket resume/replay/token rotation/playback ACK; codec/Mel/chunk/final/sample-clock boundaries. Instrumented fault cases are separate correctness evidence.
  • Standalone Token2Wav steady run: 1803 seconds, 64 measured cycles, 192 natural finals, stable live memory. Scope is one recorded codec fixture, not whole-service acceptance.

Still running: final-head standard serve --omni, complete-response capture and whole-service steady validation. A previous whole-service window/collector timeout is unresolved and is not counted as a pass. This PR remains a Draft while these results are completed.

Not run: exclusive realtime RTF/latency A/B while other GPU tasks occupy the server; public-checkpoint GPU/numerical equivalence; additional GPU architectures, CUDA Graph, overlap and multi-GPU qualification. No speedup or realtime SLA is claimed. Public configuration/index layout is checked, while current GPU evidence uses the local released checkpoint.

Reproduction

See docs/models/lychee_fd.md and recipes/HIT-TMG/Lychee-FD-A100.md for model downloads, separate Token2Wav/prompt assets and the standard server command. Validation runtime: NVIDIA A100 80 GiB, vLLM/vLLM-Omni 0.31, Torch 2.13.0+cu132, cuDNN 92000, torchaudio 2.11; TP=PP=1 and eager. Shared functional runs use an explicit reduced-memory profile and do not qualify the default profile's realtime behavior.

CPU regression from this branch:

export CUDA_VISIBLE_DEVICES=''
export OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2
mapfile -t changed_tests < <(git diff --name-only 4e675f8b HEAD -- tests | sed -n '/\.py$/p')
python -m pytest -q "${changed_tests[@]}" \
  tests/entrypoints/openai_api/test_duplex_api_server.py \
  -m 'not cuda' --run-level core_model

Initial scope excludes text-only/image/chat-completions, rollback/audio truncation and multi-GPU. Resume is process-local. Optional compatibility math falls back outside its qualified runtime or when the default libdevice is absent; explicit invalid overrides and real kernel failures remain errors.

AI assistance

Codex and its subagents assisted code, tests, documentation and validation. The results above distinguish final-head checks from historical evidence and tests not run. Contributor and maintainer review remain necessary; this Draft does not assert completed human review.

Signed-off-by: elpsykongloo <113705189+elpsykongloo@users.noreply.github.com>
Signed-off-by: elpsykongloo <113705189+elpsykongloo@users.noreply.github.com>
@hsliuustc0106 hsliuustc0106 added core related to core module: cache, scheduler, engine, worker, modelrunner new model add new model labels Oct 9, 2026
BeatSeat added a commit to BeatSeat/vllm-omni that referenced this pull request Oct 10, 2026
…m this PR

The Talker crash at overlapping sessions came from all MRv2 Talker requests
sharing one condition state; per-request keying fixes it. Containing a
failed preprocess to its request is a generic runner/scheduler contract that
V1 does not have, and it overlaps the request_errors field vllm-project#8635 adds. Leave
it for a separate change: remove RequestPreprocessingError, the runner and
scheduler request_errors plumbing and the Talker wrapper.

Signed-off-by: BeatSeat <wendavid552@gmail.com>
Exclude only the vendored Lychee-FD Token2Wav directory from the typos
hook. Preserve upstream keyword arguments and leave all other hooks
and project spelling checks enabled.

Signed-off-by: elpsykongloo <113705189+elpsykongloo@users.noreply.github.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 new model add new model

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants