""" Lightweight Metrics container. Benefits: - Facilitates addition/removal of fields without breaking callers. - Better isolation of responsibilities around code exporting metrics for experiment tracking. """ from dataclasses import dataclass, asdict from typing import Any, Dict @dataclass(frozen=True) class Metrics: # Minimal required fields (aligns with official script's main ones) exact_score: float f1_score: float total_num_instances: int def export_for_exp_tracking(self) -> Dict[str, Any]: """ Export a dict for experiment artifacts. Skips keys that are None. """ raw = asdict(self) return {k: v for k, v in raw.items() if v is not None}