#!/usr/bin/env python3 """Render the local EP1 report from authoritative snapshots and supplementary checks. Never changes snapshots, runs, scores or credentials. Output works over file://. """ import hashlib, json, pathlib, runpy ROOT=pathlib.Path(__file__).resolve().parents[1] TEMPLATES=ROOT/'site/templates' def main(): files=[ROOT/'data/experiments/exp-20260915-ep1-f005-docker.json',ROOT/'data/experiments/exp-20260918-ep1-f005-glm-probe1200.json'] snapshots=[json.loads(p.read_text()) for p in files] evidence=json.loads((ROOT/'site/evidence/ep1-reference/comparison.json').read_text()) cases={c['id']:c for c in evidence['runs']} rows=[] for snap in snapshots: for raw in snap['runs']: if raw['task']!='ep1-f005':continue u=raw.get('wire_backfill') or raw['official_usage'] net=u.get('net_input',u.get('input_tokens')); cache=u.get('cache_read',u.get('cache_read_tokens')) row={ 'id':raw['run_id'],'model':raw['model'],'attempt':raw['attempt'],'timestamp':raw['ts'], 'helper':cases[raw['run_id']]['helper'],'sourceSha256':cases[raw['run_id']]['sha256'], 'budget':raw['params']['timeout_s'],'seconds':raw['wall_s'],'score':raw['score'],'exit':raw['agent_exit'], 'calls':u['api_calls'],'net':net,'cache':cache,'output':u.get('output',u.get('output_tokens')), 'usageSource':'wire' if raw.get('wire_backfill') else 'official', 'testModified':raw['score_diag'].get('test_modified_by_model'), 'checks':cases[raw['run_id']]['checks'],'mechanism':cases[raw['run_id']]['mechanism'], 'diff':(ROOT/'site/evidence/ep1-reference'/f"{raw['run_id']}.diff").read_text(), } assert all(row[k] is not None for k in ['net','cache','calls','output']) rows.append(row) rows.sort(key=lambda r:(r['budget'],r['model'],r['attempt'])) main_runs=[r for r in rows if r['budget']==420] passed=[r for r in rows if r['score']==1] main_models=set(r['model'] for r in main_runs) summary={ 'mainRuns':len(main_runs),'mainModels':len(main_models),'mainPassed':sum(r['score']==1 for r in main_runs), 'mainTimeouts':sum(r['exit']==124 for r in main_runs), 'mainModelsBothPassed':sum(all(r['score']==1 for r in main_runs if r['model']==m) for m in main_models), 'allTaskRuns':len(rows),'passedRuns':len(passed), 'passedCopyPass':sum(r['checks']['api_key_copy']['pass'] for r in passed), 'checksRequests':sum(len(c['checks']) for c in cases.values()), } assert len(rows)==20 and len(main_runs)==18 and len(main_models)==9 assert summary['mainPassed']==14 and summary['passedCopyPass']==0 answer_review=json.loads((ROOT/'site/evidence/ep1-reference/answer-review.json').read_text()) assert {r['id'] for r in answer_review['runs']}=={r['id'] for r in rows} assert sum(r['status']=='final' for r in answer_review['runs'])==16 for item in answer_review['runs']+answer_review['highlights']: source=ROOT/item['source'] assert hashlib.sha256(source.read_bytes()).hexdigest()==item['sourceSha256'], str(source) body=json.loads(source.read_text())['body'] visible='' for line in body.splitlines(): if not line.startswith('data: '):continue try: chunk=json.loads(line[6:]) except json.JSONDecodeError:continue for choice in chunk.get('choices',[]): visible+=choice.get('delta',choice.get('message',{})).get('content') or '' assert item.get('quote',item.get('text')) in visible, str(source) answer_corpus=json.loads((ROOT/'site/evidence/ep1-reference/answer-corpus.json').read_text()) answer_rubric=json.loads((ROOT/'site/evidence/ep1-reference/answer-rubric.json').read_text()) run_ids={r['id'] for r in rows} assert {r['id'] for r in answer_corpus['runs']}==run_ids assert {r['id'] for r in answer_rubric['runs']}==run_ids parse_reply=runpy.run_path(str(ROOT/'scripts/extract-ep1-answers.py'))['visible_reply'] for run in answer_corpus['runs']: for message in run['messages']: source=ROOT/message['source'] assert hashlib.sha256(source.read_bytes()).hexdigest()==message['sourceSha256'] text,tools=parse_reply(source) assert text==message['text'] and tools==message['hasToolCalls'] for item in answer_rubric['runs']: messages=next(r['messages'] for r in answer_corpus['runs'] if r['id']==item['id']) assert item['reviewedMessages']==len(messages) assert all(e in messages for e in item['evidence']) data={ 'answerReview':answer_review,'answerCorpus':answer_corpus,'answerRubric':answer_rubric, 'runs':rows,'summary':summary,'fixture':snapshots[0]['fixture'], 'reference':cases['upstream-reference'],'baseline':cases['baseline'], 'checkDate':evidence['generated_at'],'sdk':evidence['anthropic_version'], 'findings':json.loads((TEMPLATES/'ep1-findings.json').read_text()), 'sourceHashes':{str(p.relative_to(ROOT)):hashlib.sha256(p.read_bytes()).hexdigest() for p in files}, } payload=json.dumps(data,ensure_ascii=False,separators=(',',':')).replace('<','\\u003c').replace('>','\\u003e').replace('&','\\u0026') for template,filename in [('ep1-report.html','ep1-douban.html'),('ep1-evidence.html','ep1-evidence.html')]: out=(TEMPLATES/template).read_text().replace('/* REPORT_TOKENS */',(TEMPLATES/'ep1-tokens.css').read_text()).replace('/* REPORT_DATA */',payload) (ROOT/'site/drafts'/filename).write_text(out) print(json.dumps(summary,ensure_ascii=False)) if __name__=='__main__':main()