Upload pipeline.py with huggingface_hub
Browse files- pipeline.py +27 -0
pipeline.py
CHANGED
|
@@ -54,6 +54,9 @@ def main():
|
|
| 54 |
help="promosikan checkpoint terbaik run ini ke folder out/ kanonik")
|
| 55 |
ap.add_argument("--push", action="store_true", help="upload checkpoint terbaik ke repo HF")
|
| 56 |
ap.add_argument("--repo", default="adyoi/indigo")
|
|
|
|
|
|
|
|
|
|
| 57 |
t = ap.add_argument_group("hyperparameter training (diteruskan ke train.py)")
|
| 58 |
t.add_argument("--steps", type=int, default=2000)
|
| 59 |
t.add_argument("--batch-size", type=int, default=32)
|
|
@@ -121,6 +124,30 @@ def main():
|
|
| 121 |
|
| 122 |
print(f"[pipeline] run='{args.tag}' | sumber={sources or ['<kosong>' ]}")
|
| 123 |
stats = train.main(argv) or {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
stats["pipeline"] = {
|
| 125 |
"tag": args.tag,
|
| 126 |
"timestamp": datetime.datetime.now().isoformat(timespec="seconds"),
|
|
|
|
| 54 |
help="promosikan checkpoint terbaik run ini ke folder out/ kanonik")
|
| 55 |
ap.add_argument("--push", action="store_true", help="upload checkpoint terbaik ke repo HF")
|
| 56 |
ap.add_argument("--repo", default="adyoi/indigo")
|
| 57 |
+
ap.add_argument("--guard", default=None,
|
| 58 |
+
help="file kamus kata (satu kata per baris); tambahkan metrik rasio ejaan ke manifest")
|
| 59 |
+
ap.add_argument("--guard-max-new", type=int, default=120)
|
| 60 |
t = ap.add_argument_group("hyperparameter training (diteruskan ke train.py)")
|
| 61 |
t.add_argument("--steps", type=int, default=2000)
|
| 62 |
t.add_argument("--batch-size", type=int, default=32)
|
|
|
|
| 124 |
|
| 125 |
print(f"[pipeline] run='{args.tag}' | sumber={sources or ['<kosong>' ]}")
|
| 126 |
stats = train.main(argv) or {}
|
| 127 |
+
|
| 128 |
+
if args.guard:
|
| 129 |
+
import torch
|
| 130 |
+
|
| 131 |
+
from indigo.common import load_wordlist, load_meta, build_tokenizer, word_known_ratio
|
| 132 |
+
from indigo.model import GPT, GPTConfig
|
| 133 |
+
from safetensors.torch import load_file
|
| 134 |
+
|
| 135 |
+
probe_path = out_dir / "indigo_best.safetensors"
|
| 136 |
+
if not probe_path.exists():
|
| 137 |
+
probe_path = out_dir / "indigo.safetensors"
|
| 138 |
+
wordset = load_wordlist(args.guard)
|
| 139 |
+
meta = load_meta(str(probe_path))
|
| 140 |
+
tok = build_tokenizer(meta.get("tokenizer") or {"type": "char"}, meta.get("vocab"))
|
| 141 |
+
mdl = GPT(GPTConfig(**meta["config"]))
|
| 142 |
+
mdl.load_state_dict(load_file(str(probe_path)), strict=False)
|
| 143 |
+
mdl.eval()
|
| 144 |
+
ids = tok.encode("\n") or [0]
|
| 145 |
+
idx = torch.tensor([ids], dtype=torch.long)
|
| 146 |
+
with torch.no_grad():
|
| 147 |
+
out = mdl.generate(idx, args.guard_max_new, temperature=0.8, top_k=40)
|
| 148 |
+
text = tok.decode(out[0].tolist())
|
| 149 |
+
stats["kamus_ratio"] = round(word_known_ratio(text, wordset), 4)
|
| 150 |
+
print(f"[pipeline] kamus_ratio={stats['kamus_ratio']:.2%}")
|
| 151 |
stats["pipeline"] = {
|
| 152 |
"tag": args.tag,
|
| 153 |
"timestamp": datetime.datetime.now().isoformat(timespec="seconds"),
|