Spaces:
Running
Running
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() |