tinyllm-28m / app.py
grahmseinstein's picture
Upload app.py with huggingface_hub
a6da8e0 verified
Raw History Blame Contribute Delete
1.87 kB
import gradio as gr
import torch
import tiktoken
from src.model import TinyLLM, Config
# Setup
config = Config()
config.block_size = 128
enc = tiktoken.get_encoding("gpt2")
# Load model
model = TinyLLM(config)
# Try both checkpoint locations
import os
ckpt_paths = ["checkpoints/tinyllm.pt", "tinyllm.pt", "checkpoints/best.pt"]
ckpt = None
for p in ckpt_paths:
if os.path.exists(p):
ckpt = p
break
if ckpt is None:
print(f"No checkpoint found, tried: {ckpt_paths}")
print("Training one first or downloading from HF...")
from huggingface_hub import hf_hub_download
ckpt = hf_hub_download("grahmseinstein/tinyllm-28m", "tinyllm.pt", local_dir=".")
print(f"Loading checkpoint: {ckpt}")
model.load_state_dict(torch.load(ckpt, map_location='cpu'))
model.eval()
print(f"Model loaded: {sum(p.numel() for p in model.parameters())/1e6:.2f}M params")
def generate(prompt, max_tokens):
if not prompt or prompt.strip() == "":
prompt = "Hello"
# Encode
ids = torch.tensor([enc.encode(prompt)], dtype=torch.long)
# Generate
with torch.no_grad():
out = model.generate(ids, max_new_tokens=int(max_tokens))
# Decode
text = enc.decode(out[0].tolist())
return text
# Gradio UI
with gr.Blocks(title="TinyLLM 28M - grahmseinstein") as demo:
gr.Markdown("# TinyLLM 28M Prototype\nby grahmseinstein - GPT2 50257 tokens")
with gr.Row():
prompt = gr.Textbox(label="Prompt", value="Hello, I am a", lines=2)
max_tokens = gr.Slider(20, 200, value=100, step=10, label="Max tokens")
output = gr.Textbox(label="Generated", lines=10)
btn = gr.Button("Generate")
btn.click(fn=generate, inputs=[prompt, max_tokens], outputs=output)
prompt.submit(fn=generate, inputs=[prompt, max_tokens], outputs=output)
demo.launch(server_name="0.0.0.0", server_port=7860, share=False)