Spaces:
Runtime error
Runtime error
File size: 4,536 Bytes
eeb0f9c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
"""
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
|