ArthurZ's picture
ArthurZ HF Staff
Add arch_svg generator source (meta-device introspection + modular diff + SVG render)
a9cfb03 verified
Raw
History Blame Contribute Delete
2.78 kB
"""`python -m arch_svg ...`
python -m arch_svg one --model llama --mode full --out out/
python -m arch_svg one --model gemma --mode diff --out out/
python -m arch_svg all --mode diff --out out/ --jobs 8
python -m arch_svg all --mode diff --out out/ --limit 20 # quick subset
"""
from __future__ import annotations
import argparse
import os
import sys
def _cmd_one(args) -> int:
from .discover import discover_models, model_type_for
from .gallery import render_one
model_type = None
for e in discover_models():
if e.name == args.model:
model_type = model_type_for(e)
break
svg, record = render_one(args.model, model_type or args.model, args.mode)
os.makedirs(args.out, exist_ok=True)
path = os.path.join(args.out, f"{args.model}.svg")
with open(path, "w", encoding="utf-8") as f:
f.write(svg)
print(f"wrote {path} (status={record['status']})")
if record.get("build_error"):
print(f" note: {record['build_error']}")
if args.mode == "diff" and record.get("is_modular") is not None:
print(
f" modular={record.get('is_modular')} parent={record.get('parent_model')} totals={record.get('diff_totals')}"
)
return 0 if record["status"] != "failed" else 1
def _cmd_all(args) -> int:
from .gallery import run_all
res = run_all(out=args.out, mode=args.mode, jobs=args.jobs, limit=args.limit)
s = res["summary"]
print(f"\ndone → {os.path.join(args.out, 'index.html')}")
print(f" {s}")
return 0
def _cmd_list(args) -> int:
from .discover import discover_models
for e in discover_models():
tag = "modular" if e.has_modular else "standalone"
print(f"{e.name:32s} {tag}")
return 0
def main(argv=None) -> int:
p = argparse.ArgumentParser(prog="arch_svg", description="transformers architecture SVG generator")
sub = p.add_subparsers(dest="cmd", required=True)
one = sub.add_parser("one", help="render a single model")
one.add_argument("--model", required=True)
one.add_argument("--mode", choices=["full", "diff"], default="full")
one.add_argument("--out", default="out")
one.set_defaults(func=_cmd_one)
alle = sub.add_parser("all", help="render the whole model zoo + index.html")
alle.add_argument("--mode", choices=["full", "diff", "both"], default="both")
alle.add_argument("--out", default="out")
alle.add_argument("--jobs", type=int, default=4)
alle.add_argument("--limit", type=int, default=None)
alle.set_defaults(func=_cmd_all)
lst = sub.add_parser("list", help="list discovered models")
lst.set_defaults(func=_cmd_list)
args = p.parse_args(argv)
return args.func(args)
if __name__ == "__main__":
sys.exit(main())