Files
Video-Tree-TRM5/app/harness/split_manifest.py

60 lines
2.1 KiB
Python
Raw Permalink 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.
"""结果驱动视频级切分的冻结溯源 manifest。
冻结的 pools.json 是切分产物;manifest 记录产出这份切分的关键输入
baseline_run_id、诊断指纹、随机种子、配置)与 pools.json 的内容指纹
pools_sha256),供后续 build_split 写溯源、以及复现校验时比对。
"""
from __future__ import annotations
import hashlib
from typing import TYPE_CHECKING
from app.harness.pools import _atomic_write_json
if TYPE_CHECKING:
from pathlib import Path
def write_manifest(
path: Path,
*,
baseline_run_id: str,
diag_fingerprint: str,
seed: int,
config: dict,
pools_json_text: str,
coverage_report: dict,
generated_at: str,
) -> dict:
"""写切分冻结溯源 manifest(原子写),返回写入的 dict。
pools_sha256 = sha256(pools_json_text),供复现时校验冻结的 pools.json 内容
是否与本次切分一致。generated_at 由调用方传入(库内不用 datetime.now),
以保证相同输入产出相同 manifest,可复现。
参数:
path: manifest 目标 JSON 文件路径。
baseline_run_id: 产出本次切分所依据的基线 run 标识。
diag_fingerprint: 诊断结果指纹(决定 train/val 归属的输入)。
seed: 切分使用的随机种子。
config: 切分相关配置快照(如 train_ratio 等)。
pools_json_text: 冻结的 pools.json 完整文本,用于计算内容指纹。
coverage_report: 各类别 train/val 覆盖统计报告。
generated_at: 生成时间戳(ISO 字符串),由调用方传入。
返回:
写入 manifest 的 dict(与落盘内容一致)。
"""
manifest = {
"baseline_run_id": baseline_run_id,
"diag_fingerprint": diag_fingerprint,
"seed": seed,
"config": config,
"pools_sha256": hashlib.sha256(pools_json_text.encode("utf-8")).hexdigest(),
"coverage_report": coverage_report,
"generated_at": generated_at,
}
_atomic_write_json(path, manifest)
return manifest