File size: 1,600 Bytes
127b976
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
44
45
46
47

from __future__ import annotations

import argparse
from pathlib import Path
import pandas as pd


def summarize_false_alarm(path, label):
    df = pd.read_csv(path)
    return {
        "model_or_eval": label,
        "rows": len(df),
        "false_fake_rate_065_percent": round(df["is_false_fake_original_065"].mean() * 100, 2) if len(df) else None,
        "false_fake_rate_085_percent": round(df["is_false_fake_strict_085"].mean() * 100, 2) if len(df) else None,
        "review_rate_percent": round(df["review_required"].mean() * 100, 2) if "review_required" in df.columns and len(df) else None,
    }


def main():
    p = argparse.ArgumentParser(description="Build final comparison table from false-alarm CSVs.")
    p.add_argument("--false-alarm-csvs", nargs="+", required=True)
    p.add_argument("--labels", nargs="+", required=True)
    p.add_argument("--out-csv", required=True)
    p.add_argument("--out-md", required=True)
    args = p.parse_args()

    if len(args.false_alarm_csvs) != len(args.labels):
        raise ValueError("Number of CSVs must match number of labels.")

    rows = [summarize_false_alarm(path, label) for path, label in zip(args.false_alarm_csvs, args.labels)]
    out = pd.DataFrame(rows)

    Path(args.out_csv).parent.mkdir(parents=True, exist_ok=True)
    out.to_csv(args.out_csv, index=False)

    md = out.to_markdown(index=False)
    Path(args.out_md).write_text(md, encoding="utf-8")

    print(md)
    print("Saved:", args.out_csv)
    print("Saved:", args.out_md)


if __name__ == "__main__":
    main()