"""Render README.md from card/README.template.md, release.json, benchmark results and demo transcripts. Usage: python scripts/render_card.py Numbers and demo outputs are always read from their result files, never typed into the card. """ import json from pathlib import Path ROOT = Path(__file__).resolve().parent.parent def load(rel): return json.loads((ROOT / rel).read_text(encoding="utf-8")) def donation_links(cfg): return [(name, url) for name, url in cfg["donations"].items() if url] def main(): cfg = load("release.json") bench = load("benchmarks/results.json") demos = {r["demo"]: r for r in load("examples/transcripts.json")["results"]} links = donation_links(cfg) values = { "NS": cfg["hf_namespace"], "REPO": cfg["repo_name"], "DONATE_TOP": " · ".join(f"[☕ {name}]({url})" for name, url in links), "DONATE_LIST": "\n".join(f"- **[{name}]({url})**" for name, url in links), } for key, value in bench.items(): values[f"BENCH_{key}"] = str(value) for name, demo in demos.items(): values[f"DEMO_{name}"] = demo["content"].strip() values[f"STATS_{name}"] = f"{demo['tokens']} tokens, {demo['seconds']} s" text = (ROOT / "card" / "README.template.md").read_text(encoding="utf-8") for key, value in values.items(): text = text.replace(f"@@{key}@@", value) (ROOT / "README.md").write_text(text, encoding="utf-8", newline="\n") if __name__ == "__main__": main()