执行摘要
- 一句话:修复 parser 测试与 CI 触发路径
- 推荐动作:建议 PR 阅读者关注测试与 CI 触发路径的一致性,类似的源文件-测试触发关系应在添加新模块时一并配置。
功能与动机
PR #44279 移除了 vllm/parser/abstract_parser.py 中的 _WrappedParser 并更新了 test_streaming.py,但同期合并的 test_parse.py 仍引用了 _WrappedParser,且 CI 没有将 vllm/parser/ 作为触发路径,导致测试失败未被及时发现。
实现拆解
- 修复测试文件 (
tests/parser/test_parse.py):将导入从 _WrappedParser 改为 DelegatingParser,并在 make_parser 函数中定义 TestParser 子类替代直接操作类属性的方式。
- 修复 CI 触发配置 (
.buildkite/test_areas/misc.yaml):在 Async Engine, Inputs, Utils, Worker, Config (CPU) 任务的 source_file_dependencies 中添加 vllm/parser/ 路径,确保 vllm/parser/ 下的文件变更能触发该 CI job。
关键文件:
tests/parser/test_parse.py(模块 解析器;类别 test;类型 test-coverage;符号 TestParser): 核心测试文件,修复了因 _WrappedParser 被移除而导致的导入和控制流错误。
.buildkite/test_areas/misc.yaml(模块 CI配置;类别 config;类型 configuration): CI 配置修复,添加 vllm/parser/ 到 source_file_dependencies,确保源文件变更触发测试。
关键符号:make_parser
关键源码片段
tests/parser/test_parse.py
核心测试文件,修复了因 _WrappedParser 被移除而导致的导入和控制流错误。
# tests/parser/test_parse.py (partial)
from vllm.entrypoints.openai.chat_completion.protocol import ChatCompletionRequest
from vllm.parser.abstract_parser import DelegatingParser # 替换 _WrappedParser
from vllm.reasoning.basic_parsers import BaseThinkingReasoningParser
from vllm.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
...
def make_parser(tokenizer, reasoning=False, tool=False):
# 改为定义 TestParser 子类,避免直接修改类属性
class TestParser(DelegatingParser):
reasoning_parser_cls = ThinkReasoningParser if reasoning else None
tool_parser_cls = Hermes2ProToolParser if tool else None
return TestParser(tokenizer)
评论区精华
Reviewer MatthewBonanni 批准了该 PR,无额外评论。Issue 评论中提到文档构建失败,但与本 PR 无直接关联。
风险与影响
- 风险:风险极低。变更仅涉及测试和 CI 配置,测试文件修复确保与现有 API 兼容,CI 配置变更只会增加触发条件,不会影响现有流程。
- 影响:影响范围限于测试和 CI 流程。
test_parse.py 将正确使用 DelegatingParser,CI 现在会在 vllm/parser/ 源码变更时自动运行相关测试,避免类似遗漏。
- 风险标记:测试覆盖调整
关联脉络
- PR #44279 [refactor] Remove _WrappedParser: 本 PR 修复了因 #44279 移除 _WrappedParser 导致的测试失败。
参与讨论