File size: 1,368 Bytes
4687353
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import Any, Dict

import sys

REPO_ROOT = Path(__file__).resolve().parents[1]
SRC_DIR = REPO_ROOT / "src"
if str(SRC_DIR) not in sys.path:
    sys.path.insert(0, str(SRC_DIR))


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Show saved metrics for a trained baseline run.")
    parser.add_argument("--run-name", type=str, required=True)
    parser.add_argument("--output-dir", type=Path, default=REPO_ROOT / "outputs")
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    metrics_path = args.output_dir / args.run_name / "metrics.json"
    if not metrics_path.exists():
        raise RuntimeError(f"Metrics not found: {metrics_path}")
    with metrics_path.open("r", encoding="utf-8") as handle:
        payload: Dict[str, Any] = json.load(handle)
    report = {
        "run_name": payload.get("run_name"),
        "mode": payload.get("mode"),
        "best_val_map": payload.get("best_val_map"),
        "test_map": payload.get("test_metrics", {}).get("map"),
        "test_macro_f1": payload.get("test_metrics", {}).get("macro_f1"),
        "test_micro_f1": payload.get("test_metrics", {}).get("micro_f1"),
    }
    print(json.dumps(report, indent=2))


if __name__ == "__main__":
    main()