spell0's picture
Deploy latest leaderboard app
abb519c
Raw History Blame Contribute Delete
2.7 kB
"""Trial ingestion and meta-learning table construction."""
from __future__ import annotations
import json
from pathlib import Path
from typing import Iterable
import pandas as pd
from .schema import TrialRecord
def append_trial(path: str | Path, record: TrialRecord) -> None:
target = Path(path)
target.parent.mkdir(parents=True, exist_ok=True)
with target.open("a", encoding="utf-8") as stream:
stream.write(json.dumps(record.to_dict(), default=str) + "\n")
def load_trials(paths: Iterable[str | Path]) -> list[TrialRecord]:
records: list[TrialRecord] = []
for raw_path in paths:
path = Path(raw_path)
if not path.exists():
continue
with path.open(encoding="utf-8") as stream:
for line_number, line in enumerate(stream, start=1):
if not line.strip():
continue
try:
records.append(TrialRecord.from_dict(json.loads(line)))
except Exception as exc:
raise ValueError(f"Invalid trial record at {path}:{line_number}: {exc}") from exc
return records
def best_records(records: Iterable[TrialRecord], *, per_family: bool = False) -> list[TrialRecord]:
"""Select best complete result per dataset, optionally per model family."""
winners: dict[tuple[str, ...], TrialRecord] = {}
for record in records:
if record.status != "complete":
continue
key = (record.dataset_id, record.model_family) if per_family else (record.dataset_id,)
if key not in winners or float(record.score) > float(winners[key].score):
winners[key] = record
return list(winners.values())
def best_record_groups(records: Iterable[TrialRecord]) -> dict[str, list[TrialRecord]]:
"""Return dataset winners globally and for every recommendable target.
Classical heads get an individual model. Neural configurations are grouped
by model family, since their head is part of the end-to-end architecture.
"""
complete = [record for record in records if record.status == "complete"]
groups: dict[str, list[TrialRecord]] = {"global": best_records(complete)}
targets = sorted({
(record.model_family, str(record.config.get("head_type", "neural")))
for record in complete
})
for family, head in targets:
selected = [
record for record in complete
if record.model_family == family
and str(record.config.get("head_type", "neural")) == head
]
key = f"{family}__{head}"
groups[key] = best_records(selected)
return {key: value for key, value in groups.items() if value}