执行摘要
- 一句话:修复 BGE-M3 测试中 token 前导空格期望值
- 推荐动作:建议快速合并以解封 CI,这是对上游变更的被动适配,无设计深度。测试维护者应关注 SentencePiece 行为变化是否稳定,并考虑增加更全面的测试输入覆盖。
功能与动机
PR #48674 修改了 BGE-M3 稀疏嵌入插件的行为,使 SentencePiece 保留前导空格(如 ▁What 解码为 " What" 而非 "What"),导致现有测试中的 token 期望值与实际输出不匹配,CI 失败。此 PR 旨在更新测试期望值以对齐改动,快速解封 CI。
实现拆解
- 定位问题:PR #48674 恢复了 SentencePiece 的前导空格,使得
token 字段包含前导空格(如 " What"),而测试硬编码了无空格的 token 字符串(如 "What"),导致断言失败。
- 修改测试期望值:在
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" 等。
- 保持其他逻辑不变:测试的权重值、token_id、断言逻辑和
check_tokens 路径均未修改,仅调整 token 字符串以匹配插件实际输出。
- CI 验证:运行
ruff-format 和 ruff-check 确保代码风格合规,并通过 git diff --check 检查无残留差异。
关键文件:
tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py(模块 测试;类别 test;类型 test-coverage;符号 _check_sparse_embedding): 唯一变更文件,调整了 BGE-M3 稀疏嵌入插件测试中的 token 期望值以适配前导空格行为,直接解除 CI 阻塞。
关键符号:_check_sparse_embedding
关键源码片段
tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py
唯一变更文件,调整了 BGE-M3 稀疏嵌入插件测试中的 token 期望值以适配前导空格行为,直接解除 CI 阻塞。
# tests/plugins_tests/test_bge_m3_sparse_io_processor_plugins.py
def _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}
# ... 其余断言逻辑不变
评论区精华
无 review 评论线程。PR 由 noooop 批准合并,主要讨论在 Issue 评论中:noooop 询问是否应先合并以解封 CI,staugust 同意合并,并表示若需保持之前输出可后续调整插件。
风险与影响
- 风险:风险极低。变更仅修改测试硬编码的期望值,不涉及生产代码逻辑。权重和 token_id 均未改动,断言函数相同,因此回归风险极小。但需注意:若未来 SentencePiece 行为再次变化,测试需同步更新;当前测试仅覆盖了特定输入("What is the capital of France?"),可能无法覆盖所有变化场景。
- 影响:影响范围小。仅影响 BGE-M3 稀疏嵌入插件的测试文件,使该测试与最新插件行为一致,从而解除 CI 阻塞。对生产系统、用户接口和其他模块无影响。
- 风险标记:依赖上游行为变更, 仅覆盖单输入场景
关联脉络
- PR #48674 Restore leading spaces in BGE-M3 sparse plugin: 本 PR 的所有测试期望值更新正是为了适配 PR #48674 恢复的前导空格行为,两者直接关联。
参与讨论