File size: 1,775 Bytes
5385753
 
ab265b9
5385753
 
 
 
 
ab265b9
 
5385753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61d5788
733c10f
 
5385753
 
 
733c10f
 
 
 
 
 
 
 
 
5385753
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from __future__ import annotations

import sys
from pathlib import Path

import gradio as gr
import torch

sys.path.insert(0, str(Path(__file__).parent / "src"))

from tiny_transformer.train import load_checkpoint


CHECKPOINT = Path("demo/tiny-transformer-demo.pt")
DEVICE = "cpu"


model, tokenizer = load_checkpoint(str(CHECKPOINT), device=DEVICE)


def generate_text(
    prompt: str,
    max_new_tokens: int,
    temperature: float,
    top_k: int,
) -> str:
    if not prompt:
        prompt = "\n"
    encoded = tokenizer.encode(prompt)
    idx = torch.tensor([encoded], dtype=torch.long, device=DEVICE)
    out = model.generate(
        idx,
        max_new_tokens=max_new_tokens,
        temperature=temperature,
        top_k=top_k,
    )
    return tokenizer.decode(out[0].tolist())


with gr.Blocks(title="Tiny Transformer") as demo:
    gr.Markdown("# Tiny Transformer")
    with gr.Row():
        with gr.Column():
            prompt = gr.Textbox(value="To be", label="Prompt", lines=5)
            max_new_tokens = gr.Slider(8, 240, value=120, step=1, label="New tokens")
            temperature = gr.Slider(0.2, 1.5, value=0.35, step=0.05, label="Temperature")
            top_k = gr.Slider(1, 30, value=3, step=1, label="Top-k")
            button = gr.Button("Generate", variant="primary")
        output = gr.Textbox(label="Output", lines=16)

    gr.Examples(
        examples=[
            ["To be", 120, 0.35, 3],
            ["Attention", 120, 0.35, 3],
            ["The model", 120, 0.35, 3],
        ],
        inputs=[prompt, max_new_tokens, temperature, top_k],
    )

    button.click(
        generate_text,
        inputs=[prompt, max_new_tokens, temperature, top_k],
        outputs=output,
    )

if __name__ == "__main__":
    demo.launch()