feat(skill-learning): extend eval report payload
This commit is contained in:
@ -227,6 +227,15 @@ class SkillDraftEvalReport:
|
||||
cases: list[dict[str, Any]] = field(default_factory=list)
|
||||
status: str = "completed"
|
||||
created_at: str = ""
|
||||
eval_version: str = "heuristic-v1"
|
||||
mode: str = "heuristic"
|
||||
execution_coverage: float = 0.0
|
||||
surrogate_coverage: float = 0.0
|
||||
blocked_coverage: float = 0.0
|
||||
confidence: str = "low"
|
||||
case_reports: list[dict[str, Any]] = field(default_factory=list)
|
||||
tool_mode_summary: dict[str, Any] = field(default_factory=dict)
|
||||
preservation_report: dict[str, Any] | None = None
|
||||
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
return {
|
||||
@ -244,6 +253,17 @@ class SkillDraftEvalReport:
|
||||
"cases": [dict(item) for item in self.cases],
|
||||
"status": self.status,
|
||||
"created_at": self.created_at,
|
||||
"eval_version": self.eval_version,
|
||||
"mode": self.mode,
|
||||
"execution_coverage": self.execution_coverage,
|
||||
"surrogate_coverage": self.surrogate_coverage,
|
||||
"blocked_coverage": self.blocked_coverage,
|
||||
"confidence": self.confidence,
|
||||
"case_reports": [dict(item) for item in self.case_reports],
|
||||
"tool_mode_summary": dict(self.tool_mode_summary),
|
||||
"preservation_report": (
|
||||
dict(self.preservation_report) if self.preservation_report is not None else None
|
||||
),
|
||||
}
|
||||
|
||||
@classmethod
|
||||
@ -263,6 +283,23 @@ class SkillDraftEvalReport:
|
||||
cases=[dict(item) for item in payload.get("cases") or [] if isinstance(item, dict)],
|
||||
status=str(payload.get("status") or "completed"),
|
||||
created_at=str(payload.get("created_at") or ""),
|
||||
eval_version=str(payload.get("eval_version") or "heuristic-v1"),
|
||||
mode=str(payload.get("mode") or "heuristic"),
|
||||
execution_coverage=_bounded_float(payload.get("execution_coverage"), default=0.0),
|
||||
surrogate_coverage=_bounded_float(payload.get("surrogate_coverage"), default=0.0),
|
||||
blocked_coverage=_bounded_float(payload.get("blocked_coverage"), default=0.0),
|
||||
confidence=str(payload.get("confidence") or "low"),
|
||||
case_reports=[
|
||||
dict(item)
|
||||
for item in payload.get("case_reports") or []
|
||||
if isinstance(item, dict)
|
||||
],
|
||||
tool_mode_summary=dict(payload.get("tool_mode_summary") or {}),
|
||||
preservation_report=(
|
||||
dict(payload["preservation_report"])
|
||||
if isinstance(payload.get("preservation_report"), dict)
|
||||
else None
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@ -272,6 +309,15 @@ def _optional_str(value: Any) -> str | None:
|
||||
return str(value)
|
||||
|
||||
|
||||
def _bounded_float(value: Any, *, default: float = 0.0) -> float:
|
||||
if value in (None, ""):
|
||||
return default
|
||||
try:
|
||||
return max(0.0, min(1.0, float(value)))
|
||||
except (TypeError, ValueError):
|
||||
return default
|
||||
|
||||
|
||||
def _summarize_evidence(payload: dict[str, Any]) -> str:
|
||||
evidence = payload.get("evidence")
|
||||
if isinstance(evidence, dict):
|
||||
|
||||
Reference in New Issue
Block a user