Repository navigation
knowledge(vllm-omni): 2 change(s) from intake #399
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 | ||
| --- | ||
|
|
||
|
|
@@ -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 任务 | ||
|
|
||
| - 触发:修改 `vllm_omni/engine/duplex/session/context.py` 中 append 任务的跟踪与清理、`has_response_bound_append_tasks` / `cancel_append_tasks`,或 barge-in/VAD 之后新回合的响应门判定。 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Move this rule to 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 --> | ||
| 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 | ||
| --- | ||
|
|
||
|
|
@@ -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 标记文件 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Rename this heading to the model owner's 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] | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
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 ( Useful? React with 👍 / 👎. |
||
|
|
||
| <!-- kb:rule status=active since=v0.30.0 --> | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rename this rule to the page's auditable
SERV-<number><letter>form.knowledge/tools/check_review_report.pyonly extracts IDs matching[A-Z][A-Z0-9]*-\d+[a-z]?, and this page itself says onlySERV-数字字母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 👍 / 👎.