Files
Video-Tree-TRM5/app/harness/split_selection.py
T
2026-07-15 12:12:48 -04:00

97 lines
3.4 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.
"""视频级切分选择:signal 分层、视频聚合、贪心联合约束选择(纯函数)。
结果驱动切分管线的核心:把诊断信号投影为多样性格子,供贪心选择器最大化覆盖。
本模块起步定义 evolution_target 派生与多样性格子;后续追加 score_signal /
build_video_records / select_split。
"""
from __future__ import annotations
from dataclasses import dataclass
_EVOLUTION_TARGET = {
"extraction_failure": "tool",
"search_failure": "skill",
"reasoning_failure": "skill",
"mixed": "system",
}
def evolution_target_of(error_type: str) -> str:
"""由 error_type 确定性派生进化目标(tool/skill/system)。
这是报告用的派生标注,非独立多样性轴(多样性主格子=task_type×error_type)。
参数:
error_type: 诊断瀑布归因的错误类别(extraction/search/reasoning/mixed_failure)。
返回:
进化目标字符串 tool / skill / system。
异常:
ValueError: error_type 不在已知集合内(不静默兜底)。
"""
if error_type not in _EVOLUTION_TARGET:
raise ValueError(f"未知 error_type: {error_type}")
return _EVOLUTION_TARGET[error_type]
def cell_of(task_type: str, error_type: str) -> tuple[str, str]:
"""构造多样性主格子 = (task_type, error_type)。
参数:
task_type: 题型(12 类之一)。
error_type: 错误类别(4 类之一)。
返回:
(task_type, error_type) 二元组,作为覆盖计数的格子键。
"""
return (task_type, error_type)
@dataclass(frozen=True)
class SignalLabel:
"""诊断信号分层标签(DiagnosisResult 的确定性投影)。
字段:
tier: 信号层级,取值 T0 / T1 / T2 / uncertain(判据见 score_signal)。
"""
tier: str
def score_signal(*, cause_category: str | None, infra: bool, degraded: bool) -> SignalLabel:
"""把诊断产物投影为信号分层 tier(不发明新分类,是确定性投影)。
分层优先级顺序固定(用早返回表达,不用魔法权重):
先判 INFRA,再判 degraded,然后 defect / lapse,最后兜底 uncertain。
各层判据来源:
T0 — infra=True,即诊断 INFRA 排除(stop_reason ∈ {error, parse_error}),
基础设施失败先于一切判定,排除出可训练主体。
uncertain — degraded=Truejudge 解析失败)或 cause_category 落不到
defect/lapse 上(如为 None),信号不可信,排除出 T2。
T2 — cause_category == "defect",可训练核心,进多样性覆盖与训练主体。
T1 — cause_category == "lapse",低信号(含无解题),接受但不作训练主体。
参数:
cause_category: 诊断的缺陷归因("defect" / "lapse" / None)。
infra: 是否被 INFRA 护栏排除(基础设施失败)。
degraded: judge 是否解析失败导致诊断降级。
返回:
SignalLabel,其 tier 字段为上述四层之一。
实现细节:
关键字参数强制传入,防止 infra / degraded 两个 bool 位置混淆。
"""
if infra:
return SignalLabel(tier="T0")
if degraded:
return SignalLabel(tier="uncertain")
if cause_category == "defect":
return SignalLabel(tier="T2")
if cause_category == "lapse":
return SignalLabel(tier="T1")
return SignalLabel(tier="uncertain")