sudoping01's picture
Update app.py
5806da7 verified
import gradio as gr
from transformers import pipeline
from typing import Union, List
class BambaraTranslator:
def __init__(self, model_name: str = "sudoping01/nllb-bambara-v2"):
self.translator = pipeline(
"translation",
model=model_name,
max_length=512,
truncation=True ,
device=-1 # Force CPU
)
self.flores_codes = {
"French": "fra_Latn",
"English": "eng_Latn",
"Bambara": "bam_Latn"
}
def translate(self, text: Union[str, List[str]], src_lang: str, tgt_lang: str) -> Union[str, List[str]]:
source_lang = self.flores_codes[src_lang]
target_lang = self.flores_codes[tgt_lang]
if isinstance(text, str):
translation = self.translator(text, src_lang=source_lang, tgt_lang=target_lang)
return str(translation[0]['translation_text'])
translations = self.translator(text, src_lang=source_lang, tgt_lang=target_lang)
return [str(t['translation_text']) for t in translations]
# Initialize translator
translator = BambaraTranslator()
# Three examples (Bambara, French, English)
examples = [
"An filɛ ni ye yɔrɔ minna ni an ye an sigi ka a layɛ yala an bɛ ka baara min kɛ ɛsike a kɛlen don ka Ɲɛ wa ? Bɛɛ ka kan ka i jɔyɔrɔ fa walasa an ka se ka taa Ɲɛ",
"Le Mali est un pays riche en culture mais confronté à de nombreux défis.",
"The sun rises every morning to bring light to the world."
]
def translate_text(src_lang, tgt_lang, text):
if not text.strip():
return "Please enter text to translate."
if src_lang == tgt_lang:
return "Source and target languages must be different."
try:
result = translator.translate(text, src_lang, tgt_lang)
return result
except Exception as e:
return f"Error: {str(e)}"
with gr.Blocks(title="Bambara Translator") as demo:
gr.Markdown(
"""
# 🇲🇱 Bambara Translator
Translate between Bambara, French, and English instantly.
## How to Use
1. Pick source and target languages
2. Enter text or select an example
3. Click "Translate" to see the result
"""
)
with gr.Row():
src_lang = gr.Dropdown(choices=["Bambara", "French", "English"], label="Source Language", value="Bambara")
tgt_lang = gr.Dropdown(choices=["Bambara", "French", "English"], label="Target Language", value="French")
with gr.Column():
text_input = gr.Textbox(label="Input Text", lines=5, placeholder="Type your text here...")
example_dropdown = gr.Dropdown(
choices=examples,
label="Examples",
value=examples[0]
)
translate_btn = gr.Button("Translate", variant="primary")
output = gr.Textbox(label="Translation", lines=3)
gr.Markdown(
"""
By [sudoping01](https://huggingface.co/sudoping01), from [sudoping01/nllb-bambara-v2](https://huggingface.co/sudoping01/nllb-bambara-v2). Fine-tuned on Meta’s NLLB, CC BY-NC 4.0, non-commercial.
"""
)
# Connect functions
translate_btn.click(
fn=translate_text,
inputs=[src_lang, tgt_lang, text_input],
outputs=output
)
example_dropdown.change(
fn=lambda x: x,
inputs=example_dropdown,
outputs=text_input
)
demo.launch()