ode-pessoana / sample.py
vreabernardo's picture
ode: 10.7M char-level GPT (tinygrad) trained on Pessoana — best val 1.361 nats
9b31c19 verified
Raw
History Blame Contribute Delete
1.38 kB
"""
Generate Portuguese text from the ode · Pessoana char-GPT.
pip install tinygrad numpy
python sample.py --prompt "A cidade" --tokens 500 --temperature 0.8
"""
import argparse, json, pickle
from pathlib import Path
from tinygrad import Tensor
from tinygrad.nn.state import safe_load, load_state_dict
from model import GPT, GPTConfig
HERE = Path(__file__).resolve().parent
def main():
p = argparse.ArgumentParser()
p.add_argument("--dir", default=str(HERE), help="folder with model.safetensors/config.json/meta.pkl")
p.add_argument("--prompt", default="\n")
p.add_argument("--tokens", type=int, default=500)
p.add_argument("--temperature", type=float, default=0.8)
p.add_argument("--top_k", type=int, default=200)
p.add_argument("--seed", type=int, default=1337)
a = p.parse_args()
Tensor.manual_seed(a.seed)
d = Path(a.dir)
cfg = GPTConfig(**json.load(open(d / "config.json")))
model = GPT(cfg)
load_state_dict(model, safe_load(str(d / "model.safetensors")))
meta = pickle.load(open(d / "meta.pkl", "rb"))
stoi, itos = meta["stoi"], meta["itos"]
Tensor.training = False
idx = Tensor([[stoi[c] for c in a.prompt]])
out = model.generate(idx, a.tokens, temperature=a.temperature, top_k=a.top_k or None)
print("".join(itos[i] for i in out[0].tolist()))
if __name__ == "__main__":
main()