Initial commit: 自然记忆站:12 页纯标准库 Python 静态站点生成器,含真实评测台账(108 条)与全站客户端检索

This commit is contained in:
WpyQwq
2026-09-19 11:21:45 +08:00
commit 1da4b14c19
44 changed files with 9624 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
从磁盘上的真实评测 JSON 生成站点用的台账数据 assets/js/ledger.js。
⚠️ 生成物不要手改;改数据请改上游 JSON 后重跑本脚本。
来源(两份都是工程里保存的正式运行结果,逐字复制,不做任何改写或换算):
A. H:\\Memory\\V2_dpskw\\runtime_score_bands.json 60 episodes
B. H:\\Memory\\V2_dpskw\\nm2_1_final_runtime_e2e.json 48 episodes
用法:
python tools/make_ledger.py
"""
from __future__ import annotations
import io
import json
import os
SOURCES = [
{
"key": "bands",
"label": "运行时评分带扫描",
"path": r"H:\Memory\V2_dpskw\runtime_score_bands.json",
"config": "0.00",
"note": "60 用例 · 24 同形候选 · prior=1.00 blend=0.00",
},
{
"key": "e2e",
"label": "NM2.1 最终运行时",
"path": r"H:\Memory\V2_dpskw\nm2_1_final_runtime_e2e.json",
"config": "prior=1.00 blend=0.50",
"note": "48 用例 · 24 同形候选 · prior=1.00 blend=0.50",
},
]
OUT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
"assets", "js", "ledger.js")
def rows_of(path: str, key: str):
with open(path, encoding="utf-8") as fh:
j = json.load(fh)
rows = j.get("rows") or {}
if key not in rows:
raise SystemExit("在 %s 里找不到 rows[%r]" % (path, key))
return rows[key]
def main() -> int:
out, total = [], 0
for src in SOURCES:
rows = rows_of(src["path"], src["config"])
total += len(rows)
out.append({
"key": src["key"],
"label": src["label"],
"note": src["note"],
"n": len(rows),
"items": [{
"id": r.get("id"),
"attr": r.get("attribute"),
"ans": bool(r.get("answerable")),
"exp": r.get("expected"),
"reply": r.get("reply"),
"ok": bool(r.get("correct")),
"wrong": bool(r.get("wrong_attribute")),
"leak": bool(r.get("leaked")),
"stop": r.get("stop_reason"),
"sel": r.get("records_selected"),
"score": r.get("top_score"),
"active": r.get("records_active"),
"need": r.get("need_memory"),
} for r in rows],
})
body = io.StringIO()
body.write("/* ==================================================================\n")
body.write(" Natural Memory v2 — ledger.js\n")
body.write(" 「真实评测台账」的数据层。\n\n")
body.write(" ⚠️ 本文件由 tools/make_ledger.py 从磁盘上的原始评测 JSON 生成,\n")
body.write(" 请勿手改。下面是全部 %d 条 episode,字段逐字复制、未做改写或换算。\n\n" % total)
for s in SOURCES:
body.write(" %s\n" % os.path.basename(s["path"]))
body.write(" ================================================================== */\n")
body.write("window.NM_LEDGER = ")
body.write(json.dumps(out, ensure_ascii=False, separators=(",", ":"), indent=0)
.replace("\n", ""))
body.write(";\n")
os.makedirs(os.path.dirname(OUT), exist_ok=True)
with open(OUT, "w", encoding="utf-8", newline="\n") as fh:
fh.write(body.getvalue())
print("写出 %s(%d 条 episode / %d 字节)" % (OUT, total, os.path.getsize(OUT)))
return 0
if __name__ == "__main__":
raise SystemExit(main())