Spaces:
Running
on
Zero
Running
on
Zero
File size: 5,426 Bytes
9331fff 035d3fc 8bb46f0 035d3fc 7343e3f 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 7343e3f 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 035d3fc 8bb46f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
import gradio as gr
from transformers import pipeline
import torch
import logging
import spaces
from typing import Union, List
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
if torch.cuda.is_available():
device = "cuda"
logger.info("Using CUDA for inference.")
elif torch.backends.mps.is_available():
device = "mps"
logger.info("Using MPS for inference.")
else:
device = "cpu"
logger.info("Using CPU for inference.")
class BambaraTranslator:
def __init__(self, model_name: str = "sudoping01/nllb-bambara-v2"):
self.translator = pipeline(
"translation",
model=model_name,
device=device,
max_length=512,
truncation=True
)
self.flores_codes = {
"French": "fra_Latn",
"English": "eng_Latn",
"Bambara": "bam_Latn"
}
logger.info("Translation pipeline initialized successfully.")
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]
logger.info(f"Translating text from {source_lang} to {target_lang}.")
try:
if isinstance(text, str):
translation = self.translator(text, src_lang=source_lang, tgt_lang=target_lang, num_beams=2)
return str(translation[0]['translation_text'])
else:
translations = self.translator(text, src_lang=source_lang, tgt_lang=target_lang, num_beams=2)
return [str(t['translation_text']) for t in translations]
except Exception as e:
logger.error(f"Translation failed: {e}")
return "An error occurred during translation."
translator = BambaraTranslator()
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 Ɲɛ", "Bambara", "French"],
["Le Mali est un pays riche en culture mais confronté à de nombreux défis.", "French", "Bambara"],
["The sun rises every morning to bring light to the world.", "English", "Bambara"],
["Good morning", "English", "Bambara"],
]
@spaces.GPU()
def translate_text(text: str, src_lang: str, tgt_lang: str) -> str:
"""
Translate the input text from the source language to the target language.
"""
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)
logger.info("Translation successful.")
return result
except Exception as e:
logger.error(f"Translation failed: {e}")
return f"Error: {str(e)}"
def build_interface():
"""
Builds the Gradio interface for translating text between supported languages.
"""
with gr.Blocks(title="Bambara Translator") as demo:
gr.Markdown(
"""
# 🇲🇱 Bambara Translator
Translate between Bambara, French, and English instantly using NLLB model.
## How to Use
1. Select source and target languages from the dropdowns
2. Enter your text or choose from examples
3. Click "Translate" to see the result
"""
)
with gr.Row():
with gr.Column():
text_input = gr.Textbox(
lines=5,
label="Text to Translate",
placeholder="Enter text here..."
)
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"
)
translate_btn = gr.Button("Translate", variant="primary")
with gr.Column():
output = gr.Textbox(label="Translation", lines=5, interactive=False)
# Examples section
gr.Examples(
examples=examples,
inputs=[text_input, src_lang, tgt_lang],
outputs=output,
fn=translate_text,
cache_examples=False
)
gr.Markdown(
"""
**Model:** [sudoping01/nllb-bambara-v2](https://huggingface.co/sudoping01/nllb-bambara-v2)
**License:** CC BY-NC 4.0 (Non-commercial use)
**Based on:** Meta's NLLB (No Language Left Behind)
"""
)
translate_btn.click(
fn=translate_text,
inputs=[text_input, src_lang, tgt_lang],
outputs=output
)
return demo
if __name__ == "__main__":
logger.info("Starting the Gradio interface for the Bambara translator.")
interface = build_interface()
interface.launch()
logger.info("Gradio interface running.") |