#!/usr/bin/env python3 """Accuracy block: every set through every arm, one thread per arm (no latency is measured here, so arms may run side by side). Per-arm files out/raw/acc/--.jsonl. usage: run_acc.py ARM:PORT[:SETS] ... SETS = comma list, default all five """ import os import subprocess import sys import threading AB = "/tank/spikes/parakeet-ab" ALL = ["ls-clean", "ls-other", "ami", "pc", "null"] os.makedirs(f"{AB}/out/raw/acc", exist_ok=True) def run(arm, port, sets): for s in sets: out = f"{AB}/out/raw/acc/{s}--{arm}.jsonl" if os.path.exists(out): os.rename(out, out + ".prev") r = subprocess.run(["python3", f"{AB}/code/bench.py", "acc", f"http://127.0.0.1:{port}/v1/audio/transcriptions", arm, f"{AB}/data/{s}.jsonl", out], capture_output=True, text=True) print(arm, s, "rc", r.returncode, r.stderr[-300:], flush=True) ts = [] for spec in sys.argv[1:]: p = spec.split(":") ts.append(threading.Thread(target=run, args=(p[0], p[1], p[2].split(",") if len(p) > 2 else ALL))) [t.start() for t in ts] [t.join() for t in ts] print("ACC DONE", flush=True)