davidwdw's picture
Archive code-task00-centre-pilot-v2 707d009387de
c4ed96e verified
Raw History Blame Contribute Delete
992 Bytes
"""Report measured recovery outcomes without treating infrastructure errors as trials."""
import argparse
import collections
import json
from pathlib import Path
def summarize(root):
rows = []
for path in Path(root).rglob('outcome.json'):
row = json.loads(path.read_text())
rows.append(dict(path=str(path.parent), **row))
trials = [r for r in rows if r.get('status') in ('completed', 'teacher_failure')]
return dict(runs=len(rows), valid_trials=len(trials),
successes=sum(bool(r.get('success')) for r in trials),
outcomes=dict(collections.Counter(r.get('status', 'unknown') for r in rows)),
rows=[{k:r.get(k) for k in ('path','status','success','steps','error','wall_seconds')}
for r in rows])
if __name__ == '__main__':
p = argparse.ArgumentParser(description=__doc__)
p.add_argument('runs', type=Path)
a = p.parse_args()
print(json.dumps(summarize(a.runs), indent=2))