Spaces:
Runtime error
Runtime error
| """ | |
| Multilingual Handler | |
| Handles language detection and response translation | |
| """ | |
| from typing import Optional, Dict, Any | |
| from .language_detector import Language, LanguageDetector | |
| from .translations import Translations, t | |
| class MultilingualHandler: | |
| """Handle multilingual conversations""" | |
| def __init__(self): | |
| self.detector = LanguageDetector() | |
| self.user_languages = {} # user_id -> preferred language | |
| def detect_and_set_language(self, user_id: str, message: str) -> Language: | |
| """ | |
| Detect language from message and set user preference | |
| Args: | |
| user_id: User identifier | |
| message: User's message | |
| Returns: | |
| Detected language | |
| """ | |
| language = self.detector.detect(message) | |
| self.user_languages[user_id] = language | |
| return language | |
| def get_user_language(self, user_id: str) -> Language: | |
| """ | |
| Get user's preferred language | |
| Args: | |
| user_id: User identifier | |
| Returns: | |
| User's language (default: Vietnamese) | |
| """ | |
| return self.user_languages.get(user_id, Language.VIETNAMESE) | |
| def set_user_language(self, user_id: str, language: Language) -> None: | |
| """ | |
| Manually set user's language | |
| Args: | |
| user_id: User identifier | |
| language: Preferred language | |
| """ | |
| self.user_languages[user_id] = language | |
| def get_agent_system_prompt(self, agent_type: str, language: Language) -> str: | |
| """ | |
| Get agent system prompt in user's language | |
| Args: | |
| agent_type: Type of agent | |
| language: Target language | |
| Returns: | |
| System prompt | |
| """ | |
| return Translations.get_agent_prompt(agent_type, language) | |
| def translate_message(self, key: str, language: Language, **kwargs) -> str: | |
| """ | |
| Translate a message key | |
| Args: | |
| key: Translation key | |
| language: Target language | |
| **kwargs: Format arguments | |
| Returns: | |
| Translated message | |
| """ | |
| return t(key, language, **kwargs) | |
| def format_response_with_language( | |
| self, | |
| response: str, | |
| language: Language, | |
| add_language_note: bool = False | |
| ) -> str: | |
| """ | |
| Format response with language-specific additions | |
| Args: | |
| response: Original response | |
| language: Target language | |
| add_language_note: Add note about language detection | |
| Returns: | |
| Formatted response | |
| """ | |
| if add_language_note: | |
| if language == Language.ENGLISH: | |
| note = "\n\n_Note: I detected you're using English. You can switch to Vietnamese anytime._" | |
| else: | |
| note = "\n\n_Lưu ý: Tôi phát hiện bạn đang dùng tiếng Việt. Bạn có thể chuyển sang tiếng Anh bất cứ lúc nào._" | |
| return response + note | |
| return response | |
| def get_language_stats(self) -> Dict[str, Any]: | |
| """ | |
| Get statistics about language usage | |
| Returns: | |
| Language statistics | |
| """ | |
| total_users = len(self.user_languages) | |
| if total_users == 0: | |
| return { | |
| 'total_users': 0, | |
| 'vietnamese_users': 0, | |
| 'english_users': 0, | |
| 'vietnamese_percentage': 0.0, | |
| 'english_percentage': 0.0 | |
| } | |
| vietnamese_count = sum(1 for lang in self.user_languages.values() if lang == Language.VIETNAMESE) | |
| english_count = sum(1 for lang in self.user_languages.values() if lang == Language.ENGLISH) | |
| return { | |
| 'total_users': total_users, | |
| 'vietnamese_users': vietnamese_count, | |
| 'english_users': english_count, | |
| 'vietnamese_percentage': round(vietnamese_count / total_users * 100, 1), | |
| 'english_percentage': round(english_count / total_users * 100, 1) | |
| } | |
| # Global instance | |
| _multilingual_handler = None | |
| def get_multilingual_handler() -> MultilingualHandler: | |
| """Get global multilingual handler instance""" | |
| global _multilingual_handler | |
| if _multilingual_handler is None: | |
| _multilingual_handler = MultilingualHandler() | |
| return _multilingual_handler | |