Translator / app.py
Laiba-Huggingface's picture
Update app.py
340e2da verified
import gradio as gr
import torch
from transformers import MarianMTModel, MarianTokenizer
# Ensure required libraries are installed
import os
os.system("pip install sentencepiece")
# Check if GPU is available and use it
device = "cuda" if torch.cuda.is_available() else "cpu"
# Load models and tokenizers once (globally)
model_en_to_ur = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-en-ur").to(device)
tokenizer_en_to_ur = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-ur")
model_ur_to_en = MarianMTModel.from_pretrained("Helsinki-NLP/opus-mt-ur-en").to(device)
tokenizer_ur_to_en = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-ur-en")
# Apply torch.compile() for optimization (if using PyTorch 2.0+)
if torch.__version__ >= "2.0":
model_en_to_ur = torch.compile(model_en_to_ur)
model_ur_to_en = torch.compile(model_ur_to_en)
# Function to translate text
def translate(text, direction):
if not text.strip():
return "Please enter some text to translate."
if direction == "English to Urdu":
tokenizer, model = tokenizer_en_to_ur, model_en_to_ur
else:
tokenizer, model = tokenizer_ur_to_en, model_ur_to_en
# Tokenize input text (optimized padding)
inputs = tokenizer(text, return_tensors="pt", padding="longest", truncation=True).to(device)
# Generate translation
with torch.no_grad():
translated = model.generate(**inputs, max_length=512)
# Decode output text
output = tokenizer.decode(translated[0], skip_special_tokens=True)
return output
# Gradio interface
interface = gr.Interface(
fn=translate,
inputs=[
gr.Textbox(label="Enter Text"),
gr.Radio(["English to Urdu", "Urdu to English"], label="Translation Direction", value="English to Urdu"),
],
outputs=gr.Textbox(label="Translated Text"),
title="⚡ Fast English ↔ Urdu Translator",
description="Translate text between English and Urdu quickly using a neural machine translation model with GPU acceleration.",
)
# Launch the Gradio app
if __name__ == "__main__":
interface.launch()