Prhub

#1902 Fix CI: update rollout_data_postprocess plugin contract for new call site

原始 PR 作者 jingshenghang 合并时间 2026-05-11 16:05 文件变更 1 提交数 1 评论 0 代码增减 +4 / -4

执行摘要

修复测试合约未同步新参数签名

Commit bd217a63 将 actor.py:488self.rollout_data_postprocess(self.args) 改为 self.rollout_data_postprocess(self.args, rollout_id, rollout_data),但未同步更新插件合约测试,导致 test_runtime_hook_callsite_is_stable[rollout_data_postprocess] 在后继 PR 上持续失败。本 PR 旨在同步合约,使主分支 CI 恢复通过。

值得快速合并。该 PR 是典型的 CI 同步修复,无设计争议。对于关注插件系统的开发者,可借此理解 Slime 的合约测试机制:每个插件点都有对应的 reference_* 函数、invoke_* 调用和 HookCase 配置,用于在 CI 中验证调用签名稳定性。

讨论亮点

该 PR 无 review 评论,变更直接合并,未产生讨论。

实现拆解

  1. 更新引用实现函数签名:将 reference_rollout_data_postprocess 的参数从 (args) 改为 (args, rollout_id, rollout_data),使其与当前实际调用签名一致。
  2. 更新调用函数:将 invoke_rollout_data_postprocess 中的调用从 fn(args) 改为 fn(args, 0, {}),模拟传递 rollout_idrollout_data
  3. 更新 HookCase 声明:将对应 rollout_data_postprocessruntime_marker 字段从 "self.rollout_data_postprocess(self.args)" 改为 "self.rollout_data_postprocess(self.args, rollout_id, rollout_data)",并将 expected_params("args",) 改为 ("args", "rollout_id", "rollout_data")。所有修改均集中在 tests/plugin_contracts/test_plugin_runtime_hook_contracts.py
文件 模块 状态 重要度
tests/plugin_contracts/test_plugin_runtime_hook_contracts.py 合约测试 modified 4.71

关键符号

reference_rollout_data_postprocess invoke_rollout_data_postprocess

关键源码片段

tests/plugin_contracts/test_plugin_runtime_hook_contracts.py test-coverage

该文件是 PR 唯一修改的文件,包含了合约测试的全部变更:更新了 `reference_rollout_data_postprocess` 函数签名、`invoke_rollout_data_postprocess` 调用方式以及 `HookCase` 中的 `runtime_marker` 和 `expected_params`。

# tests/plugin_contracts/test_plugin_runtime_hook_contracts.py
# 更新后的引用实现:签名与当前调用点一致
def reference_rollout_data_postprocess(args, rollout_id, rollout_data) -> None:
    args.rollout_data_postprocess_called = True# 更新后的调用函数:传递 rollout_id 和 rollout_data 伪参数
def invoke_rollout_data_postprocess(fn):
    args = type("Args", (), {})()
    assert fn(args, 0, {}) is None # 原为 fn(args)
    assert args.rollout_data_postprocess_called is True# HookCase 配置中的对应条目(部分)
HookCase(
    "rollout_data_postprocess",
    "ROLLOUT_DATA_POSTPROCESS_PATH",
    "plugin_contracts.test_plugin_runtime_hook_contracts.reference_rollout_data_postprocess",
    "slime/backends/megatron_utils/actor.py",
    "self.rollout_data_postprocess(self.args, rollout_id, rollout_data)", # 原为 self.args
    ("args", "rollout_id", "rollout_data"), # 原为 ("args",)
    invoke_rollout_data_postprocess,
),

评论区精华

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

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

风险与影响

风险极低。变更是纯测试合约修复,仅涉及单个测试文件中的符号定义和调用参数。不过需确认第三方插件是否已适配新签名,若仍有插件使用旧签名(self.rollout_data_postprocess(self.args)),则可能引发运行时错误。建议在合并后运行完整的 CI 测试套件。

直接影响:修复主分支 CI 测试 test_runtime_hook_callsite_is_stable[rollout_data_postprocess] 的持续失败,确保后续 PR 的合约校验可以通过。间接影响:第三方插件开发者需确保其 rollout_data_postprocess 插件匹配新签名(args, rollout_id, rollout_data)。影响范围限于测试和插件合约,不涉及推理或训练核心逻辑。

兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论