Prhub

#49269 Update BGE-M3 token expectations for leading spaces

原始 PR 作者 aoshen02 合并时间 2026-07-21 11:49 文件变更 1 提交数 3 评论 3 代码增减 +6 / -6

执行摘要

修复 BGE-M3 测试中 token 前导空格期望值

PR #48674 修改了 BGE-M3 稀疏嵌入插件的行为,使 SentencePiece 保留前导空格(如 ▁What 解码为 " What" 而非 "What"),导致现有测试中的 token 期望值与实际输出不匹配,CI 失败。此 PR 旨在更新测试期望值以对齐改动,快速解封 CI。

建议快速合并以解封 CI,这是对上游变更的被动适配,无设计深度。测试维护者应关注 SentencePiece 行为变化是否稳定,并考虑增加更全面的测试输入覆盖。

讨论亮点

无 review 评论线程。PR 由 noooop 批准合并,主要讨论在 Issue 评论中:noooop 询问是否应先合并以解封 CI,staugust 同意合并,并表示若需保持之前输出可后续调整插件。

实现拆解

  1. 定位问题:PR #48674 恢复了 SentencePiece 的前导空格,使得 token 字段包含前导空格(如 " What"),而测试硬编码了无空格的 token 字符串(如 "What"),导致断言失败。
  2. 修改测试期望值:在 tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py_check_sparse_embedding 函数中,将 expected_weights 列表内所有 token 字符串前面加上空格,共 6 处修改(+6/-6)。例如 "token": "the" 改为 "token": " the""token": "What" 改为 "token": " What" 等。
  3. 保持其他逻辑不变:测试的权重值、token_id、断言逻辑和 check_tokens 路径均未修改,仅调整 token 字符串以匹配插件实际输出。
  4. CI 验证:运行 ruff-formatruff-check 确保代码风格合规,并通过 git diff --check 检查无残留差异。
文件 模块 状态 重要度
tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py 测试 modified 3.76

关键符号

_check_sparse_embedding

关键源码片段

tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py test-coverage

唯一变更文件,调整了 BGE-M3 稀疏嵌入插件测试中的 token 期望值以适配前导空格行为,直接解除 CI 阻塞。

# tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.pydef _check_sparse_embedding(data, check_tokens=False):
    expected_weights = [
        {"token_id": 32, "weight": 0.0552978515625, "token": "?"},
        # 以下 token 字符串均添加了前导空格,对齐 SentencePiece 解码行为 (#48674)
        {"token_id": 70, "weight": 0.09808349609375, "token": " the"},
        {"token_id": 83, "weight": 0.08154296875, "token": " is"},
        {"token_id": 111, "weight": 0.11810302734375, "token": " of"},
        {"token_id": 4865, "weight": 0.1171875, "token": " What"},
        {"token_id": 9942, "weight": 0.292236328125, "token": " France"},
        {"token_id": 10323, "weight": 0.2802734375, "token": " capital"},
    ]
    expected_embed = {x["token_id"]: x for x in expected_weights}
    # ... 其余断言逻辑不变

评论区精华

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

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

风险与影响

风险极低。变更仅修改测试硬编码的期望值,不涉及生产代码逻辑。权重和 token_id 均未改动,断言函数相同,因此回归风险极小。但需注意:若未来 SentencePiece 行为再次变化,测试需同步更新;当前测试仅覆盖了特定输入("What is the capital of France?"),可能无法覆盖所有变化场景。

影响范围小。仅影响 BGE-M3 稀疏嵌入插件的测试文件,使该测试与最新插件行为一致,从而解除 CI 阻塞。对生产系统、用户接口和其他模块无影响。

依赖上游行为变更 仅覆盖单输入场景

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论