fix: G10 断点续跑透传 model_provider(sub2api 续跑失败修法)
断点续跑容器不带 --model-provider 时 Server 的 provider 表里 没有 sub2api,thread/resume 报 provider not found(probe15 实弹)。 Docker/Local 断点方法加可选 model_provider 并转发,worker 两处 调用点传 gateway_provider;补单测断言断点命令含 --model-provider sub2api(旧代码下两新测试 1 失败 1 报错)。
This commit is contained in:
1 parent
0ef896c317
commit
a19b1567bb
3 files changed
+96
-8
No files matched your search
@@ -414,6 +414,82 @@ class P1WorkerTestCase(unittest.TestCase):
|
||||
self.assertIn("goal-resume", cmd)
|
||||
self.assertNotIn("--goal-text", cmd)
|
||||
|
||||
# 12b. 断点续跑透传 model_provider:首轮 thread 在该
|
||||
# provider 下创建,续跑命令必须带同一 --model-provider,
|
||||
# 否则 thread/resume 因 provider 表里没有它而失败
|
||||
# (2026-10-29 probe15 实弹:sub2api not found)。
|
||||
def test_goal_resume_breakpoint_forwards_model_provider(self):
|
||||
docker_calls = []
|
||||
|
||||
def dfake(cmd, timeout=None):
|
||||
docker_calls.append(list(cmd))
|
||||
return SimpleNamespace(
|
||||
returncode=0,
|
||||
stdout="goal met after rounds\n"
|
||||
"usage input=10 cached=0 cache_write=0 output=5 "
|
||||
"reasoning=0 total=15 completions=1\n",
|
||||
stderr="")
|
||||
|
||||
task = {"id": "T1", "prompt": "orig goal"}
|
||||
docker = DockerExecutor(runner=dfake, env=FAKE_ENV)
|
||||
with mock.patch("cloud.sandbox.shutil.which",
|
||||
return_value="/usr/bin/docker"):
|
||||
docker.goal_resume_breakpoint_task(
|
||||
task, model_provider="sub2api")
|
||||
cmd = docker_calls[-1]
|
||||
self.assertIn("goal-resume", cmd)
|
||||
self.assertNotIn("--goal-text", cmd)
|
||||
self.assertIn("--model-provider", cmd)
|
||||
self.assertIn("sub2api", cmd)
|
||||
# 不传 provider 时不带该 flag(透传语义,不是强制默认值)。
|
||||
docker_calls.clear()
|
||||
with mock.patch("cloud.sandbox.shutil.which",
|
||||
return_value="/usr/bin/docker"):
|
||||
docker.goal_resume_breakpoint_task(task)
|
||||
self.assertNotIn("--model-provider", docker_calls[-1])
|
||||
|
||||
calls = []
|
||||
|
||||
def fake(cmd):
|
||||
calls.append(list(cmd))
|
||||
return SimpleNamespace(
|
||||
returncode=0,
|
||||
stdout="goal met after rounds\n"
|
||||
"usage input=10 cached=0 cache_write=0 output=5 "
|
||||
"reasoning=0 total=15 completions=1\n",
|
||||
stderr="")
|
||||
|
||||
local = LocalExecutor("/fake/host.py", runner=fake)
|
||||
local.goal_resume_breakpoint_task(task, model_provider="sub2api")
|
||||
self.assertIn("--model-provider", calls[-1])
|
||||
self.assertIn("sub2api", calls[-1])
|
||||
|
||||
# 12c. worker 本地断点调用点透传网关 provider:run_one
|
||||
# 认领 goal_resume_pending 任务后,本地断点命令必须带
|
||||
# 网关解析出的 --model-provider(Docker 调用点同理,
|
||||
# 沙箱级已覆盖命令形状)。
|
||||
def test_worker_local_breakpoint_forwards_gateway_provider(self):
|
||||
def fake(cmd):
|
||||
self.calls.append(list(cmd))
|
||||
return SimpleNamespace(
|
||||
returncode=0,
|
||||
stdout="goal met after rounds\n"
|
||||
"usage input=10 cached=0 cache_write=0 output=5 "
|
||||
"reasoning=0 total=15 completions=1\n",
|
||||
stderr="")
|
||||
|
||||
worker = self._worker(runner=fake)
|
||||
worker._ensure_gateway = lambda task: ("sub2api", {})
|
||||
_insert_task(self.db_path, "T1", goal_mode=1,
|
||||
goal="orig goal", goal_max_rounds=3,
|
||||
goal_resume_pending=1,
|
||||
model="gpt-5.6-terra")
|
||||
worker.run_one()
|
||||
self.assertEqual(_status(self.db_path, "T1"), "completed")
|
||||
self.assertTrue(any(
|
||||
"--model-provider" in cmd and "sub2api" in cmd
|
||||
for cmd in self.calls))
|
||||
|
||||
# 13. 开新目标:goal-resume 带 --goal-text(旧行为保留)
|
||||
def test_goal_resume_new_goal_keeps_goal_text(self):
|
||||
calls = []
|
||||
|
||||
Reference in new issue
Block a user