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"): #"sudoping01/nllb-200-600M-bambara-nko" ): #"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_Nko": 'nqo_Nkoo', #"bam_Latn", | |
| "Bambara_Latin": "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_Latin", "French", "English", "Bambara_Nko"], label="Source Language", value="Bambara_Latin") | |
| tgt_lang = gr.Dropdown(choices=["Bambara_Latin", "French", "English", "Bambara_Nko"], 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() |