Prhub

#47015 Fix transient dependency issues caused by `requirements/common.txt`

原始 PR 作者 hmellor 合并时间 2026-06-30 05:20 文件变更 8 提交数 4 评论 4 代码增减 +638 / -72

执行摘要

修复测试依赖固定与 xgrammar 兼容性

根据 PR 描述,测试可能因 requirements/common.txt 中的依赖未在测试依赖文件中固定而导致临时依赖版本浮动,引发 CI 失败。同时,xgrammar 0.2.3 在 json_schema content 中新增了 any_order 字段,导致 test_get_model_structural_tag_supports_vllm_hermes 中的精确字典比较断言失败。因此需要同时修复依赖固定和测试断言方式。

建议技术管理者关注此 PR 采用的依赖管理策略:将公共依赖固定在 common.txt 中,各平台测试依赖通过 -r 引用并用 pip-compile 生成锁定文件。这种方法值得在项目其他部分推广。测试断言的语义化改进也值得参考。

讨论亮点

本次 PR 未触发实质技术讨论。chaunceyjiangmgoin 直接 Approved,claude[bot] 自动评论由于来自 fork 未执行审查。作者在 CI 评论中说明 Hybrid SSM 失败是 main 分支已有的问题,与本次改动无关。

实现拆解

  1. 测试断言语义化:修改 tests/tool_parsers/test_structural_tag_registry.py,将 test_get_model_structural_tag_supports_vllm_hermes 中的 assert tag.model_dump() == {...} 逐字段比较结构(type、format、tags 内容等),避免因 xgrammar 版本升级增加新键(如 any_order)导致断言失败。
  2. 测试依赖固定:在 requirements/test/cuda.inrequirements/test/xpu.in 顶部添加 -r ../common.txt,使 pip-compile 自动将 common.txt 中的依赖纳入锁定文件。requirements/test/rocm.in 已存在该引用,保持不变。
  3. 剔除重复依赖:从 cuda.inrocm.in 中移除已在 common.txt 中声明的包(einopsopencv-python-headlessnumpypydantic),避免重复声明。
  4. 生成锁定文件:重新运行 pip-compile 更新 cuda.txtrocm.txtxpu.txt,将 common.txt 中的依赖(如 anthropiccompressed-tensorsdepyf等)及其子依赖加入,确保所有测试依赖版本固定。
  5. Docker 适配:在 docker/Dockerfile.cpu 中对应调整,使 CPU 镜像也能使用更新后的依赖管理。
文件 模块 状态 重要度
tests/tool_parsers/test_structural_tag_registry.py 测试 modified 5.51
requirements/test/cuda.in 依赖配置 modified 3.91
requirements/test/rocm.in 依赖配置 modified 3.71
requirements/test/xpu.in 依赖配置 modified 3.42
requirements/test/cuda.txt 依赖锁定 modified 4.38
requirements/test/xpu.txt 依赖锁定 modified 4.38
requirements/test/rocm.txt 依赖锁定 modified 1.83
docker/Dockerfile.cpu 容器配置 modified 2.4

关键符号

test_get_model_structural_tag_supports_vllm_hermes test_hermes_required_tool_calls_use_empty_separator

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低:测试断言改为语义比较,覆盖了与之前相同的验证点;依赖固定通过 pip-compile 生成锁定文件,遵循推荐实践。唯一需留意的是 .txt 锁文件的更新可能引入其他包的版本变更,但作者已运行完整 CI 确认无回归。

对开发者:CI 环境完全可重现,pip install -r requirements/test/<platform>.txt 将安装与 CI 一致的依赖,避免本地测试因依赖版本差异而与 CI 不符。对用户:无直接影响,所有变更限于测试基础设施和测试用例。对系统:降低因临时依赖问题导致的 CI 失败概率,提升测试可靠性。

低风险 CI 依赖管理改进 测试健壮性提升

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论