abersbail's picture
Add local small LLM Python Space
740c342 verified
import gradio as gr
from mini_llm.config import LLMConfig
from mini_llm.service import LocalMiniLLMService
config = LLMConfig()
service = LocalMiniLLMService(config=config)
def generate_text(prompt, max_new_tokens, temperature, top_k):
text, status = service.generate(
prompt=prompt,
max_new_tokens=int(max_new_tokens),
temperature=float(temperature),
top_k=int(top_k),
)
return text, status
def train_model(extra_text, steps):
return service.train(extra_text=extra_text, steps=int(steps))
def reset_model():
return service.reset()
with gr.Blocks(
title="Local Small LLM",
theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray"),
) as demo:
gr.Markdown(
"""
# Local Small LLM
A tiny language model written in Python and trained from scratch on local text.
- No external pretrained LLM
- Tiny transformer decoder
- Character-level tokenizer
- CPU-friendly local training
"""
)
with gr.Tab("Generate"):
prompt_input = gr.Textbox(
label="Prompt",
value="User: hello\nAssistant:",
lines=6,
)
with gr.Row():
max_tokens_input = gr.Slider(20, 240, value=120, step=10, label="Max New Tokens")
temperature_input = gr.Slider(0.2, 1.5, value=0.8, step=0.05, label="Temperature")
top_k_input = gr.Slider(1, 32, value=16, step=1, label="Top-K")
generate_button = gr.Button("Generate", variant="primary")
output_text = gr.Textbox(label="Output", lines=10)
output_status = gr.Textbox(label="Status", lines=3)
with gr.Tab("Train"):
extra_text_input = gr.Textbox(
label="Extra Training Text",
placeholder="Add your own local text here to continue training the model.",
lines=10,
)
steps_input = gr.Slider(10, 400, value=120, step=10, label="Training Steps")
train_button = gr.Button("Train / Continue Training", variant="primary")
reset_button = gr.Button("Reset Model")
train_status = gr.Textbox(label="Training Status", lines=6)
generate_button.click(
fn=generate_text,
inputs=[prompt_input, max_tokens_input, temperature_input, top_k_input],
outputs=[output_text, output_status],
)
train_button.click(
fn=train_model,
inputs=[extra_text_input, steps_input],
outputs=[train_status],
)
reset_button.click(
fn=reset_model,
outputs=[train_status],
)
if __name__ == "__main__":
demo.launch()