Spaces:
Sleeping
Sleeping
| """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), | |
| ) | |
| ), | |
| ) | |