| """Metrics shared by source reproductions and basecode runs.""" | |
| from __future__ import annotations | |
| from dataclasses import asdict | |
| from typing import Any | |
| from .core import DecodeResult | |
| def exact_match(prediction: str, reference: str) -> float: | |
| return float(prediction.strip() == reference.strip()) | |
| def summarize_result(result: DecodeResult, reference: str | None = None) -> dict[str, Any]: | |
| payload = asdict(result) | |
| payload["tokens_per_second"] = len(result.tokens) / max(result.elapsed_s, 1e-12) | |
| if reference is not None: | |
| payload["exact_match"] = exact_match(result.text, reference) | |
| return payload | |