Spaces:
Runtime error
Runtime error
| """ | |
| Translation System | |
| Provides translations for common messages and UI elements | |
| """ | |
| from typing import Dict, Any | |
| from .language_detector import Language | |
| class Translations: | |
| """Translation database for Vietnamese and English""" | |
| # Common messages | |
| MESSAGES = { | |
| # Greetings | |
| 'greeting': { | |
| Language.VIETNAMESE: 'Xin chào! Tôi là trợ lý sức khỏe của bạn. Tôi có thể giúp gì cho bạn?', | |
| Language.ENGLISH: 'Hello! I am your health assistant. How can I help you?' | |
| }, | |
| 'how_can_help': { | |
| Language.VIETNAMESE: 'Tôi có thể giúp gì cho bạn?', | |
| Language.ENGLISH: 'How can I help you?' | |
| }, | |
| # Profile questions | |
| 'ask_age': { | |
| Language.VIETNAMESE: 'Bạn bao nhiêu tuổi?', | |
| Language.ENGLISH: 'How old are you?' | |
| }, | |
| 'ask_gender': { | |
| Language.VIETNAMESE: 'Bạn là nam hay nữ?', | |
| Language.ENGLISH: 'What is your gender?' | |
| }, | |
| 'ask_weight': { | |
| Language.VIETNAMESE: 'Cân nặng của bạn là bao nhiêu? (kg)', | |
| Language.ENGLISH: 'What is your weight? (kg)' | |
| }, | |
| 'ask_height': { | |
| Language.VIETNAMESE: 'Chiều cao của bạn là bao nhiêu? (cm)', | |
| Language.ENGLISH: 'What is your height? (cm)' | |
| }, | |
| # BMI categories | |
| 'bmi_underweight': { | |
| Language.VIETNAMESE: 'Thiếu cân', | |
| Language.ENGLISH: 'Underweight' | |
| }, | |
| 'bmi_normal': { | |
| Language.VIETNAMESE: 'Bình thường', | |
| Language.ENGLISH: 'Normal' | |
| }, | |
| 'bmi_overweight': { | |
| Language.VIETNAMESE: 'Thừa cân', | |
| Language.ENGLISH: 'Overweight' | |
| }, | |
| 'bmi_obese': { | |
| Language.VIETNAMESE: 'Béo phì', | |
| Language.ENGLISH: 'Obese' | |
| }, | |
| # Feedback | |
| 'rate_response': { | |
| Language.VIETNAMESE: 'Đánh giá câu trả lời này', | |
| Language.ENGLISH: 'Rate this response' | |
| }, | |
| 'thank_you_feedback': { | |
| Language.VIETNAMESE: 'Cảm ơn phản hồi của bạn!', | |
| Language.ENGLISH: 'Thank you for your feedback!' | |
| }, | |
| # Errors | |
| 'error_occurred': { | |
| Language.VIETNAMESE: 'Xin lỗi, đã có lỗi xảy ra. Vui lòng thử lại.', | |
| Language.ENGLISH: 'Sorry, an error occurred. Please try again.' | |
| }, | |
| 'invalid_input': { | |
| Language.VIETNAMESE: 'Dữ liệu không hợp lệ. Vui lòng kiểm tra lại.', | |
| Language.ENGLISH: 'Invalid input. Please check again.' | |
| }, | |
| # Nutrition | |
| 'nutrition_advice': { | |
| Language.VIETNAMESE: 'Tư vấn dinh dưỡng', | |
| Language.ENGLISH: 'Nutrition advice' | |
| }, | |
| 'meal_plan': { | |
| Language.VIETNAMESE: 'Thực đơn', | |
| Language.ENGLISH: 'Meal plan' | |
| }, | |
| 'calories': { | |
| Language.VIETNAMESE: 'Calo', | |
| Language.ENGLISH: 'Calories' | |
| }, | |
| 'protein': { | |
| Language.VIETNAMESE: 'Protein', | |
| Language.ENGLISH: 'Protein' | |
| }, | |
| # Exercise | |
| 'exercise_plan': { | |
| Language.VIETNAMESE: 'Kế hoạch tập luyện', | |
| Language.ENGLISH: 'Exercise plan' | |
| }, | |
| 'workout': { | |
| Language.VIETNAMESE: 'Bài tập', | |
| Language.ENGLISH: 'Workout' | |
| }, | |
| 'duration': { | |
| Language.VIETNAMESE: 'Thời gian', | |
| Language.ENGLISH: 'Duration' | |
| }, | |
| # Symptoms | |
| 'symptoms': { | |
| Language.VIETNAMESE: 'Triệu chứng', | |
| Language.ENGLISH: 'Symptoms' | |
| }, | |
| 'severity': { | |
| Language.VIETNAMESE: 'Mức độ', | |
| Language.ENGLISH: 'Severity' | |
| }, | |
| 'seek_medical_attention': { | |
| Language.VIETNAMESE: 'Bạn nên đến bệnh viện ngay', | |
| Language.ENGLISH: 'You should seek medical attention immediately' | |
| }, | |
| # Mental health | |
| 'mental_health': { | |
| Language.VIETNAMESE: 'Sức khỏe tinh thần', | |
| Language.ENGLISH: 'Mental health' | |
| }, | |
| 'stress_level': { | |
| Language.VIETNAMESE: 'Mức độ căng thẳng', | |
| Language.ENGLISH: 'Stress level' | |
| }, | |
| 'mood': { | |
| Language.VIETNAMESE: 'Tâm trạng', | |
| Language.ENGLISH: 'Mood' | |
| }, | |
| # General | |
| 'yes': { | |
| Language.VIETNAMESE: 'Có', | |
| Language.ENGLISH: 'Yes' | |
| }, | |
| 'no': { | |
| Language.VIETNAMESE: 'Không', | |
| Language.ENGLISH: 'No' | |
| }, | |
| 'save': { | |
| Language.VIETNAMESE: 'Lưu', | |
| Language.ENGLISH: 'Save' | |
| }, | |
| 'cancel': { | |
| Language.VIETNAMESE: 'Hủy', | |
| Language.ENGLISH: 'Cancel' | |
| }, | |
| 'continue': { | |
| Language.VIETNAMESE: 'Tiếp tục', | |
| Language.ENGLISH: 'Continue' | |
| }, | |
| 'back': { | |
| Language.VIETNAMESE: 'Quay lại', | |
| Language.ENGLISH: 'Back' | |
| } | |
| } | |
| # Agent prompts | |
| AGENT_PROMPTS = { | |
| 'nutrition_system': { | |
| Language.VIETNAMESE: """Bạn là chuyên gia dinh dưỡng chuyên nghiệp, thân thiện và am hiểu về ẩm thực Việt Nam. | |
| Nhiệm vụ: Tư vấn dinh dưỡng, lập thực đơn, tính toán calo phù hợp với người Việt. | |
| Phong cách: Thân thiện, dễ hiểu, khoa học, thực tế.""", | |
| Language.ENGLISH: """You are a professional, friendly nutritionist with expertise in nutrition science. | |
| Task: Provide nutrition advice, meal planning, and calorie calculations. | |
| Style: Friendly, clear, scientific, practical.""" | |
| }, | |
| 'exercise_system': { | |
| Language.VIETNAMESE: """Bạn là huấn luyện viên thể hình chuyên nghiệp, nhiệt tình và có kinh nghiệm. | |
| Nhiệm vụ: Tư vấn tập luyện, lập kế hoạch tập phù hợp với mọi trình độ. | |
| Phong cách: Động viên, rõ ràng, an toàn, hiệu quả.""", | |
| Language.ENGLISH: """You are a professional, enthusiastic fitness trainer with extensive experience. | |
| Task: Provide exercise advice and create workout plans for all fitness levels. | |
| Style: Motivating, clear, safe, effective.""" | |
| }, | |
| 'symptom_system': { | |
| Language.VIETNAMESE: """Bạn là trợ lý y tế thông minh, cẩn thận và có trách nhiệm. | |
| Nhiệm vụ: Đánh giá triệu chứng, đưa ra khuyến nghị sơ bộ, hướng dẫn khi nào cần gặp bác sĩ. | |
| Phong cách: Cẩn thận, rõ ràng, không chẩn đoán, luôn khuyến khích gặp bác sĩ khi cần.""", | |
| Language.ENGLISH: """You are an intelligent, careful, and responsible medical assistant. | |
| Task: Assess symptoms, provide preliminary recommendations, guide when to see a doctor. | |
| Style: Careful, clear, non-diagnostic, always encourage seeing a doctor when needed.""" | |
| }, | |
| 'mental_health_system': { | |
| Language.VIETNAMESE: """Bạn là chuyên gia tâm lý thấu hiểu, ấm áp và hỗ trợ tích cực. | |
| Nhiệm vụ: Lắng nghe, hỗ trợ tinh thần, đưa ra lời khuyên về sức khỏe tâm lý. | |
| Phong cách: Thấu hiểu, ấm áp, không phán xét, khuyến khích tích cực.""", | |
| Language.ENGLISH: """You are an understanding, warm, and supportive mental health expert. | |
| Task: Listen, provide emotional support, offer mental health advice. | |
| Style: Understanding, warm, non-judgmental, encouraging.""" | |
| } | |
| } | |
| def get(key: str, language: Language, **kwargs) -> str: | |
| """ | |
| Get translation for a key | |
| Args: | |
| key: Translation key | |
| language: Target language | |
| **kwargs: Format arguments | |
| Returns: | |
| Translated text | |
| """ | |
| if key not in Translations.MESSAGES: | |
| return key | |
| text = Translations.MESSAGES[key].get(language, Translations.MESSAGES[key][Language.VIETNAMESE]) | |
| # Format if kwargs provided | |
| if kwargs: | |
| try: | |
| text = text.format(**kwargs) | |
| except KeyError: | |
| pass | |
| return text | |
| def get_agent_prompt(agent_type: str, language: Language) -> str: | |
| """ | |
| Get agent system prompt in specified language | |
| Args: | |
| agent_type: Type of agent (nutrition, exercise, etc.) | |
| language: Target language | |
| Returns: | |
| System prompt | |
| """ | |
| key = f"{agent_type}_system" | |
| if key not in Translations.AGENT_PROMPTS: | |
| return "" | |
| return Translations.AGENT_PROMPTS[key].get(language, Translations.AGENT_PROMPTS[key][Language.VIETNAMESE]) | |
| def t(key: str, language: Language = Language.VIETNAMESE, **kwargs) -> str: | |
| """ | |
| Convenience function for translation | |
| Args: | |
| key: Translation key | |
| language: Target language | |
| **kwargs: Format arguments | |
| Returns: | |
| Translated text | |
| """ | |
| return Translations.get(key, language, **kwargs) | |