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()