Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions knowledge/repos/vllm-omni/components/serving/rules.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: "Serving 规则"
created: 2026-07-20
updated: 2026-09-05
updated: 2026-10-23
type: rule
tags: [vllm-omni, components, serving]
sources: ["Issue #5369", "PR #3576", "PR #4583", "PR #4718", "PR #4834", "PR #4905", "PR #4912", "PR #5085", "PR #5157", "PR #5374", "PR #5670", "PR #5682", "PR #5713", "PR #5732", "PR #5746", "PR #5752", "PR #5843", "PR #5957", "PR #6008", "PR #6138", "PR #6202", "Issue #5811", "PR #6150", "claude-workflow-starter-private@09dca46", "zuiho-kai/claude-workflow-starter@c217fc6", .pre-commit-config.yaml, vllm_omni/entrypoints/async_omni.py, vllm_omni/entrypoints/omni_base.py, vllm_omni/entrypoints/openai/api_server.py, vllm_omni/entrypoints/openai/diffusion_request_utils.py, vllm_omni/entrypoints/openai/serving_chat.py, vllm_omni/entrypoints/openai/serving_speech.py, vllm_omni/entrypoints/openai/serving_video.py, vllm_omni/entrypoints/openai/video_api_utils.py, vllm_omni/entrypoints/openai/tts_adapters/, vllm_omni/engine/async_omni_engine.py, vllm_omni/engine/orchestrator.py, vllm_omni/engine/stage_pool.py, vllm_omni/engine/cfg_companion_tracker.py, vllm_omni/metrics/prometheus.py, tests/dfx/reliability/test_reliability_qwen3_omni.py, tests/engine/test_orchestrator_error_handling.py, tests/entrypoints/test_async_omni.py, tests/entrypoints/test_omni_entrypoints.py, tests/entrypoints/openai_api/test_api_server_guards.py, tests/entrypoints/openai_api/test_audex_serving_guards.py, tests/entrypoints/openai_api/test_omni_sleep_wakeup.py, tests/entrypoints/openai_api/test_serving_speech.py, tests/entrypoints/openai_api/test_tts_detection.py, tests/entrypoints/openai_api/test_video_api_utils.py, tests/entrypoints/openai_api/test_video_server.py, tests/tools/test_check_tts_adapter.py, tools/pre_commit/check_tts_adapter.py, "PR #4795", "PR #4755", "PR #3805", "PR #5878", "PR #6070", "PR #6122", "PR #4499", "PR #6050", "PR #6329", "PR #5999", "PR #5445", "PR #6288", "PR #6622", "PR #6499", "PR #6529", "PR #6776", recipes/MiniMaxAI/MiniMax-H3.md]
sources: ["Issue #5369", "PR #3576", "PR #4583", "PR #4718", "PR #4834", "PR #4905", "PR #4912", "PR #5085", "PR #5157", "PR #5374", "PR #5670", "PR #5682", "PR #5713", "PR #5732", "PR #5746", "PR #5752", "PR #5843", "PR #5957", "PR #6008", "PR #6138", "PR #6202", "Issue #5811", "PR #6150", claude-workflow-starter-private@09dca46, zuiho-kai/claude-workflow-starter@c217fc6, .pre-commit-config.yaml, vllm_omni/entrypoints/async_omni.py, vllm_omni/entrypoints/omni_base.py, vllm_omni/entrypoints/openai/api_server.py, vllm_omni/entrypoints/openai/diffusion_request_utils.py, vllm_omni/entrypoints/openai/serving_chat.py, vllm_omni/entrypoints/openai/serving_speech.py, vllm_omni/entrypoints/openai/serving_video.py, vllm_omni/entrypoints/openai/video_api_utils.py, vllm_omni/entrypoints/openai/tts_adapters/, vllm_omni/engine/async_omni_engine.py, vllm_omni/engine/orchestrator.py, vllm_omni/engine/stage_pool.py, vllm_omni/engine/cfg_companion_tracker.py, vllm_omni/metrics/prometheus.py, tests/dfx/reliability/test_reliability_qwen3_omni.py, tests/engine/test_orchestrator_error_handling.py, tests/entrypoints/test_async_omni.py, tests/entrypoints/test_omni_entrypoints.py, tests/entrypoints/openai_api/test_api_server_guards.py, tests/entrypoints/openai_api/test_audex_serving_guards.py, tests/entrypoints/openai_api/test_omni_sleep_wakeup.py, tests/entrypoints/openai_api/test_serving_speech.py, tests/entrypoints/openai_api/test_tts_detection.py, tests/entrypoints/openai_api/test_video_api_utils.py, tests/entrypoints/openai_api/test_video_server.py, tests/tools/test_check_tts_adapter.py, tools/pre_commit/check_tts_adapter.py, "PR #4795", "PR #4755", "PR #3805", "PR #5878", "PR #6070", "PR #6122", "PR #4499", "PR #6050", "PR #6329", "PR #5999", "PR #5445", "PR #6288", "PR #6622", "PR #6499", "PR #6529", "PR #6776", recipes/MiniMaxAI/MiniMax-H3.md, "PR #6824", "PR #9282"]
confidence: high
---

