SmartSightAI / src /pipeline /translate.py
GitHub Actions
deploy to Hugging Face Spaces
23e79c5
Raw
History Blame Contribute Delete
1.79 kB
import logging
from deep_translator import GoogleTranslator
class TranslatorModule:
def __init__(self, offline_model=None, offline_tokenizer=None):
self.offline_model = offline_model
self.offline_tokenizer = offline_tokenizer
self.google_translator = GoogleTranslator(source="auto", target="vi")
def translate(self, text: str, mode: str = "Auto-Detect (Online)") -> tuple[str, bool]:
if not text.strip():
return "", False
if mode == "Offline (Helsinki-NLP)":
return self._translate_offline(text), True
# Try Online translation
try:
translated_text = self.google_translator.translate(text)
return translated_text, False
except Exception as e:
logging.warning(f"Online translation failed: {e}. Falling back to offline translation.")
if self.offline_model and self.offline_tokenizer:
return self._translate_offline(text), True
else:
return f"[Lỗi mạng - Không dịch được] {text}", False
def _translate_offline(self, text: str) -> str:
if not self.offline_model or not self.offline_tokenizer:
return f"[Chưa load model offline] {text}"
inputs = self.offline_tokenizer(text, return_tensors="pt")
# Move tensors to same device as the model (handles CPU/GPU HF Spaces)
if hasattr(self.offline_model, "device") and hasattr(inputs, "to"):
inputs = inputs.to(self.offline_model.device)
generated_ids = self.offline_model.generate(**inputs)
translated_text = self.offline_tokenizer.decode(generated_ids[0], skip_special_tokens=True)
return translated_text