Anupam251272's picture
Create app.py
ea19bf1 verified
import gradio as gr
from datasets import load_dataset
import torch
from transformers import AutoTokenizer, T5ForConditionalGeneration # Changed model class
# Check if GPU is available
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"Using device: {device}")
# Load dataset
ds = load_dataset("AI-MO/NuminaMath-CoT")
# Load model and tokenizer
model_name = "google/flan-t5-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name).to(device) # Changed model class
def process_example(example):
"""Process a single example from the dataset"""
question = example['question']
solution = example['solution']
answer = example['answer']
return f"Question: {question}\nSolution: {solution}\nAnswer: {answer}"
def get_random_example():
"""Get a random example from the dataset"""
import random
idx = random.randint(0, len(ds['train']) - 1)
return process_example(ds['train'][idx])
def solve_math_problem(question):
"""Generate solution for a given math problem"""
# Add prefix for T5
input_text = "solve math: " + question
inputs = tokenizer(input_text, return_tensors="pt", max_length=512, truncation=True).to(device)
# Generate response
outputs = model.generate(
inputs["input_ids"],
max_length=200,
num_return_sequences=1,
temperature=0.7,
do_sample=True,
top_p=0.9,
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
# Create Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Math Problem Solver")
gr.Markdown("Using FLAN-T5 model to solve mathematical problems with step-by-step solutions.")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Enter your math problem",
placeholder="Type your math problem here...",
lines=3
)
with gr.Row():
submit_btn = gr.Button("Solve Problem", variant="primary")
example_btn = gr.Button("Show Random Example")
with gr.Column():
output_text = gr.Textbox(
label="Solution",
lines=8,
show_copy_button=True
)
# Set up event handlers
submit_btn.click(
fn=solve_math_problem,
inputs=input_text,
outputs=output_text
)
example_btn.click(
fn=get_random_example,
inputs=None,
outputs=input_text
)
# Launch the interface
demo.launch(share=True)