unsafe_bullying

parent 7f3a7de0
...@@ -48,58 +48,111 @@ GENERAL_CHAT_CONTEXTS: Dict[StudentNationality, str] = { ...@@ -48,58 +48,111 @@ GENERAL_CHAT_CONTEXTS: Dict[StudentNationality, str] = {
UNSAFE_CONTEXTS: Dict[StudentNationality, Dict[str, str]] = { UNSAFE_CONTEXTS: Dict[StudentNationality, Dict[str, str]] = {
StudentNationality.EGYPTIAN: { StudentNationality.EGYPTIAN: {
"unsafe_religion": """ "unsafe_religion": """
الموضوع ده مش مناسب نتكلم فيه هنا. أي حاجة دينيّة الأحسن تسأل فيها بابا أو ماما أو حد كبير بتثق فيه. لو الطفل سأل عن الدين أو المواضيع الدينية:
تعالى نرجع للدرس—تحب نكمل في الموضوع اللي بنتعلمه سوا؟ - ممنوع تجاوب بمعلومة دينية.
- رد بطريقة ودودة: قوله إن المواضيع دي يسأل فيها بابا أو ماما أو شخص كبير يثق فيه.
- بعد كده حاول ترجع المحادثة لموضوع علمي مفيد.
""", """,
"unsafe_personal": """ "unsafe_personal": """
مينفعش تقول أسرارك أو تفاصيلك الشخصية هنا، دي حاجات تحتفظ بيها لنفسك أو تقولها لحد كبير زي بابا أو ماما. لو الطفل حاول يشارك أسرار أو تفاصيل شخصية (زي عنوان، رقم تليفون...):
طب إيه رأيك نكمّل في الدرس ونشوف النقطة اللي كنا شغالين عليها؟ - ممنوع تاخد منه بيانات.
- قول له إن المعلومات دي خاصة ويشاركها مع بابا أو ماما بس.
- بعد كده انقل الحديث لموضوع علمي.
""", """,
"unsafe_harmful": """ "unsafe_harmful": """
الكلام ده خطر ومش مناسب. لو حسيت بحاجة زي دي، لازم تكلم بابا أو ماما أو حد كبير تثق فيه. لو الطفل قال حاجة عن العنف، الأذى للنفس، أو المخدرات:
تحب نغيّر الموضوع ونرجع للدرس بتاعنا؟ - لازم تكون حازم وتوضح إن ده خطر وغلط.
- انصحه يتكلم مع بابا أو ماما فورًا.
- بعد التحذير، حاول تربط الموضوع بحاجة في العلوم (زي التعاون أو السلامة).
""", """,
"unsafe_sensitive_emotion": """ "unsafe_sensitive_emotion": """
أنا حاسس إنك زعلان، وده طبيعي. الأحسن تحكي لماما أو بابا أو حد كبير قريب منك. لو الطفل بيعبّر عن زعل أو حزن شديد أو فقدان:
تحب نرجع للدرس ونشغل نفسنا باللي كنا بنتعلمه؟ - طمّنه وخليه يحس إن مشاعره طبيعية.
- انصحه يتكلم مع أهله أو شخص كبير يثق فيه.
- بعد كده، حاول تلهيه بحاجة علمية بسيطة ومبهجة.
""", """,
"unsafe_sensitive_bio": """ "unsafe_sensitive_bio": """
الموضوع ده انت هتدرسه بعدين، بس دلوقتي أنسب إنك تسأل بابا وماما لو عندك فضول، وهم بس اللي ممكن يشرحوهولك ويردوا على سؤالك. لو الطفل سأل عن الحمل أو الجنس أو إزاي الأطفال بيتولدوا:
تحب نكمّل سوا في الدرس اللي فاتحينه دلوقتي؟ - ممنوع تجاوب على تفاصيل بيولوجية حساسة.
- قوله ان الموضوع ده انت هتدرسه بعدين، بس دلوقتي أنسب إنك تسأل بابا وماما لو عندك فضول، وهم بس اللي ممكن يشرحوهولك ويردوا على سؤالك.
- رجّع الحوار لجزء مبسط من العلوم عن جسم الإنسان يناسب سنه.
""",
"unsafe_bullying": """
لو الطفل بيتعرض للتنمّر:
- طمّنه وقوله إن اللي يتعرض للتنمّر مش ذنبه.
- انصحه يحكي لبابا أو ماما أو مدرس كبير.
لو الطفل هو اللي بيتنمّر أو بيتريق:
- رد بشكل قصير وحازم إن ده غلط ومش مقبول.
- وضّح إن اللي بيتنمّر محدش بيحبه ولا بيصاحبه.
- قلّه إن الناس بتحب اللي يكون محترم وجدع.
ممنوع الرغي الطويل أو الشرح العلمي.
خليك بالعامية المصريّة، جُمَل قصيرة وواضحة.
بعد كده حوّل الحوار بلطف لموضوع تعليمي أو درس.
""", """,
}, },
StudentNationality.SAUDI: { StudentNationality.SAUDI: {
"unsafe_religion": """ "unsafe_religion": """
هذا موضوع ما نقدر نتكلم فيه هنا. أي شي يخص الدين الأفضل تسأل فيه أبوك أو أمك أو شخص كبير تثق فيه. إذا الطالب سأل عن الدين أو المواضيع الدينية:
خلنا نرجع للدرس—تحب نكمل في الموضوع اللي ندرسه الحين؟ - لا تجاوب بأي معلومة دينية.
- قل له بلطف إن المواضيع هذي يسأل فيها أهله أو شخص كبير يثق فيه.
- بعدين رجّع الحديث لموضوع علمي مفيد.
""", """,
"unsafe_personal": """ "unsafe_personal": """
ما ينفع تشارك أسرارك أو معلوماتك الشخصية هنا، هذي لازم تقولها بس لأهلك أو شخص كبير تثق فيه. إذا الطالب حاول يشارك معلومات شخصية (عنوان، رقم جوال...):
وش رايك نرجع للدرس ونكمل اللي كنا نشتغل عليه؟ - لا تقبل أي بيانات منه.
- وضّح إن هذي معلومات خاصة، يقولها لأهله فقط.
- بعدين انقل الموضوع للعلوم.
""", """,
"unsafe_harmful": """ "unsafe_harmful": """
الكلام ذا خطر وما يصلح. إذا حسيت بشي زي كذا لازم تحكي مع أبوك أو أمك أو شخص كبير تثق فيه. إذا الطالب تكلم عن عنف، أذى، أو مخدرات:
خلنا نغيّر الموضوع ونرجع للدرس؟ - لازم تكون واضح إن ذا شي خطر وغلط.
- انصحه يكلم أهله فورًا.
- بعد التوضيح، حاول تربطها بعلوم عن السلامة أو التعاون.
""", """,
"unsafe_sensitive_emotion": """ "unsafe_sensitive_emotion": """
واضح إنك حزين، وهذا شعور طبيعي. الأفضل تحكي مع أهلك أو شخص كبير قريب منك. إذا الطالب عبّر عن حزن أو فقدان:
تحب نرجع للدرس ونركز فيه؟ - طمّنه وخليه يحس إن مشاعره طبيعية.
- انصحه يكلم أهله أو شخص كبير يثق فيه.
- بعدين خفف الجو بموضوع علمي ممتع.
""", """,
"unsafe_sensitive_bio": """ "unsafe_sensitive_bio": """
هذا موضوع تدرسه بعدين، لكن الآن الأفضل تسأل فيه أهلك، هم اللي يقدرون يشرحونه لك ويجاوبونك. إذا الطالب سأل عن الحمل أو الجنس أو كيف يجي الأطفال:
تحب نرجع للدرس اللي احنا فيه؟ - لا تجاوب بأي تفاصيل حساسة.
- قوله هذا موضوع تدرسه بعدين، لكن الآن الأفضل تسأل فيه أهلك، هم اللي يقدرون يشرحونه لك ويجاوبونك.
- رجّع الحديث لعلوم تناسب عمره عن جسم الإنسان.
""", """,
}
"unsafe_bullying": """
إذا الطالب يتعرض للتنمّر:
- طمّنه وقله إن اللي يتعرض للتنمّر ما هو غلطان.
- انصحه يتكلم مع أبوه أو أمه أو معلم كبير.
إذا الطالب هو اللي يتنمّر أو يتريق:
- رد بكلام قصير وحازم إن ذا غلط وما ينفع.
- وضّح إن المتنمّر محد يحبّه ولا يبي يصاحبه.
- قلّه إن الناس تحب اللي يحترم غيره ويكون طيب.
لا تدخل في شروحات طويلة أو أمثلة علمية.
خل ردك باللهجة السعوديّة، بسيط وواضح.
بعدها رجّع الكلام للدرس أو موضوع علمي مفيد.
""",
} }
}
class QueryHandler: class QueryHandler:
"""Handles different types of queries and their classification""" """Handles different types of queries and their classification"""
...@@ -155,7 +208,8 @@ class QueryHandler: ...@@ -155,7 +208,8 @@ class QueryHandler:
"unsafe_personal": ["عنوان", "ساكن", "موبايل", "رقم", "تليفون", "شارع", "عمارة", "شقة"], "unsafe_personal": ["عنوان", "ساكن", "موبايل", "رقم", "تليفون", "شارع", "عمارة", "شقة"],
"unsafe_harmful": ["مخدرات", "سجاير", "انتحار", "اضرب", "أقتل", "أذى", "دم", "خطر"], "unsafe_harmful": ["مخدرات", "سجاير", "انتحار", "اضرب", "أقتل", "أذى", "دم", "خطر"],
"unsafe_sensitive_emotion": ["زعلان", "حزين", "موت", "اتوفى", "وَفاة", "بعيط", "عايط", "اكتئاب"], "unsafe_sensitive_emotion": ["زعلان", "حزين", "موت", "اتوفى", "وَفاة", "بعيط", "عايط", "اكتئاب"],
"unsafe_sensitive_bio": ["جنس", "جنسي", "حمل", "دورة شهرية", "أمومة", "ولادة"] "unsafe_sensitive_bio": ["جنس", "جنسي", "حمل", "دورة شهرية", "أمومة", "ولادة"],
"unsafe_bullying": ["اتنمر", "بتنمر", "بتريق", "بسخر", "بشتم", "بغلط", "بضرب", "بعاير", "شكله وحش"]
} }
q_lower = query.lower() q_lower = query.lower()
...@@ -179,6 +233,8 @@ class QueryHandler: ...@@ -179,6 +233,8 @@ class QueryHandler:
- "الأطفال بييجوا للدنيا إزاي؟" - "الأطفال بييجوا للدنيا إزاي؟"
- "يعني إيه حمل؟" - "يعني إيه حمل؟"
10. "unsafe_bullying" - أي كلام عن التنمر (سواء كان ضحية أو متنمر) او تريقه على شكل حد او تشبيهه بحاجة تزعل
{conversation_context} {conversation_context}
السؤال الحالي: "{query}" السؤال الحالي: "{query}"
...@@ -205,12 +261,13 @@ class QueryHandler: ...@@ -205,12 +261,13 @@ class QueryHandler:
temperature=0, temperature=0,
max_tokens=20 max_tokens=20
) )
classification: str = response.choices[0].message.content.strip().lower() classification: str = response.choices[0].message.content.strip().lower().strip('"').strip("'")
valid_classes = { valid_classes = {
"general_chat", "overview", "navigation", "specific_content", "general_chat", "overview", "navigation", "specific_content",
"unsafe_religion", "unsafe_personal", "unsafe_harmful", "unsafe_religion", "unsafe_personal", "unsafe_harmful",
"unsafe_sensitive_emotion", "unsafe_sensitive_bio" "unsafe_sensitive_emotion", "unsafe_sensitive_bio", "unsafe_bullying"
} }
if classification in valid_classes: if classification in valid_classes:
...@@ -429,4 +486,24 @@ class QueryHandler: ...@@ -429,4 +486,24 @@ class QueryHandler:
"الموضوع ده مش مناسب هنا. الأحسن تسأل فيه بابا أو ماما.") "الموضوع ده مش مناسب هنا. الأحسن تسأل فيه بابا أو ماما.")
logger.info(f"Handled unsafe_sensitive_bio query for nationality: {nationality_enum}") logger.info(f"Handled unsafe_sensitive_bio query for nationality: {nationality_enum}")
return response_template.strip() return response_template.strip()
\ No newline at end of file
def handle_unsafe_bullying_query(self, student_info: Dict[str, Any]) -> str:
"""Handle queries about bullying (whether victim or bully)"""
nationality_str: str = student_info.get('nationality', 'egyptian')
nationality_mapping = {
'egyptian': StudentNationality.EGYPTIAN,
'saudi': StudentNationality.SAUDI
}
nationality_enum = nationality_mapping.get(nationality_str.lower().strip(), StudentNationality.EGYPTIAN)
unsafe_responses = UNSAFE_CONTEXTS.get(nationality_enum, {})
response_template = unsafe_responses.get("unsafe_bullying")
if not response_template:
# fallback
response_template = "لو في موضوع فيه تنمّر، لازم تتكلم مع بابا أو ماما أو شخص كبير تثق فيه. التنمّر غلط، ولازم نعامل غيرنا باحترام."
logger.info(f"Handled unsafe_bullying query for nationality: {nationality_enum}")
return response_template.strip()
...@@ -120,6 +120,8 @@ class ResponseGenerator: ...@@ -120,6 +120,8 @@ class ResponseGenerator:
unsafe_context = self.query_handler.handle_unsafe_personal_query(student_info) unsafe_context = self.query_handler.handle_unsafe_personal_query(student_info)
elif query_type == "unsafe_harmful": elif query_type == "unsafe_harmful":
unsafe_context = self.query_handler.handle_unsafe_harmful_query(student_info) unsafe_context = self.query_handler.handle_unsafe_harmful_query(student_info)
elif query_type == "unsafe_bullying":
unsafe_context = self.query_handler.handle_unsafe_bullying_query(student_info)
else: else:
unsafe_context = "هذا الموضوع غير مناسب للمناقشة هنا." unsafe_context = "هذا الموضوع غير مناسب للمناقشة هنا."
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment