Repository navigation
fix(benchmark): prepare native control registrations through backend - #8347
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
需要为原生 Official 或 Native Goal 运行接入显式主机观察钩子的 benchmark 操作者会遇到这个问题。
过去在没有反馈或检查点观察器时,CLI 跳过 backend 的注册准备,运行仍继续,显式提供的主机观察钩子却没有绑定;现在每种 worker profile 都先交由 backend 准备选项,再进入原生注册。
独立基线与修复对比确认,自定义钩子在注册后、任何 worker 创建前绑定,准备失败则阻止注册;默认无观察器运行继续使用空选项。
本次只修复已有注册接缝,不新增观察器、不改变评分、提交机会、冷却或恢复权限,也不证明长时任务的最终得分。
改动思路 / Approach
保留 backend 作为可选观察策略的唯一拥有者,CLI 删除重复条件即可修复真实调用者,既不用扩大默认激活,也不用新增状态或兼容分支。
当前 PR 边界是生产 CLI 对现有 backend 方法的统一委托、对应语义回归测试与文档澄清;部署、真实模型执行和运行恢复另由各自拥有者处理。
我先比较了不修改、强行添加观察器和直接复用现有接缝三种方案。前者保留已复现的漏绑,第二种改变原生对照的执行设置;统一委托现有方法只移除重复条件。注册选项准备发生在 Python 调用参数求值阶段,因此准备异常会先于原生注册。随后原生 provider 注册、调用返回的主机钩子,再进入 worker 创建;这条顺序通过真实本地 HTTP 注册验证,没有把测试 provider 提供的成功当成真实 provider 的证明。
具体改动 / Changes
关键代码讲解
main,L537–553:只删除 observer 条件,所有五种 profile 统一调用backend.registration_options(run_agent)。既有异常路径写入runner_failed和异常类型并重新抛出,准备失败不会进入原生注册。registration_options,L46–52:未修改的默认拥有者仍要求明确观察器与 provider callback 参数,两者不满足就返回空字典。统一调用并不等于启用观察器。bind_registration,L54–61:继续拒绝空值和重复绑定,只把注册 token 交给已启用的 host observer。原有较旧 provider 的环境绑定与 blind 清理规则均保留。
审查基准是 benchmark/README.md,spec_revision 为 d0455f445159e1eeaa9d2c48cd7d5392e41484f3 的原生 observer 合同,并阅读了 #7124。HOST_CALLBACK_ORDER、DEFAULT_OBSERVER_OFF、HOST_ONLY_CREDENTIAL 三项均为 implemented;分别由真实 callback 顺序、成对默认分支以及现有 host/legacy 绑定和 blind 环境测试覆盖。当前维护者请求的 all-profile 修复由实际 CLI 基线反例验证,而非用更新后的文档自行证明。
完整 diff 为八个文件、135 增/12 删,其中生产代码只有 1 增/2 删;117 行新测试覆盖五种 profile 的默认/显式钩子与两种原生对照的准备异常。其他测试改动只为已有 backend 测试替身补齐其现有方法,文档明确默认不启用 observer;没有新字段、CLI、持久状态或双重决策拥有者。
对主干的风险 / Risks
最有力的反例是:自定义测试 provider 会调用钩子,但真实原生 provider 不调用,或者在 worker 创建后才调用。我独立执行了原生 7bf767ddd2ee183769534ed7a577d60632bec59b 的 run_agent,使用真正的本地 HTTP /api/v1/register 和生产 backend 选项逻辑,明确在任何 worker 创建前终止。Official/Native Goal 的自定义钩子在基线均漏绑而失败,修复后均先绑定;两种默认分支在基线和修复均保持相同注册参数、无钩子。图像与容器边界为合成边界,没有运行模型、评分或真实容器。
| 独立检查 | 基线 | exact head |
|---|---|---|
| 五 profile 的生产 CLI 与准备异常 | 7 个预期失败、5 个默认通过 | PASS:12/12 |
| 真实 native + 本地 HTTP 注册 | 2 个自定义漏绑失败、2 个默认通过 | PASS:4/4 |
| feedback/checkpoint/native outcome/warm/research 组合 | 缺陷由上述成对反例隔离 | PASS:567;5 个既有 Docker opt-in 跳过 |
| Ruff、diff、RFC bilingual | 当前变更风险检查 | PASS |
完整代码与公共材料扫描、标准 premerge 的 19 个 selected checks 与 5 个 direct checks 使用作者 exact-head 报告复核;我检查了 revision、命令、结果以及全量 diff,确认没有改头或改调用者使该证据失效。独立静态与组合测试也已重跑。早期私有真实注册探针的配置断言与误用参数问题已保留,随后以相同显式配置执行成对最终探针;它们不是产品失败,也没有被当作通过结果。按 packet 的 wait_for_ci=false 未查询或等待 GitHub CI,合并就绪仍是独立门。
语义与 CI 对齐
此处复用既有 backend/provider 合同,没有新语义词汇。默认 observer-off 的参数、提示、注册请求、评分机会、冷却与恢复权限不变;唯一有意变化是显式 backend 准备现在始终被调用并可在原生准入前失败。重试仍由现有调用者与运行保留规则拥有。Python 仍仅承担原生 provider IO,不建立新的控制平面决策拥有者。
我的整体评价 / Verdict
APPROVE,审查 exact head 为 fdb94f0a10d4e83ef259e8688ae09d35eff2d73f,没有经验证的阻塞发现。long_horizon 为 improved:长程运行开始前不再静默丢弃明确主机观察钩子;这不是得分提升结论。user_experience 为 improved:沿用同一命令,不要求额外交互或人为添加观察器,失败可从现有 receipt 读回。该修复完整、可独立回滚,移除重复策略正是必要的同域简化;无需额外抽象或迁移。
检查的 benchmark CLI 与 backend 接缝没有渲染界面变化,因此 visual_review 不适用。
未验证范围:没有新增或改变的渲染页面;真实模型行为与长时任务收益未在本次执行。
真实 Docker/模型运行与长时得分未在本审查执行,既有五项 Docker opt-in 跳过保持明确。此结论只覆盖上述注册接缝;未授予部署、运行恢复、账号执行或 main merge 权限。
English verdict: APPROVE fdb94f0a10d4e83ef259e8688ae09d35eff2d73f. Independent base/head CLI and real native HTTP registration checks prove the supplied-hook repair and default-off parity; no blocking finding remains. Live model execution and merge authorization are outside this review.
Goal And Delivered Outcome
Native Official and Native Goal controls skipped backend registration preparation when feedback and checkpoint observers were absent. An explicitly supplied backend hook could therefore be omitted while the worker proceeded.
The CLI now consults the existing backend options method for every worker profile. The default backend retains empty options without observers; preparation errors stop before native admission.
main; related contract: fix(benchmark): bind native observers through host registration #7124.Author Declaration
RecordingDockerBackend.registration_optionsatd0455f445159e1eeaa9d2c48cd7d5392e41484f3; existing host registration contract in fix(benchmark): bind native observers through host registration #7124.benchmark/edgebench/run.pyScope And Continuation
Complete within this scope. The CLI's duplicate observer condition is removed so the existing backend owns optional callback selection. Existing test doubles now implement that backend method. The change is independently reversible; deployment and any campaign operation remain separate.
Validation
fdb94f0a10d4e83ef259e8688ae09d35eff2d73f.regression_parityunitreal_entrypointstaticmanualintegrationstaticCoverage: options are prepared once before native registration, and returned host callbacks bind before the synthetic worker boundary. Default empty options preserve submission interval, maximum and auto-evaluation settings. Live Docker/model operation is outside this validation scope.
Frontend / Visual Evidence
UI impact: none. This changes an existing internal benchmark runner seam. Before/after captures, viewport review and source data are not applicable.
Type Of Change
LoopX Area
Technical Direction
Existing benchmark runtime compatibility and default-off isolation.
Shared-authority RFC Fixture Impact
N/A; no shared authority or migration claim.
Boundary Checklist
Signed-off-bytrailer.