Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -3,10 +3,10 @@ LocaleNLP Translation Service
|
|
| 3 |
============================
|
| 4 |
|
| 5 |
A multi-language translation application supporting English, Wolof, Hausa, and Darija.
|
| 6 |
-
Features text, audio, and document translation with
|
| 7 |
|
| 8 |
Author: LocaleNLP Team
|
| 9 |
-
Version: 1.0
|
| 10 |
"""
|
| 11 |
|
| 12 |
import os
|
|
@@ -280,7 +280,7 @@ class TranslationService:
|
|
| 280 |
target_lang: Language
|
| 281 |
) -> str:
|
| 282 |
"""
|
| 283 |
-
Translate text from source to target language.
|
| 284 |
|
| 285 |
Args:
|
| 286 |
text: Input text to translate
|
|
@@ -292,11 +292,63 @@ class TranslationService:
|
|
| 292 |
"""
|
| 293 |
if not text.strip():
|
| 294 |
return "No input text to translate."
|
| 295 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 296 |
pipeline_obj, lang_tag = self.model_manager.get_translation_pipeline(
|
| 297 |
source_lang, target_lang
|
| 298 |
)
|
| 299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
# Process text in paragraphs
|
| 301 |
paragraphs = text.splitlines()
|
| 302 |
translated_paragraphs = []
|
|
@@ -420,7 +472,7 @@ class TranslationApp:
|
|
| 420 |
|
| 421 |
with gr.Blocks(
|
| 422 |
title="LocaleNLP Translation Service",
|
| 423 |
-
theme=gr.themes.
|
| 424 |
) as interface:
|
| 425 |
# Header
|
| 426 |
gr.Markdown("""
|
|
@@ -437,7 +489,7 @@ class TranslationApp:
|
|
| 437 |
)
|
| 438 |
|
| 439 |
input_lang = gr.Dropdown(
|
| 440 |
-
choices=[lang.value for lang in Language
|
| 441 |
label="Input Language",
|
| 442 |
value=Language.ENGLISH.value
|
| 443 |
)
|
|
@@ -477,12 +529,12 @@ class TranslationApp:
|
|
| 477 |
|
| 478 |
translate_btn = gr.Button(
|
| 479 |
"🔄 Process & Translate",
|
| 480 |
-
variant="
|
| 481 |
)
|
| 482 |
|
| 483 |
output_text = gr.Textbox(
|
| 484 |
label="Translated Text",
|
| 485 |
-
lines=
|
| 486 |
interactive=False
|
| 487 |
)
|
| 488 |
|
|
|
|
| 3 |
============================
|
| 4 |
|
| 5 |
A multi-language translation application supporting English, Wolof, Hausa, and Darija.
|
| 6 |
+
Features text, audio, and document translation with automatic chaining for all language pairs.
|
| 7 |
|
| 8 |
Author: LocaleNLP Team
|
| 9 |
+
Version: 1.0
|
| 10 |
"""
|
| 11 |
|
| 12 |
import os
|
|
|
|
| 280 |
target_lang: Language
|
| 281 |
) -> str:
|
| 282 |
"""
|
| 283 |
+
Translate text from source to target language with automatic chaining.
|
| 284 |
|
| 285 |
Args:
|
| 286 |
text: Input text to translate
|
|
|
|
| 292 |
"""
|
| 293 |
if not text.strip():
|
| 294 |
return "No input text to translate."
|
| 295 |
+
|
| 296 |
+
# Direct translation if model exists
|
| 297 |
+
if (source_lang, target_lang) in TRANSLATION_MODELS:
|
| 298 |
+
return self._direct_translate(text, source_lang, target_lang)
|
| 299 |
+
|
| 300 |
+
# Automatic chaining through English
|
| 301 |
+
return self._chained_translate(text, source_lang, target_lang)
|
| 302 |
+
|
| 303 |
+
def _direct_translate(
|
| 304 |
+
self,
|
| 305 |
+
text: str,
|
| 306 |
+
source_lang: Language,
|
| 307 |
+
target_lang: Language
|
| 308 |
+
) -> str:
|
| 309 |
+
"""Perform direct translation using available model."""
|
| 310 |
pipeline_obj, lang_tag = self.model_manager.get_translation_pipeline(
|
| 311 |
source_lang, target_lang
|
| 312 |
)
|
| 313 |
|
| 314 |
+
return self._process_text_with_pipeline(text, pipeline_obj, lang_tag)
|
| 315 |
+
|
| 316 |
+
def _chained_translate(
|
| 317 |
+
self,
|
| 318 |
+
text: str,
|
| 319 |
+
source_lang: Language,
|
| 320 |
+
target_lang: Language
|
| 321 |
+
) -> str:
|
| 322 |
+
"""
|
| 323 |
+
Perform chained translation through English as intermediate language.
|
| 324 |
+
|
| 325 |
+
Args:
|
| 326 |
+
text: Input text to translate
|
| 327 |
+
source_lang: Source language
|
| 328 |
+
target_lang: Target language
|
| 329 |
+
|
| 330 |
+
Returns:
|
| 331 |
+
Translated text through chaining
|
| 332 |
+
"""
|
| 333 |
+
# First: source_lang -> English
|
| 334 |
+
intermediate_text = self._direct_translate(
|
| 335 |
+
text, source_lang, Language.ENGLISH
|
| 336 |
+
)
|
| 337 |
+
|
| 338 |
+
# Second: English -> target_lang
|
| 339 |
+
final_text = self._direct_translate(
|
| 340 |
+
intermediate_text, Language.ENGLISH, target_lang
|
| 341 |
+
)
|
| 342 |
+
|
| 343 |
+
return final_text
|
| 344 |
+
|
| 345 |
+
def _process_text_with_pipeline(
|
| 346 |
+
self,
|
| 347 |
+
text: str,
|
| 348 |
+
pipeline_obj: Any,
|
| 349 |
+
lang_tag: str
|
| 350 |
+
) -> str:
|
| 351 |
+
"""Process text using translation pipeline."""
|
| 352 |
# Process text in paragraphs
|
| 353 |
paragraphs = text.splitlines()
|
| 354 |
translated_paragraphs = []
|
|
|
|
| 472 |
|
| 473 |
with gr.Blocks(
|
| 474 |
title="LocaleNLP Translation Service",
|
| 475 |
+
theme=gr.themes.Base(primary_hue=gr.themes.colors.black)
|
| 476 |
) as interface:
|
| 477 |
# Header
|
| 478 |
gr.Markdown("""
|
|
|
|
| 489 |
)
|
| 490 |
|
| 491 |
input_lang = gr.Dropdown(
|
| 492 |
+
choices=[lang.value for lang in Language],
|
| 493 |
label="Input Language",
|
| 494 |
value=Language.ENGLISH.value
|
| 495 |
)
|
|
|
|
| 529 |
|
| 530 |
translate_btn = gr.Button(
|
| 531 |
"🔄 Process & Translate",
|
| 532 |
+
variant="secondary"
|
| 533 |
)
|
| 534 |
|
| 535 |
output_text = gr.Textbox(
|
| 536 |
label="Translated Text",
|
| 537 |
+
lines=10,
|
| 538 |
interactive=False
|
| 539 |
)
|
| 540 |
|