thefinalboss commited on
Commit
da318d2
·
verified ·
1 Parent(s): 6d47e41

Upload examples/generate.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. examples/generate.py +76 -0
examples/generate.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """PALIMPSESTE — Generate text from a trained model.
3
+
4
+ Usage:
5
+ python examples/generate.py --model ./my_model --prompt "the " --max-tokens 100
6
+ python examples/generate.py --model ./my_model --interactive
7
+ python examples/generate.py --model user/palimpseste-small --prompt "the " # from HF Hub
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import argparse
13
+ import sys
14
+ from pathlib import Path
15
+
16
+ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
17
+
18
+ from palimseste.hf import HFPalimpsesteLM
19
+
20
+
21
+ def parse_args() -> argparse.Namespace:
22
+ p = argparse.ArgumentParser(description="Generate text from a trained PALIMPSESTE LM.")
23
+ p.add_argument("--model", "-m", type=str, required=True,
24
+ help="path to a saved model dir, or an HF Hub repo id")
25
+ p.add_argument("--prompt", "-p", type=str, default="",
26
+ help="prompt text (empty for BOS-only)")
27
+ p.add_argument("--max-tokens", "-n", type=int, default=100)
28
+ p.add_argument("--temperature", "-t", type=float, default=0.5)
29
+ p.add_argument("--top-k", type=int, default=None)
30
+ p.add_argument("--seed", type=int, default=None)
31
+ p.add_argument("--interactive", "-i", action="store_true",
32
+ help="interactive REPL mode")
33
+ return p.parse_args()
34
+
35
+
36
+ def load_model(model_path: str) -> HFPalimpsesteLM:
37
+ p = Path(model_path)
38
+ if p.exists() and p.is_dir():
39
+ return HFPalimpsesteLM.from_pretrained(p)
40
+ # try HF Hub
41
+ try:
42
+ from huggingface_hub import snapshot_download
43
+ local = snapshot_download(repo_id=model_path, repo_type="model")
44
+ return HFPalimpsesteLM.from_pretrained(local)
45
+ except Exception as e:
46
+ sys.exit(f"could not load model from '{model_path}': {e}")
47
+
48
+
49
+ def main() -> None:
50
+ args = parse_args()
51
+ print(f"loading model from {args.model} ...", file=sys.stderr)
52
+ lm = load_model(args.model)
53
+ print(f"loaded: D={lm.config.D:,} |M|={len(lm.mem):,} "
54
+ f"vocab={lm.config.vocab_size}", file=sys.stderr)
55
+
56
+ if args.interactive:
57
+ print("PALIMPSESTE interactive mode. Ctrl+C to exit.", file=sys.stderr)
58
+ while True:
59
+ try:
60
+ prompt = input(">>> ")
61
+ except (EOFError, KeyboardInterrupt):
62
+ print("\nbye.")
63
+ break
64
+ out = lm.generate(prompt, max_new_tokens=args.max_tokens,
65
+ temperature=args.temperature, top_k=args.top_k,
66
+ seed=args.seed)
67
+ print(out.text)
68
+ else:
69
+ out = lm.generate(args.prompt, max_new_tokens=args.max_tokens,
70
+ temperature=args.temperature, top_k=args.top_k,
71
+ seed=args.seed)
72
+ print(out.text)
73
+
74
+
75
+ if __name__ == "__main__":
76
+ main()