davidwdw's picture
Archive code-task00-centre-pilot-v4 dbe1d69f1ac1
2db261c 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))