feat(tasks): 完整结果另存 result_text_full,详情不再只剩 2000 字
旧链路三层截断:sandbox stdout 截 2000 字、worker 写回截
4000 字,长答案尾部在详情里永远查不到(只把上限调大是
把截断点后移,不是修掉)。修法:截断版保持不变(列表/
摘要用),完整版另存:
- sandbox _result_from_runner/_parse_host_result(local 与
docker dispatch 路)回包新增 stdout_full(上限 200000 字,
只防无界增长);goal 路结论在尾部、tail 已保结论,不动。
- worker _write_execution_result 新增 result_text_full 列
(_ensure_result_columns + server migrate_tasks_table 幂等
补列),终局与取消分支均透传 stdout_full。
- server:任务 dict 加 result_full_available(不直接塞全文
进列表负载),新增 GET /tasks/{id}/result-full(read 权限
同款校验,无完整版时 404,不回摘要冒充完整)。
单测:test_queue_sandbox 45 项(含新增 stdout_full 1 项)、
test_marker_tools 30 项。
This commit is contained in:
1 parent
276d433da6
commit
92b7f8e8ff
4 files changed
+71
-6
No files matched your search
@@ -546,6 +546,20 @@ class TestUsageParsing(unittest.TestCase):
|
||||
self.assertEqual(result["usage"], usage)
|
||||
self.assertEqual(result["status"], "completed")
|
||||
|
||||
def test_result_from_runner_keeps_stdout_full(self):
|
||||
# 截断版 stdout 仍是 2000 字,但 stdout_full 必须带完整
|
||||
# 文本,否则长答案尾部在库里永远查不到。
|
||||
fake = SimpleNamespace(
|
||||
returncode=0,
|
||||
stdout=json.dumps({"status": "completed",
|
||||
"text": "y" * 5000}),
|
||||
stderr="")
|
||||
result = LocalExecutor("/fake/host.py",
|
||||
runner=lambda cmd: fake
|
||||
)._result_from_runner("t1", fake)
|
||||
self.assertLessEqual(len(result["stdout"]), 2000)
|
||||
self.assertIn("y" * 5000, result["stdout_full"])
|
||||
|
||||
def test_result_from_runner_usage_survives_long_text(self):
|
||||
# usage 在 JSON 末尾:旧的截头解析在 text 很长时会丢 usage、
|
||||
# 还会把 failed 误判成 completed;解析必须用完整 stdout。
|
||||
|
||||
Reference in new issue
Block a user