执行摘要
- 一句话:MiniMax-M3 Rust 工具解析器测试跳过防护
- 推荐动作:值得直接合并。这是一个微小但正确的测试健壮性修复,符合项目已有模式,无任何副作用。可作为同类问题的参考案例。
功能与动机
PR body 明确指出:test_minimax_m3_tool_parser.py 在 Rust 扩展未编译到 wheel 时(例如 CPU-only wheels)会因 RuntimeError: Rust tool parsing requires the vllm._rust_tool_parser PyO3 extension 而失败,需要添加与 test_rust_tool_parser.py 一致的 importorskip 守卫以优雅跳过。
实现拆解
- 在
tests/tool_parsers/test_minimax_m3_tool_parser.py 的 import 之后、pytestmark 之前插入 pytest.importorskip("vllm._rust_tool_parser"),并在上方添加注释说明其与 test_rust_tool_parser.py 的守卫模式一致。
- 无其他文件改动。变更仅 4 行新增、0 行删除,不涉及任何源码逻辑修改。
关键文件:
tests/tool_parsers/test_minimax_m3_tool_parser.py(模块 测试;类别 test;类型 test-coverage): 唯一变更文件,添加了 pytest.importorskip 守卫以在 Rust 扩展缺失时跳过测试。
关键符号:未识别
关键源码片段
tests/tool_parsers/test_minimax_m3_tool_parser.py
唯一变更文件,添加了 pytest.importorskip 守卫以在 Rust 扩展缺失时跳过测试。
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import json
from typing import Any
import pytest
from vllm.entrypoints.openai.chat_completion.protocol import (
ChatCompletionToolsParam,
FunctionDefinition,
)
from vllm.entrypoints.openai.engine.protocol import DeltaMessage
from vllm.tool_parsers import ToolParserManager
from vllm.tool_parsers.minimax_m3_tool_parser import MinimaxM3ToolParser
# MinimaxM3ToolParser 继承自 RustToolParser;
# 当 PyO3 扩展缺失时跳过测试(与 test_rust_tool_parser.py 的守卫模式一致)
pytest.importorskip("vllm._rust_tool_parser")
pytestmark = [pytest.mark.cpu_test, pytest.mark.skip_global_cleanup]
NS = "]<]minimax[>["
EOS_ID = 99
class FakeTokenizer:
"""用于单元测试的最小化假 tokenizer"""
def __init__(self):
self.model_tokenizer = True
self.vocab: dict[str, int] = {}
def get_vocab(self) -> dict[str, int]:
return self.vocab
def sample_tools() -> list[ChatCompletionToolsParam]:
return [
ChatCompletionToolsParam(
function=FunctionDefinition(
name="create_order",
parameters={
"type": "object",
"properties": {
"user_id": {"type": "integer"},
"urgent": {"type": "boolean"},
"note": {"type": "string"},
"shipping": {
"type": "object",
"properties": {
评论区精华
PR 作者 mwoodson 在评论中明确引用了两个证据:test_rust_tool_parser.py 已在第 17 行使用 pytest.importorskip,以及 MinimaxM3ToolParser 继承自 RustToolParser,因此需要相同的守卫。审核者 BugenZhao 表示 Thanks! 并批准合并,无进一步讨论。
风险与影响
- 风险:风险极低。变更仅为测试文件添加了 import 跳过守卫,不会影响任何生产代码或测试通过率。唯一潜在风险是如果未来 Rust 扩展被彻底移除但该守卫未及时清理,会导致测试被跳过而无人察觉,但此类情况属于长期维护问题。
- 影响:影响范围有限:仅影响
tests/tool_parsers/test_minimax_m3_tool_parser.py 的测试执行流程。对用户无影响;对开发者:在未编译 Rust 扩展的环境中(如 CPU-only 构建),该测试将显示 SKIPPED 而非 FAILED,避免 CI 误报或下游构建中断。
- 风险标记:暂无
关联脉络
- PR #47984 [ROCm][MiniMax-M3][Spec Decode] Support speculative decode with AITER sparse PA: 同为 MiniMax-M3 相关功能 PR,本次修复是其测试配套的完善。
参与讨论