translation / app.py
orik-ss's picture
fix UI text — reflect actual model (NLLB-3.3B CT2 int8, not 600M)
fdb6939
Raw
History Blame Contribute Delete
3.91 kB
"""Gradio app: NLLB-200 translation with selectable source/target languages."""
import os
import time
import gradio as gr
from translator import (
LANGUAGE_LABELS,
LABEL_TO_TOKEN,
TOKEN_TO_LABEL,
TranslatorClient,
)
AUTO_DETECT = "Auto-detect"
translator = TranslatorClient()
def run_translate(text: str, source_label: str, target_label: str):
text = (text or "").strip()
if not text:
return "", "Enter some text to translate."
target_token = LABEL_TO_TOKEN.get(target_label)
if target_token is None:
return "", "Pick a target language."
if source_label == AUTO_DETECT:
src_token = translator.detect_language(text)
detected_label = TOKEN_TO_LABEL.get(src_token, "Unknown")
source_info = f"Detected source: {detected_label}"
else:
src_token = LABEL_TO_TOKEN.get(source_label)
if src_token is None:
return "", "Pick a valid source language."
source_info = f"Source: {source_label}"
if src_token == target_token:
return text, f"{source_info} (same as target — returned as-is)."
start = time.time()
translated = translator.translate(text, src_token, target_token)
elapsed_ms = int((time.time() - start) * 1000)
status = f"{source_info}{target_label} ({elapsed_ms} ms)"
return translated, status
with gr.Blocks(title="Translation") as app:
gr.Markdown("# Translation")
gr.Markdown(
"Translate text between supported languages with **NLLB-200-3.3B** "
"(`facebook/nllb-200-3.3B`, CTranslate2 int8 — "
"[`Napron/nllb-200-3.3B-ct2-int8`](https://huggingface.co/Napron/nllb-200-3.3B-ct2-int8)). "
"Source language can be auto-detected, or you can pick it explicitly. "
"**CPU-only** — first translation warms the model."
)
with gr.Row():
with gr.Column(scale=1):
source_dropdown = gr.Dropdown(
choices=[AUTO_DETECT] + LANGUAGE_LABELS,
value=AUTO_DETECT,
label="Source language",
)
input_text = gr.Textbox(
label="Input text",
placeholder="Type or paste text to translate…",
lines=10,
max_lines=20,
)
run_btn = gr.Button("Translate", variant="primary")
with gr.Column(scale=1):
target_dropdown = gr.Dropdown(
choices=LANGUAGE_LABELS,
value="English",
label="Target language",
)
output_text = gr.Textbox(
label="Translation",
lines=10,
max_lines=20,
interactive=False,
)
status_box = gr.Textbox(
label="Status",
lines=2,
interactive=False,
)
gr.Examples(
examples=[
["Salam, necəsən? Bu gün hava çox gözəldir.", AUTO_DETECT, "English"],
["Привет, как дела? Сегодня прекрасная погода.", "Russian", "English"],
["สวัสดีครับ วันนี้อากาศดีมาก", AUTO_DETECT, "English"],
["The quick brown fox jumps over the lazy dog.", "English", "French"],
["Hola, ¿cómo estás? Hace muy buen tiempo hoy.", "Spanish", "German"],
],
inputs=[input_text, source_dropdown, target_dropdown],
)
run_btn.click(
fn=run_translate,
inputs=[input_text, source_dropdown, target_dropdown],
outputs=[output_text, status_box],
concurrency_limit=1,
)
app.launch(
server_name=os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0"),
server_port=int(
os.environ.get(
"PORT",
os.environ.get("GRADIO_SERVER_PORT", 7860),
)
),
)