llama-models / app /translation_tool.py
deniskiplimo816's picture
Upload 27 files
293ab16 verified
from transformers import pipeline, MarianMTModel, MarianTokenizer
from typing import Optional
# Load English->French pipeline once (using HuggingFace translation pipeline)
_en_fr_translator = pipeline("translation_en_to_fr", model="Helsinki-NLP/opus-mt-en-fr")
# Load English->Spanish MarianMT model and tokenizer once
_es_model_name = "Helsinki-NLP/opus-mt-en-es"
_es_tokenizer = MarianTokenizer.from_pretrained(_es_model_name)
_es_model = MarianMTModel.from_pretrained(_es_model_name)
def translate_to_french(text: str) -> str:
"""Translate English text to French using HuggingFace pipeline."""
try:
result = _en_fr_translator(text)
return result[0]['translation_text']
except Exception as e:
return f"Translation error (EN->FR): {str(e)}"
def translate_to_spanish(text: str) -> str:
"""Translate English text to Spanish using MarianMT."""
try:
inputs = _es_tokenizer(text, return_tensors="pt", padding=True)
translated_tokens = _es_model.generate(**inputs)
return _es_tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
except Exception as e:
return f"Translation error (EN->ES): {str(e)}"
def translate(text: str, to_lang: Optional[str] = "fr") -> str:
"""
General translate function.
Supported: 'fr' (French), 'es' (Spanish).
Defaults to French.
"""
if to_lang == "fr":
return translate_to_french(text)
elif to_lang == "es":
return translate_to_spanish(text)
else:
return f"Unsupported target language '{to_lang}'. Supported: 'fr', 'es'."