Files
Video-Tree-TRM5/app/harness/steps_json_traces.py
T

52 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""把 predictions.steps_json 转成 RunLog.get_traces 的行形。
infer_adhoc 的 traces 表为空,轨迹存于 steps_json{thought, tool_call, tool_output})。
诊断管线经 get_traces 消费轨迹,故需此确定性转换适配。
"""
from __future__ import annotations
import json
from typing import Any
def steps_json_to_trace_rows(
video_id: str, question_id: str, steps_json: str
) -> list[dict[str, Any]]:
"""将单题 steps_json 解析为 trace 行列表(step 从 0 递增)。
参数:
video_id: 视频 ID。
question_id: 题 ID。
steps_json: predictions.steps_json 原文(JSON 数组字符串)。
返回:
行字典列表,字段对齐 traces 表 schema;空/空数组返回 []。
关键实现细节:
- 工具名读 tool_call.toolinfer_adhoc 真实字段),对极少数历史
数据的 name 做 back-compat 回退。
- steps_json 非 JSON 数组时直接报错,不做兜底掩盖。
"""
if not steps_json or not steps_json.strip():
return []
steps = json.loads(steps_json)
if not isinstance(steps, list):
raise ValueError(f"steps_json 非数组: {question_id}")
rows: list[dict[str, Any]] = []
for i, s in enumerate(steps):
call = s.get("tool_call") or {}
rows.append(
{
"video_id": video_id,
"question_id": question_id,
"step": i,
# infer_adhoc 用 "tool"back-compat 兼容极少数 "name"
"tool_name": call.get("tool", call.get("name")),
"tool_args": call.get("args", {}),
"tool_output": s.get("tool_output"),
"thought": s.get("thought"),
}
)
return rows