import os import urllib.request import fasttext from app.config import config fasttext.FastText.eprint = lambda x: None class LanguageDetector: def __init__(self): if not os.path.exists(FASTTEXT_MODEL_PATH): print("Downloading fastText language ID model") urllib.request.urlretrieve(FASTTEXT_MODEL_URL, FASTTEXT_MODEL_PATH) self.model = fasttext.load_model(FASTTEXT_MODEL_PATH) def detect(self, text: str): clean_text = text.replace("\n", " ").strip() if not clean_text: return DEFAULT_LANGUAGE, 0.0 labels, confidences = self.model.predict(clean_text, k=1) lang_code = labels[0].replace("__label__", "") confidence = float(confidences[0]) if lang_code in VOICE_IDS and confidence >= CONFIDENCE_THRESHOLD: return lang_code, confidence return DEFAULT_LANGUAGE, confidence detector = LanguageDetector() def detect_language(text: str): """Returns (lang_code, confidence)""" return detector.detect(text)