Skip to content

[Bugfix] Fix MiniCPM-o 4.5 seeded turns and window E2E inputs - #8160

Merged
Gaohan123 merged 1 commit into
vllm-project:mainfrom
Gaohan123:fix/issue-8154-duplex
Sep 25, 2026
Merged

Gaohan123 merged 1 commit into
vllm-project:mainfrom
Gaohan123:fix/issue-8154-duplex

Conversation

@Gaohan123

@Gaohan123 Gaohan123 commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Purpose

Addresses #8154.

Seeded MiniCPM-o 4.5 duplex requests fail with missing response.done and listen-only events. After #8152, the seed is marked pending, but its prompt opens an assistant turn while initialization still leaves current_turn_ended=True. Seeded plain-text requests can consequently remain listen-only. Initialize the existing native turn state with the seeded prefix and retain pending input through tts_bos, consuming it on the first content token. The model's turn_eos still closes the response and later silence returns to normal listening.

The short-window tests have a separate input problem: they discard context before retaining a complete 5.47-second fixture utterance, then stop the audio clock immediately after speech. The same input produced only listen decisions with windowing disabled. Retain enough context and send a five-second pause before commit. Basic and context windows still rebuild; completion, audio, error, close, subsequent-session, burst-input, camera, and two-minute-input assertions are unchanged.

Add a seed lifecycle regression covering absent/empty/English/Chinese text, speech-envelope handling, and silence after turn_eos.

AI assistance: Codex assisted investigation, implementation, test execution, and this PR description.

Test Plan

vLLM Version: 0.30.0; PyTorch 2.13.0+cu129; Transformers 5.14.1.

vLLM-Omni Commit: issue baseline 7a8d956; rebased onto main 5d0963b3d. Fix commit: 7a46fe7b4.

Real openbmb/MiniCPM-o-4_5 weights and repository input fixtures on an NVIDIA L20X, with the repository uv environment and HF_HOME=/workspace/models. The issue's H100 hardware was not available locally. All inference/tests ran under exclusive gpu run reservations.

Exact CI pytest command, from the repository root:

gpu run --gpu-ids 0 --user Gaohan123 --timeout 55m -- bash -lc '
source .venv/bin/activate
export HF_HOME=/workspace/models
pytest -s -v tests/e2e/online_serving/test_minicpmo_4_5_duplex.py tests/e2e/online_serving/test_minicpmo_4_5_window.py -m "advanced_model and cuda" --run-level "advanced_model"
'

Focused regression:

gpu run --gpu-ids 0 --user Gaohan123 --timeout 10m -- bash -lc '
source .venv/bin/activate
export HF_HOME=/workspace/models
pytest -q tests/worker/test_native_duplex_hooks.py -m "core_model and cpu" --run-level core_model
'

Existing CI already collects these files; no Buildkite routing change is needed.

Test Result

  • Original issue commit and rebased main: seeded failure reproduced with the exact CI command. Each baseline run was deliberately stopped after that failure; neither was a completed suite.
  • Latest rebased combined E2E on 7a46fe7b4: 20 passed, 1 deselected, exit 0, 1521.61 seconds (25m21s). All three short-window cases, all three continuous-input cases, and all three buffered-flush cases passed.
  • Latest combined worker/model/engine regressions: 692 passed, 1 skipped, 2 deselected, exit 0, 34.05 seconds.
  • Process-local replay of main's exact initializer against the new regression: 4 nonempty-seed failures, 4 empty/absent-seed passes, as expected; the fixed initializer passes all eight cases.
  • All applicable changed-file pre-commit hooks passed, including mypy-3.10, test marks, SPDX, import rules, Ruff, and typos. Full precheck-pr review completed; all required local validation passed.

The reported unbounded basic-window loop was not reproduced on unmodified rebased main: that continuous-input case passed in 213.77 seconds, with 132 real input units plus 64 bounded continuations. Repeated window replacement log lines alone do not demonstrate an infinite loop.

Merge-CI follow-up: main builds 16157 and 16158 show seven residual failures (seeded plain text, three short-window cases, three buffered cases), which these changes target. All three continuous-window cases passed there and in 16160. Build16157 also had a separate ordinary MiniCPM Code2Wav cuDNN failure; this PR does not change that backend or claim to fix it. Build16162 passed without selecting the MiniCPM jobs.

@vllm-omni-review-bot

Copy link
Copy Markdown

This PR appears to belong to: docs/design/module/model_integration.md, docs/design/module/ar_runtime.md.

Module owners: @tzhouam @fake0fan @gcanlin

Routing: @tzhouam via module of the changed files, CODEOWNERS; @fake0fan via module of the changed files; @gcanlin via module of the changed files

@Gaohan123, 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 25, 2026 •

Copy link
Copy Markdown

Omni ReviewBot triage note

Automated triage of commit 7a46fe7b482a produced:

  • Priority: high. Prompt maintainer attention is suggested.

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

Signed-off-by: Gao Han <hgaoaf@connect.ust.hk>
@Gaohan123

Copy link
Copy Markdown
Collaborator Author

@Gaohan123
Gaohan123 merged commit a8576cc into vllm-project:main Sep 25, 2026
7 of 9 checks passed
nagisa-kunhah pushed a commit to nagisa-kunhah/vllm-omni that referenced this pull request Oct 3, 2026
…roject#8160)

Signed-off-by: Gao Han <hgaoaf@connect.ust.hk>
Signed-off-by: nagisa-kun <1434936049@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-test label to trigger buildkite merge test CI ready label to trigger buildkite CI

Projects

None yet

2 participants