HarborBackend 被移除,HarborBackendV2 成为新的 HarborBackend,并采用不同的 constructor 和 execution model。
请选择与当前 backend 对应的迁移路径:
修改代码前:
- 保留最近一次成功的 v0.2 evaluation run,以便对比。
- 使用 Python 3.12 或更高版本。
- 修改 SDK requirement 后,重新创建 rollout environment 和 lockfile。
- 迁移前后都搜索一次已移除的 API。
LocalBackend 用户
LocalBackend 在 v0.3 中保留相同的 keyword-only constructor:
1. 升级 Package 并选择功能
基础 distribution 包含 CLI 和 framework-neutral rollout core。只添加 rollout 实际 import 的 extras:openai-agents、harbor、rubric 和 parquet。
2. 从多个 Sample 改为一个 Sample
每次 workflow execution 现在最多生成一个RolloutSample,grader 为它分配一个标量 reward。
将遍历 samples 的 grader 改为显式检查一个 sample:
set_reward() 会抛出 ValueError。在评分前显式抛出错误,通常能提供更清晰的 evaluation failure。
3. 每次 Execution 只注册一个 Agent 或 Session
在AgentWorkflow.run() 内只构造一个已注册的 OsmosisStrandsAgent 或 OsmosisMemorySession。第二次 registration 会抛出 ValueError。
对于 OpenAI Agents,v0.3 session 不再接收 name 或 sample-ID 参数:
4. 更新自定义 Sample Source
内置 integrations 已使用 v0.3 API。自定义 integration 必须实现单数形式的 source contract:RolloutSample 设置 id。如需控制标准化的 ATIF transcript,请设置 trajectory_messages;将其设为 None 会关闭该 sample 的 trajectory 持久化。
5. 更新自定义 Routing 和 Backend Adapter
如果只使用内置 integrations 和LocalBackend,请跳过此步骤。
将 execution 提供的 chat-completions 和 callback URL 视为不透明的 rollout-scoped endpoints。不要追加 rollout ID,也不要附加已移除的 x-sample-id 和 x-rollout-id routing headers。
自定义 backend 在 ExecutionResult 中返回一个 sample。如果直接读取 container exchange files,请将 reader 更新为单数 file names 和 payloads:
sample.json
reward.json
6. 验证 LocalBackend 迁移
-
确认 rollout 中不再出现已移除的 API:
- 重新创建 rollout environment,确保 lockfile 中包含 v0.3 和所选 extras。
- 在本地运行 workflow,确认每次成功的 execution 都生成一个 sample。
- 提交一次 evaluation run,确认每个已评分 sample 都有一个标量 reward。
- 在提交 training 前,将 reward 和最终 messages 与最近一次成功的 v0.2 evaluation 进行对比。
LocalBackend 常见问题
第二个 agent 或 session 触发 registration error
第二个 agent 或 session 触发 registration error
该 workflow execution 已经注册了 sample source。请复用一个 agent 或 session 完成 conversation,或者将独立 candidates 拆分到不同的 workflow executions。
Grader 没有 sample
Grader 没有 sample
请在
AgentWorkflow.run() 内构造受支持的 agent 或 session。在模块 import 时创建的 object 无法向 active rollout context 注册。无法导入可选 integration
无法导入可选 integration
在 rollout-local environment 中安装对应的 extra,然后重新生成 lockfile。
Model call 到达了错误的 rollout
Model call 到达了错误的 rollout
将提供的 chat-completions URL 直接传给 integration。移除重新构造 URL、追加 rollout path segment 或附加旧 routing headers 的代码。
HarborBackend 用户
Harbor 用户必须先完成 LocalBackend 用户中的共享 workflow、grader、sample-source 和 routing 变更,然后再迁移 Harbor class 和 constructor。1. 升级 Package 和 Import
安装 v0.3 Harbor 和 server 功能:HarborBackendV2,只需修改 class name,并保留其 v2 constructor arguments:
HarborBackendV2 不会作为 alias 保留。
2. 替换 Pre-v0.3 Constructor
旧 backend 会把 source tree 和 SDK mount 到 task environment。v0.3 backend 会把 workflow project 打包为 wheel,并安装到 task container 内。
如果 harness 使用了 private
_sdk_source_dir argument,请将其移除。
v0.3 constructor 还新增了以下控制项:
3. 选择 Task Mode
要最接近地替代旧的单个task_dir,请使用 template mode:
instruction.md。
当 tasks_dir 中每个 task 都有独立目录时,请使用 dataset mode:
metadata["harbor_task_id"];选中的 task 会保留自己的 instruction.md。
无论使用哪种 mode,metadata["harbor_task"] 都可以选择 per-rollout 本地路径、"org/name@ref" 形式的 Harbor registry package,或 Git task。Git task 还需要设置 metadata["git_url"],并应固定 metadata["git_commit_id"]。
如果旧 backend 使用 custom_tests_dir,请把这些 tests 移入每个 task:
grader=None,使用 task-native verifier。
4. 打包 Workflow 代码,而不是 Mount
对于AgentWorkflow,backend 会从 code_dir 构建 wheel,并在 trial 启动时安装到 container。该目录必须包含 pyproject.toml 和一个可导入的 top-level Python package。省略 code_dir 时,backend 会尝试定位包含 workflow class 的 project。
如果 build system 会提前创建 Osmosis bundle wheel,请使用 bundle=。不要同时传入两个路径并期望它们合并;提供 bundle 后会直接使用它。
旧的 HarborAgentWorkflowContext.environment adapter 已移除。Workflow 现在会在 task container 内运行,接收标准 AgentWorkflowContext,并通过普通 Python API 访问文件或 processes:
OsmosisInstalledAgent 也已移除。不要实例化或继承它;请通过 agent= 传入 AgentWorkflow,或选择已注册的原生 Harbor agent name。
5. 选择 Agent 和 Reward Source
agent= 接受 AgentWorkflow class/import path,或以下已注册的原生名称之一:"terminus-2"、"mini-swe-agent" 和 "oracle"。
"oracle" 会运行 reference solution 来验证 dataset 或 verifier。它不会生成 model trajectory,不能用于 training。6. 添加 Prewarming 和 Lifecycle Controls
在 rollout server 接收流量前,prewarm 所选 task images 和 agent setup:max_queue_depth 后,queue 已满时 POST /rollout 会返回带 Retry-After: 5 的 429。v0.3 还提供:
GET /rollout/{rollout_id}/statusPOST /rollout/cancelHarborBackend.rollout_status()HarborBackend.cancel_rollouts()
7. 验证 HarborBackend 迁移
-
确认旧 class 和 constructor keywords 不再出现:
-
确认
tasks_dir指向有效的 template task 或 dataset root。 - 构建 workflow bundle,并修复 package layout 或缺少 dependency 的错误。
-
Template mode 运行
await backend.prewarm();dataset mode 则传入 task IDs。 - 提交一个 rollout,并检查 workflow sample、reward source、Harbor logs 和已归档 artifacts。
- 如果 calling controller 依赖 status 和 cancellation,请实际验证这些功能。
- 在 training 前运行 evaluation,并将 reward 和最终 messages 与最近一次成功的 v0.2 run 对比。
HarborBackend 常见问题
HarborBackend 拒绝 task_dir、user_code_dir 或 workflow
HarborBackend 拒绝 task_dir、user_code_dir 或 workflow
Import 已解析到 v0.3 backend,但调用仍使用已移除的 constructor。请按照上表替换所有旧 parameters。
无法打包 workflow project
无法打包 workflow project
将
code_dir 指向包含 pyproject.toml 和一个可导入 package 的目录。确保 workflow 和 grader 可以通过该 package 的 import path 寻址。Dataset-mode request 找不到 task
Dataset-mode request 找不到 task
将
metadata["harbor_task_id"] 设为 tasks_dir 下的目录,或将 metadata["harbor_task"] 设为受支持的本地、package 或 Git reference。Trial 完成后没有 reward
Trial 完成后没有 reward
传入 Osmosis
grader,或设置 grader=None 并确认所选 task 包含可正常运行的 tests/ verifier。Rollout 代码仍依赖 ctx.environment
Rollout 代码仍依赖 ctx.environment
移除 legacy adapter 调用。Workflow 现在运行在 container 内,因此请使用普通 filesystem、subprocess 和 network API。