garima-mahato's picture
Update app.py
5a88949 verified
Raw
History Blame Contribute Delete
2.27 kB
import torch
import gradio as gr
from transformers import GPT2Tokenizer
from model import SmolLM2Config, SmolLM2ForCausalLM
tokenizer = GPT2Tokenizer.from_pretrained(
"HuggingFaceTB/cosmo2-tokenizer"
)
tokenizer.pad_token = tokenizer.eos_token
vocab_size = tokenizer.vocab_size
# Load the model
def load_model():
config = SmolLM2Config()
model = SmolLM2ForCausalLM(config) # Create base model instead of Lightning model
# Load just the model weights
state_dict = torch.load("model_weights.pth", map_location="cpu")['model_state_dict']
model.load_state_dict(state_dict)
model.eval()
return model
def generate_text(prompt, max_tokens, temperature=0.8, top_k=40):
"""Generate text based on the prompt"""
try:
# Encode the prompt
prompt_ids = tokenizer.encode(prompt, return_tensors="pt")
# Move to device if needed
device = next(model.parameters()).device
prompt_ids = prompt_ids.to(device)
# Generate text
with torch.no_grad():
generated_ids = model.generate( # Call generate directly on base model
prompt_ids,
max_new_tokens=max_tokens,
temperature=temperature,
top_k=top_k,
)
# Decode the generated text
generated_text = tokenizer.decode(generated_ids[0].tolist())
return generated_text
except Exception as e:
return f"An error occurred: {str(e)}"
# Load the model globally
model = load_model()
# Create the Gradio interface
demo = gr.Interface(
fn=generate_text,
inputs=[
gr.Textbox(
label="Enter your prompt", placeholder="Hello there!", lines=3
),
gr.Slider(
minimum=50,
maximum=500,
value=100,
step=10,
label="Maximum number of tokens",
),
],
outputs=gr.Textbox(label="Generated Text", lines=10),
title="Custom SmolLM2-135 Text Generator",
description="Enter a prompt and a custom SmolLM2 model will continue.",
examples=[
["The Nilakantha Series is a historically significant", 100],
["o find the second derivative of", 150],
],
)
if __name__ == "__main__":
demo.launch()