LLMdemo / app.py
kevin1911's picture
Create app.py
1f47b32 verified
raw
history blame
2.97 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
def load_model(model_name="gpt2"):
"""Load a GPT-2 model and tokenizer from Hugging Face."""
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
return pipeline("text-generation", model=model, tokenizer=tokenizer)
# Initialize the pipeline outside the function so it's loaded only once
generator = load_model()
def generate_text(prompt, max_length=100, temperature=1.0, top_p=0.9):
"""
Generates text based on the prompt using a GPT-2 model.
Args:
prompt (str): Input text from the user.
max_length (int): Max tokens in the prompt + generation.
temperature (float): Controls randomness.
top_p (float): Nucleus sampling hyperparameter.
Returns:
str: Generated text from GPT-2.
"""
results = generator(
prompt,
max_length=max_length,
temperature=temperature,
top_p=top_p,
num_return_sequences=1,
# GPT-2 may not have a dedicated pad token, so eos_token_id used:
pad_token_id=generator.tokenizer.eos_token_id
)
return results[0]["generated_text"]
# Build the Gradio interface
with gr.Blocks() as demo:
gr.Markdown(
"""
# Educational GPT-2 Demo
This demo demonstrates how a smaller Large Language Model (GPT-2) predicts text.
Change the parameters below to see how the model's output is affected:
- **Max Length** controls the total number of tokens in the output.
- **Temperature** controls randomness (higher means more creative/chaotic).
- **Top-p** controls the diversity of tokens (lower means more conservative choices).
"""
)
with gr.Row():
with gr.Column():
prompt = gr.Textbox(
lines=4,
label="Prompt",
placeholder="Type a prompt here",
value="Once upon a time,"
)
max_len = gr.Slider(
minimum=20,
maximum=200,
value=100,
step=1,
label="Max Length"
)
temp = gr.Slider(
minimum=0.1,
maximum=2.0,
value=1.0,
step=0.1,
label="Temperature"
)
top_p = gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.9,
step=0.05,
label="Top-p"
)
generate_button = gr.Button("Generate")
with gr.Column():
output_box = gr.Textbox(
label="Generated Text",
lines=10
)
generate_button.click(
fn=generate_text,
inputs=[prompt, max_len, temp, top_p],
outputs=[output_box]
)
demo.launch()