Initial commit: 自然记忆站:12 页纯标准库 Python 静态站点生成器,含真实评测台账(108 条)与全站客户端检索
This commit is contained in:
@@ -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())
|
||||
Reference in New Issue
Block a user