davidwdw's picture
Archive code-task00-centre-pilot-v6 2a97e50a56e9
9a32825 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))