rahimizadeh's picture
Update app.py
2fc25f2 verified
# Importing required libraries
from transformers import pipeline # Hugging Face transformers for translation
import gradio as gr # For building the web interface
# Defining available models with descriptive names
MODELS = {
"T5-small (Fast)": "t5-small", # Smaller, faster model
"T5-base (Better Quality)": "t5-base" # Larger, more accurate model
}
def translate_text(text, model_name, max_length=50):
"""
Translates English text to French using the specified model.
Args:
text (str): Input English text
model_name (str): Key from MODELS dictionary
max_length (int): Maximum length of generated translation
Returns:
str: Translated French text
"""
# Initializing the translation pipeline
translator = pipeline(
"translation_en_to_fr",
model=MODELS[model_name], # Select model based on user choice
truncation=True # Ensure long texts are truncated properly
)
# Performing translation with length control
result = translator(text, max_length=max_length)[0]["translation_text"]
return result
# Creating Gradio interface using Blocks for advanced layout
with gr.Blocks(title="Advanced English→French Translator") as demo:
# ===== HEADER SECTION =====
gr.Markdown("## 🌍 English to French Translator")
gr.Markdown("Powered by Hugging Face Transformers")
# ===== MAIN LAYOUT (2 COLUMNS) =====
with gr.Row():
# === LEFT COLUMN (INPUTS) ===
with gr.Column():
# Text input box
input_text = gr.Textbox(
label="English Text",
placeholder="Type something...",
lines=3 # 3-line tall textbox
)
# Model selection dropdown
model_choice = gr.Dropdown(
choices=list(MODELS.keys()), # Show model options
value="T5-small (Fast)", # Default selection
label="Model"
)
# Translation length slider
max_length = gr.Slider(
minimum=10, # Min character length
maximum=200, # Max character length
value=50, # Default value
label="Max Translation Length"
)
# Submit button
submit_btn = gr.Button("Translate", variant="primary")
# === RIGHT COLUMN (OUTPUT) ===
with gr.Column():
# Output text box (non-editable)
output_text = gr.Textbox(
label="French Translation",
interactive=False, # Users can't edit output
lines=5 # 5-line tall textbox
)
# ===== EXAMPLE SECTION =====
gr.Examples(
examples=[
["She walks in beauty, like the night Of cloudless climes and starry skies.", "T5-small (Fast)", 100],
["And all that’s best of dark and bright Meet in her aspect and her eyes.", "T5-base (Better Quality)", 110]
],
inputs=[input_text, model_choice, max_length], # Auto-fill these inputs
label="Try these examples!" # Section header
)
# ===== EVENT HANDLING =====
submit_btn.click(
fn=translate_text, # Function to call
inputs=[input_text, model_choice, max_length], # Input components
outputs=output_text, # Output component
api_name="translate" # For API endpoint naming
)
# Launch the app
if __name__ == "__main__":
demo.launch()