Download evaluation/summarize.py from davidwdw/b1k_model: direct link, hf CLI and curl.
- Browser
- Download file 3.76 kB
-
https://huggingface.co/davidwdw/b1k_model/resolve/main/evaluation/summarize.py
- Command line
-
hf download hf://davidwdw/b1k_model/evaluation/summarize.py
-
curl -L -o summarize.py https://huggingface.co/davidwdw/b1k_model/resolve/main/evaluation/summarize.py
3.76 kB
| import csv | |
| import json | |
| from pathlib import Path | |
| ROOT=Path(__file__).resolve().parent | |
| variants=['human','codegen_success','mix_h50_c50'] | |
| rows=[]; summaries=[] | |
| for variant in variants: | |
| vr=[] | |
| for i in range(301,321): | |
| p=ROOT/'results'/variant/'json'/f'turning_on_radio_{i}_0.json' | |
| if not p.exists():continue | |
| r=json.loads(p.read_text()) | |
| vr.append(dict(variant=variant,instance_id=i,success=bool(r['success']),q_score=r['q_score']['final'],steps=r['steps'])) | |
| rows.extend(vr) | |
| summaries.append(dict(variant=variant,completed=len(vr),successes=sum(r['success'] for r in vr),success_rate=sum(r['success'] for r in vr)/len(vr) if vr else None,mean_q_score=sum(r['q_score'] for r in vr)/len(vr) if vr else None,mean_steps=sum(r['steps'] for r in vr)/len(vr) if vr else None)) | |
| for name,values in [('per_instance',rows),('summary',summaries)]: | |
| (ROOT/f'{name}.json').write_text(json.dumps(values,indent=2)+'\n') | |
| if values: | |
| with (ROOT/f'{name}.csv').open('w') as f: | |
| w=csv.DictWriter(f,fieldnames=list(values[0]));w.writeheader();w.writerows(values) | |
| lines=['# Task 00: turning_on_radio — 三模型测试集对比','', '仅在 eai 本机运行。2026 public_test 全部 20 个实例(301–320),每模型每实例 1 次,共 60 次。', '', '相同 seed=0(每次环境和策略 reset 重置),官方默认超时 1.5×2149.64 = 3224 步,224×224 RGB,30 Hz,R1Pro。每模型加载自己的 checkpoint normalization。', '', '| 模型 | 完成数 | 成功数 | 成功率 | 平均 q-score | 平均步数 |','|---|---:|---:|---:|---:|---:|'] | |
| for r in summaries: | |
| lines.append(f"| {r['variant']} | {r['completed']}/20 | {r['successes']} | {r['success_rate']:.1%} | {r['mean_q_score']:.4f} | {r['mean_steps']:.1f} |" if r['completed'] else f"| {r['variant']} | 0/20 | — | — | — | — |") | |
| lines+=['','| 实例 | Human | Codegen success | Mix 50:50 |','|---|---|---|---|'] | |
| lookup={(r['variant'],r['instance_id']):r for r in rows} | |
| for i in range(301,321): | |
| values=[] | |
| for v in variants: | |
| r=lookup.get((v,i));values.append(('成功' if r['success'] else '失败')+f";q={r['q_score']:.3f};{r['steps']}步" if r else '未完成') | |
| lines.append('| '+str(i)+' | '+' | '.join(values)+' |') | |
| lines+=['','## 配对比较(仅计两模型均已完成的实例)','','| 比较 | 共同完成 | 前者成功、后者失败 | 后者成功、前者失败 | 同时成功 | 同时失败 |','|---|---:|---:|---:|---:|---:|'] | |
| for a,b in [('human','codegen_success'),('human','mix_h50_c50'),('codegen_success','mix_h50_c50')]: | |
| both=[(lookup[(a,i)]['success'],lookup[(b,i)]['success']) for i in range(301,321) if (a,i) in lookup and (b,i) in lookup] | |
| lines.append(f"| {a} / {b} | {len(both)} | {sum(x and not y for x,y in both)} | {sum(y and not x for x,y in both)} | {sum(x and y for x,y in both)} | {sum(not x and not y for x,y in both)} |") | |
| lines+=['','平均步数包含超时的失败回合。官方 max_steps=3224 的终止检查会产生 3225 个记录步数。','','结果适用于本次单 seed 的 20 个公开测试实例,不把训练损失当作成功率。推理使用归档的 100-task no-DA3 模型及本地适配,全部 checkpoint 参数严格检查,不允许丢弃多余参数。完整原始训练环境及 Gemma 源码未在本机找到,RGB 路径使用上游 Gemma,因此本结果属于兼容推理实现下的对比,不宣称原始环境的逐位复现。固定的相关 inpainting 线性系统在 CPU 求解并验证残差,以绕过本机 cuSolver 错误。详见 [protocol.json](protocol.json) 和 [runtime_adapter.patch](runtime_adapter.patch)。',''] | |
| (ROOT/'comparison.md').write_text('\n'.join(lines)) | |
| print(json.dumps(summaries,indent=2)) | |