import re import unicodedata SI_GREET = ["ආයුබෝවන්", "හෙලෝ", "හලෝ", "හායි", "සුභ උදෑසනක්", "සුභ සන්ධ්‍යාවක්"] TA_GREET = ["வணக்கம்", "ஹலோ", "ஹாய்", "காலை வணக்கம்", "மாலை வணக்கம்"] SI_THANKS = ["ස්තුතියි", "බොහොම ස්තුතියි", "තෑන්ක්ස්"] TA_THANKS = ["நன்றி", "மிக்க நன்றி", "தாங்க்ஸ்"] SI_HOW_ARE_YOU = [ "කොහොමද", "ඔබ කොහොමද", "ඔයා හොඳින්ද", "ඔබ හොඳින්ද", ] TA_HOW_ARE_YOU = [ "நீங்கள் எப்படி இருக்கிறீர்கள்", "நீ எப்படி இருக்கிறாய்", "நலமா", "சௌக்கியமா", ] SI_WHO_ARE_YOU = [ "ඔයා කවුද", "ඔබ කවුද", ] TA_WHO_ARE_YOU = [ "நீங்கள் யார்", "நீ யார்", ] SI_WHAT_CAN_YOU_DO = [ "ඔයාට මොනවා කරන්න පුළුවන්", "ඔබට මොනවා කරන්න පුළුවන්", "ඔයා මොකක්ද කරන්නෙ", "ඔබට මොකක්ද කරන්න පුළුවන්", ] TA_WHAT_CAN_YOU_DO = [ "நீங்கள் என்ன செய்ய முடியும்", "நீ என்ன செய்ய முடியும்", "உங்களுக்கு என்ன செய்ய முடியும்", ] EN_GREET = {"hi", "hello"} EN_THANKS = {"thanks", "thank you"} EN_HOW_ARE_YOU = {"how are you"} def _norm(text: str) -> str: text = unicodedata.normalize("NFC", str(text)) text = re.sub(r"\s+", " ", text).strip() text = text.strip(" ,.!?;:-") return text def _is_only_smalltalk(t: str, phrases: list[str]) -> bool: for p in phrases: p_norm = _norm(p) if t == p_norm: return True if t.startswith(p_norm): rest = t[len(p_norm):].strip(" ,.!?;:-") if not rest: return True return False def _matches_any_normalized(t: str, phrases: list[str]) -> bool: normalized_phrases = {_norm(p) for p in phrases} return t in normalized_phrases def detect_smalltalk(text: str, lang: str): t = _norm(text) tl = t.lower() if lang == "si": if _is_only_smalltalk(t, SI_GREET): return "greet" if _is_only_smalltalk(t, SI_THANKS): return "thanks" if _matches_any_normalized(t, SI_HOW_ARE_YOU): return "how_are_you" if _matches_any_normalized(t, SI_WHO_ARE_YOU): return "who_are_you" if _matches_any_normalized(t, SI_WHAT_CAN_YOU_DO): return "what_can_you_do" if lang == "ta": if _is_only_smalltalk(t, TA_GREET): return "greet" if _is_only_smalltalk(t, TA_THANKS): return "thanks" if _matches_any_normalized(t, TA_HOW_ARE_YOU): return "how_are_you" if _matches_any_normalized(t, TA_WHO_ARE_YOU): return "who_are_you" if _matches_any_normalized(t, TA_WHAT_CAN_YOU_DO): return "what_can_you_do" if tl in EN_GREET: return "greet" if tl in EN_THANKS: return "thanks" if tl in EN_HOW_ARE_YOU: return "how_are_you" return None def smalltalk_reply(kind: str, lang: str): if lang == "si": if kind == "greet": return "ආයුබෝවන්! ඔබට පොල් වගාව ගැන මොනවාද අහන්න තියෙන්නේ?" if kind == "thanks": return "ස්තුතියි! තවත් ප්‍රශ්නයක් තිබ්බොත් අහන්න." if kind == "how_are_you": return "මම හොඳින්. ඔබට පොල් වගාව සම්බන්ධ ප්‍රශ්නයක් ඇත්නම් අහන්න." if kind == "who_are_you": return "මම පොල් වගාව සම්බන්ධ උපදෙස් ලබාදෙන සහායක පද්ධතියක්." if kind == "what_can_you_do": return "මට පොල් වගාව, රෝග, පළිබෝධ, පොහොර සහ වගා කළමනාකරණය සම්බන්ධ උපදෙස් ලබාදිය හැක." return "කරුණාකර පොල් වගාවට අදාළ ප්‍රශ්නයක් අහන්න." if lang == "ta": if kind == "greet": return "வணக்கம்! தேங்காய் சாகுபடி பற்றி என்ன கேட்க விரும்புகிறீர்கள்?" if kind == "thanks": return "நன்றி! இன்னும் கேள்விகள் இருந்தால் கேளுங்கள்." if kind == "how_are_you": return "நான் நலமாக இருக்கிறேன். தென்னைச் சாகுபடி தொடர்பான கேள்வி இருந்தால் கேளுங்கள்." if kind == "who_are_you": return "நான் தென்னைச் சாகுபடி தொடர்பான ஆலோசனைகளை வழங்கும் உதவி அமைப்பு." if kind == "what_can_you_do": return "நான் தென்னைச் சாகுபடி, நோய்கள், பூச்சிகள், உரம் மற்றும் மேலாண்மை தொடர்பான ஆலோசனைகளை வழங்க முடியும்." return "தயவுசெய்து தென்னைச் சாகுபடி தொடர்பான கேள்வியை கேளுங்கள்." return ""