nomadeats / core /translation.py
carreroguille's picture
Upload 15 files
00fddaf verified
Raw
History Blame Contribute Delete
1.92 kB
"""
Paso 2: Traducción con NLLB-200.
"""
import time
from typing import Dict
import torch
from config import LANG_CODES, TRANSLATION_MODEL_ID
from core.models import ModelManager
def translate_text(
spanish_text: str,
manager: ModelManager,
target_lang: str = "English",
) -> Dict:
"""
Traduce texto del español al idioma destino.
Returns:
dict con 'translated_text', 'processing_time', 'model', 'success'
"""
start_time = time.time()
try:
src_lang = LANG_CODES["Spanish"]
tgt_lang = LANG_CODES[target_lang]
manager.translation_tokenizer.src_lang = src_lang
inputs = manager.translation_tokenizer(
spanish_text,
return_tensors="pt",
padding=True,
truncation=True,
max_length=512,
).to(manager.device)
print(f"🌐 Traduciendo a {target_lang}...")
with torch.no_grad():
generated_tokens = manager.translation_model.generate(
**inputs,
forced_bos_token_id=manager.translation_tokenizer.lang_code_to_id[tgt_lang],
max_length=512,
num_beams=5,
early_stopping=True,
)
translated_text = manager.translation_tokenizer.batch_decode(
generated_tokens, skip_special_tokens=True
)[0]
return {
"translated_text": translated_text.strip(),
"processing_time": time.time() - start_time,
"model": TRANSLATION_MODEL_ID,
"source_lang": "Spanish",
"target_lang": target_lang,
"success": True,
}
except Exception as e:
return {
"translated_text": "",
"processing_time": time.time() - start_time,
"model": TRANSLATION_MODEL_ID,
"success": False,
"error": str(e),
}