Expand Down Expand Up @@ -237,3 +237,12 @@ confidence: high
- 强制:INFO 级别只记录 request ID、模型类型、voice clone、reference image 和参数等元数据;用户输入仅在 `self.request_logger` 存在时通过 `logger.debug` 输出,并按 `max_log_len` 预留日志前缀长度进行截断;未配置上限时使用 200 字符默认上限。
- 禁止:在 INFO 日志中写入原始 `text` 或 `prompt`;无条件输出 DEBUG 用户内容;使用固定预览长度替代请求日志开关;在未配置 `max_log_len` 时输出无界用户输入。
- 验收:覆盖 TTS、diffusion TTS、audio generation 和 diffusion chat,断言 INFO 不含用户内容;启用 `--enable-log-requests` 时 DEBUG 才输出内容,且配置与未配置 `max_log_len` 时均遵守截断上限。 ^[PR #6329]

## VLLM-OMNI-PR9282-DUPLEX-APPEND-GATE — 全双工响应门只统计未完成的 response-bound append 任务

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Use a stable SERV ID for the duplex rule

Rename this rule to the page's auditable SERV-<number><letter> form. knowledge/tools/check_review_report.py only extracts IDs matching [A-Z][A-Z0-9]*-\d+[a-z]?, and this page itself says only SERV-数字字母 IDs are auditable; because the file already contains other valid IDs, the validator silently omits this new rule rather than reporting that the file has no IDs, so Direct reviews never evaluate the new append-gate contract.

Useful? React with 👍 / 👎.


- 触发:修改 `vllm_omni/engine/duplex/session/context.py` 中 append 任务的跟踪与清理、`has_response_bound_append_tasks` / `cancel_append_tasks`,或 barge-in/VAD 之后新回合的响应门判定。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Move the duplex gate rule to the session-lifecycle owner

Move this rule to rules-session-lifecycle.md and update the corresponding route. The serving index explicitly sends deferred gates, barge-in cancellation, response ownership, and session cleanup to that page, which already owns those contracts; a review following that route will not see this rule at the bottom of the generic serving page.

AGENTS.md reference: AGENTS.md:L12-L17

Useful? React with 👍 / 👎.

- 强制:响应门只统计 `response_bound` 且尚未 `task.done()` 的 append 任务;已运行完成但仍留在 `append_tasks` 里等待 done callback 清理的任务,不得在 barge-in 取消前一响应后继续关闭下一语音回合的响应门。活动响应与未播放输出仍由各自独立的门控制。
- 禁止:仅凭任务仍出现在 `append_tasks` 中(不检查 `task.done()`)就让响应门保持关闭;不得用 sleep、时序假设或削减参数化来掩盖该窗口。
- 验收:`tests/engine/duplex/test_session_manager.py` 必须覆盖真实 asyncio 任务已完成但 done callback 尚未运行的窗口,并对 response_bound 与非 response_bound 两种情况断言门状态;运行 duplex 相关 core_model CPU 测试(`tests/engine/duplex` 与 `tests/model_executor/models/qwen3_omni/test_duplex_plugin.py`)确认多轮音频用例不再间歇性失败;`docs/design/fullduplex.md` 同步该门语义。^[PR #9282]

<!-- kb:rule status=active since=v0.30.0 -->
13 changes: 11 additions & 2 deletions knowledge/repos/vllm-omni/models/minimax-h3/rules-loading.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: "MiniMax H3 加载规则"
created: 2026-09-02
updated: 2026-09-04
updated: 2026-10-23
type: rule
tags: [vllm-omni, models, diffusion]
sources: ["PR #5706", "PR #5737", "PR #5824", vllm_omni/diffusion/models/minimax_h3/encoder.py, vllm_omni/diffusion/models/minimax_h3/minimax_h3_transformer.py, vllm_omni/diffusion/models/minimax_h3/pipeline_minimax_h3.py, tests/diffusion/models/minimax_h3/test_minimax_h3_contract.py, "PR #5910", "PR #6213", "PR #6445", "PR #6486"]
sources: ["PR #5706", "PR #5737", "PR #5824", vllm_omni/diffusion/models/minimax_h3/encoder.py, vllm_omni/diffusion/models/minimax_h3/minimax_h3_transformer.py, vllm_omni/diffusion/models/minimax_h3/pipeline_minimax_h3.py, tests/diffusion/models/minimax_h3/test_minimax_h3_contract.py, "PR #5910", "PR #6213", "PR #6445", "PR #6486", "PR #8801"]
confidence: high
---

Expand Down Expand Up @@ -72,3 +72,12 @@ H3 的该 contract 当前只为 BF16 no-AllGather DLO final-layout consumer 接
区分 TP rank/size 与 SP layout,等价 DP replicas 才共享;TP/SP/layout/model revision 改变时必须以
`preferred` 重新产生 artifact,`required` 只消费 exact hit。它不扩大 direct checkpoint mmap、
online quantization 或 AllGather 的支持范围。^[PR #6486]

## VLLM-OMNI-PR8801-H3-NATIVE-PARTITION — 本地 MiniMax-H3 判定必须让 native 分区布局优先于 modular 标记文件

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Use a stable MMH3 ID for the loading rule

Rename this heading to the model owner's MMH3-<number><letter> namespace and add it to the MiniMax-H3 quick map. The owner entry page states that only MMH3-数字字母 IDs are auditable, while check_review_report.py rejects the hyphenated VLLM-OMNI-PR... shape; existing valid IDs prevent a validation error, leaving this new checkpoint rule silently absent from generated review reports.

Useful? React with 👍 / 👎.


- 触发:修改 `vllm_omni/model_executor/models/minimax_h3/checkpoint.py` 的 `is_minimax_h3_modular`、`_NATIVE_PARTITIONS`、`resolve_minimax_h3_model_root`/`resolve_minimax_h3_diffusion_model_path`,或本地 checkpoint 的 native/FastH3 modular 判定顺序。
- 强制:本地目录必须先按 native 分区判定——`FL2VA/model_index.json` 或 `Ref2VA/model_index.json` 存在即判 native(返回 `False`),之后才检查 `modular_model_index.json`/`fastvideo_inference.json` 标记。依据是官方 `MiniMaxAI/MiniMax-H3` 仓库会在根目录同时携带 `modular_model_index.json` 与 `FL2VA/`/`Ref2VA/` 分区,而 FastH3 modular release 没有分区;误判会让 pipeline init 因找不到 `fastvideo_inference.json` 抛 `FileNotFoundError`。native root 下 encoder resolver 必须返回 `FL2VA/text_encoder`,diffusion resolver 返回 `FL2VA`。Hub ID 走独立分支,不受该本地目录判定影响。
- 禁止:仅凭 modular 标记文件存在就把含分区的本地快照判成 FastH3 modular;把没有 `model_index.json` 的空分区目录当作 native 证据;改动判定顺序时影响 Hub ID 分支或破坏既有 FastH3 本地/Hub 检测语义。
- 验收:`tests/diffusion/models/minimax_h3/test_fasth3_checkpoint.py` 必须同时覆盖混合根 case(`FL2VA/`+`Ref2VA/`+`modular_model_index.json` 判为 native,且两个 resolver 返回分区路径)与对照 case(仅空分区目录加 modular 标记仍判为 modular),并保持既有 FastH3 本地与 Hub 检测测试全部通过。^[PR #8801]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Keep unmerged PR 8801 out of active knowledge

Do not activate this rule until its upstream behavior has landed. At this snapshot, PR #8801 is still open, whereas the configured intake consumes merged PRs and the upstream-fact gate explicitly rejects a cited PR that is not merged (test/test_kb_upstream_facts.py:118-124). Publishing it as active would tell future reviewers to enforce behavior that is not present in the audited upstream main revision and would fail the repository's live-fact publication gate.

Useful? React with 👍 / 👎.


<!-- kb:rule status=active since=v0.30.0 -->
Loading