diff --git a/evals/core/types.py b/evals/core/types.py index 95550e1d..1ec24bfc 100644 --- a/evals/core/types.py +++ b/evals/core/types.py @@ -44,6 +44,8 @@ class EvalResult: energy_per_output_token_joules: float = 0.0 throughput_per_watt: float = 0.0 mean_itl_ms: float = 0.0 + trace_steps: int = 0 + trace_energy_joules: float = 0.0 @dataclass(slots=True) @@ -122,6 +124,10 @@ class RunSummary: warmup_samples_excluded: int = 0 steady_state_reached: bool = False energy_method: str = "" + avg_power_watts: float = 0.0 + total_input_tokens: int = 0 + total_output_tokens: int = 0 + trace_step_type_stats: Dict[str, Dict[str, float]] = field(default_factory=dict) # --------------------------------------------------------------------------- diff --git a/evals/tests/test_types.py b/evals/tests/test_types.py index eda1e765..31c437aa 100644 --- a/evals/tests/test_types.py +++ b/evals/tests/test_types.py @@ -209,6 +209,35 @@ class TestRunSummary: # --------------------------------------------------------------------------- +class TestEvalResultTraceFields: + def test_trace_fields_exist(self): + r = EvalResult(record_id="test", model_answer="hi") + assert r.trace_steps == 0 + assert r.trace_energy_joules == 0.0 + + def test_trace_fields_set(self): + r = EvalResult( + record_id="test", model_answer="hi", + trace_steps=5, trace_energy_joules=100.0, + ) + assert r.trace_steps == 5 + assert r.trace_energy_joules == 100.0 + + +class TestRunSummaryTraceFields: + def test_trace_aggregate_fields(self): + s = RunSummary( + benchmark="test", category="test", backend="test", + model="test", total_samples=1, scored_samples=1, + correct=1, accuracy=1.0, errors=0, + mean_latency_seconds=1.0, total_cost_usd=0.0, + ) + assert s.avg_power_watts == 0.0 + assert s.trace_step_type_stats == {} + assert s.total_input_tokens == 0 + assert s.total_output_tokens == 0 + + class TestMetaConfig: def test_defaults(self): m = MetaConfig()