Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
AI Tutor
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Salma Mohammed Hamed
AI Tutor
Commits
b080d889
Commit
b080d889
authored
Sep 23, 2025
by
SalmaMohammedHamedMustafa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
unsafe_bullying
parent
7f3a7de0
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
104 additions
and
25 deletions
+104
-25
query_handlers.py
..._env/voice_agent/services/agent_helpers/query_handlers.py
+102
-25
response_generator.py
.../voice_agent/services/agent_helpers/response_generator.py
+2
-0
voice_agent.tar
self_hosted_env/voice_agent/voice_agent.tar
+0
-0
No files found.
self_hosted_env/voice_agent/services/agent_helpers/query_handlers.py
View file @
b080d889
...
...
@@ -48,58 +48,111 @@ GENERAL_CHAT_CONTEXTS: Dict[StudentNationality, str] = {
UNSAFE_CONTEXTS
:
Dict
[
StudentNationality
,
Dict
[
str
,
str
]]
=
{
StudentNationality
.
EGYPTIAN
:
{
"unsafe_religion"
:
"""
الموضوع ده مش مناسب نتكلم فيه هنا. أي حاجة دينيّة الأحسن تسأل فيها بابا أو ماما أو حد كبير بتثق فيه.
تعالى نرجع للدرس—تحب نكمل في الموضوع اللي بنتعلمه سوا؟
لو الطفل سأل عن الدين أو المواضيع الدينية:
- ممنوع تجاوب بمعلومة دينية.
- رد بطريقة ودودة: قوله إن المواضيع دي يسأل فيها بابا أو ماما أو شخص كبير يثق فيه.
- بعد كده حاول ترجع المحادثة لموضوع علمي مفيد.
"""
,
"unsafe_personal"
:
"""
مينفعش تقول أسرارك أو تفاصيلك الشخصية هنا، دي حاجات تحتفظ بيها لنفسك أو تقولها لحد كبير زي بابا أو ماما.
طب إيه رأيك نكمّل في الدرس ونشوف النقطة اللي كنا شغالين عليها؟
لو الطفل حاول يشارك أسرار أو تفاصيل شخصية (زي عنوان، رقم تليفون...):
- ممنوع تاخد منه بيانات.
- قول له إن المعلومات دي خاصة ويشاركها مع بابا أو ماما بس.
- بعد كده انقل الحديث لموضوع علمي.
"""
,
"unsafe_harmful"
:
"""
الكلام ده خطر ومش مناسب. لو حسيت بحاجة زي دي، لازم تكلم بابا أو ماما أو حد كبير تثق فيه.
تحب نغيّر الموضوع ونرجع للدرس بتاعنا؟
لو الطفل قال حاجة عن العنف، الأذى للنفس، أو المخدرات:
- لازم تكون حازم وتوضح إن ده خطر وغلط.
- انصحه يتكلم مع بابا أو ماما فورًا.
- بعد التحذير، حاول تربط الموضوع بحاجة في العلوم (زي التعاون أو السلامة).
"""
,
"unsafe_sensitive_emotion"
:
"""
أنا حاسس إنك زعلان، وده طبيعي. الأحسن تحكي لماما أو بابا أو حد كبير قريب منك.
تحب نرجع للدرس ونشغل نفسنا باللي كنا بنتعلمه؟
لو الطفل بيعبّر عن زعل أو حزن شديد أو فقدان:
- طمّنه وخليه يحس إن مشاعره طبيعية.
- انصحه يتكلم مع أهله أو شخص كبير يثق فيه.
- بعد كده، حاول تلهيه بحاجة علمية بسيطة ومبهجة.
"""
,
"unsafe_sensitive_bio"
:
"""
الموضوع ده انت هتدرسه بعدين، بس دلوقتي أنسب إنك تسأل بابا وماما لو عندك فضول، وهم بس اللي ممكن يشرحوهولك ويردوا على سؤالك.
تحب نكمّل سوا في الدرس اللي فاتحينه دلوقتي؟
لو الطفل سأل عن الحمل أو الجنس أو إزاي الأطفال بيتولدوا:
- ممنوع تجاوب على تفاصيل بيولوجية حساسة.
- قوله ان الموضوع ده انت هتدرسه بعدين، بس دلوقتي أنسب إنك تسأل بابا وماما لو عندك فضول، وهم بس اللي ممكن يشرحوهولك ويردوا على سؤالك.
- رجّع الحوار لجزء مبسط من العلوم عن جسم الإنسان يناسب سنه.
"""
,
"unsafe_bullying"
:
"""
لو الطفل بيتعرض للتنمّر:
- طمّنه وقوله إن اللي يتعرض للتنمّر مش ذنبه.
- انصحه يحكي لبابا أو ماما أو مدرس كبير.
لو الطفل هو اللي بيتنمّر أو بيتريق:
- رد بشكل قصير وحازم إن ده غلط ومش مقبول.
- وضّح إن اللي بيتنمّر محدش بيحبه ولا بيصاحبه.
- قلّه إن الناس بتحب اللي يكون محترم وجدع.
ممنوع الرغي الطويل أو الشرح العلمي.
خليك بالعامية المصريّة، جُمَل قصيرة وواضحة.
بعد كده حوّل الحوار بلطف لموضوع تعليمي أو درس.
"""
,
},
StudentNationality
.
SAUDI
:
{
"unsafe_religion"
:
"""
هذا موضوع ما نقدر نتكلم فيه هنا. أي شي يخص الدين الأفضل تسأل فيه أبوك أو أمك أو شخص كبير تثق فيه.
خلنا نرجع للدرس—تحب نكمل في الموضوع اللي ندرسه الحين؟
إذا الطالب سأل عن الدين أو المواضيع الدينية:
- لا تجاوب بأي معلومة دينية.
- قل له بلطف إن المواضيع هذي يسأل فيها أهله أو شخص كبير يثق فيه.
- بعدين رجّع الحديث لموضوع علمي مفيد.
"""
,
"unsafe_personal"
:
"""
ما ينفع تشارك أسرارك أو معلوماتك الشخصية هنا، هذي لازم تقولها بس لأهلك أو شخص كبير تثق فيه.
وش رايك نرجع للدرس ونكمل اللي كنا نشتغل عليه؟
إذا الطالب حاول يشارك معلومات شخصية (عنوان، رقم جوال...):
- لا تقبل أي بيانات منه.
- وضّح إن هذي معلومات خاصة، يقولها لأهله فقط.
- بعدين انقل الموضوع للعلوم.
"""
,
"unsafe_harmful"
:
"""
الكلام ذا خطر وما يصلح. إذا حسيت بشي زي كذا لازم تحكي مع أبوك أو أمك أو شخص كبير تثق فيه.
خلنا نغيّر الموضوع ونرجع للدرس؟
إذا الطالب تكلم عن عنف، أذى، أو مخدرات:
- لازم تكون واضح إن ذا شي خطر وغلط.
- انصحه يكلم أهله فورًا.
- بعد التوضيح، حاول تربطها بعلوم عن السلامة أو التعاون.
"""
,
"unsafe_sensitive_emotion"
:
"""
واضح إنك حزين، وهذا شعور طبيعي. الأفضل تحكي مع أهلك أو شخص كبير قريب منك.
تحب نرجع للدرس ونركز فيه؟
إذا الطالب عبّر عن حزن أو فقدان:
- طمّنه وخليه يحس إن مشاعره طبيعية.
- انصحه يكلم أهله أو شخص كبير يثق فيه.
- بعدين خفف الجو بموضوع علمي ممتع.
"""
,
"unsafe_sensitive_bio"
:
"""
هذا موضوع تدرسه بعدين، لكن الآن الأفضل تسأل فيه أهلك، هم اللي يقدرون يشرحونه لك ويجاوبونك.
تحب نرجع للدرس اللي احنا فيه؟
إذا الطالب سأل عن الحمل أو الجنس أو كيف يجي الأطفال:
- لا تجاوب بأي تفاصيل حساسة.
- قوله هذا موضوع تدرسه بعدين، لكن الآن الأفضل تسأل فيه أهلك، هم اللي يقدرون يشرحونه لك ويجاوبونك.
- رجّع الحديث لعلوم تناسب عمره عن جسم الإنسان.
"""
,
}
"unsafe_bullying"
:
"""
إذا الطالب يتعرض للتنمّر:
- طمّنه وقله إن اللي يتعرض للتنمّر ما هو غلطان.
- انصحه يتكلم مع أبوه أو أمه أو معلم كبير.
إذا الطالب هو اللي يتنمّر أو يتريق:
- رد بكلام قصير وحازم إن ذا غلط وما ينفع.
- وضّح إن المتنمّر محد يحبّه ولا يبي يصاحبه.
- قلّه إن الناس تحب اللي يحترم غيره ويكون طيب.
لا تدخل في شروحات طويلة أو أمثلة علمية.
خل ردك باللهجة السعوديّة، بسيط وواضح.
بعدها رجّع الكلام للدرس أو موضوع علمي مفيد.
"""
,
}
}
class
QueryHandler
:
"""Handles different types of queries and their classification"""
...
...
@@ -155,7 +208,8 @@ class QueryHandler:
"unsafe_personal"
:
[
"عنوان"
,
"ساكن"
,
"موبايل"
,
"رقم"
,
"تليفون"
,
"شارع"
,
"عمارة"
,
"شقة"
],
"unsafe_harmful"
:
[
"مخدرات"
,
"سجاير"
,
"انتحار"
,
"اضرب"
,
"أقتل"
,
"أذى"
,
"دم"
,
"خطر"
],
"unsafe_sensitive_emotion"
:
[
"زعلان"
,
"حزين"
,
"موت"
,
"اتوفى"
,
"وَفاة"
,
"بعيط"
,
"عايط"
,
"اكتئاب"
],
"unsafe_sensitive_bio"
:
[
"جنس"
,
"جنسي"
,
"حمل"
,
"دورة شهرية"
,
"أمومة"
,
"ولادة"
]
"unsafe_sensitive_bio"
:
[
"جنس"
,
"جنسي"
,
"حمل"
,
"دورة شهرية"
,
"أمومة"
,
"ولادة"
],
"unsafe_bullying"
:
[
"اتنمر"
,
"بتنمر"
,
"بتريق"
,
"بسخر"
,
"بشتم"
,
"بغلط"
,
"بضرب"
,
"بعاير"
,
"شكله وحش"
]
}
q_lower
=
query
.
lower
()
...
...
@@ -179,6 +233,8 @@ class QueryHandler:
- "الأطفال بييجوا للدنيا إزاي؟"
- "يعني إيه حمل؟"
10. "unsafe_bullying" - أي كلام عن التنمر (سواء كان ضحية أو متنمر) او تريقه على شكل حد او تشبيهه بحاجة تزعل
{conversation_context}
السؤال الحالي: "{query}"
...
...
@@ -205,12 +261,13 @@ class QueryHandler:
temperature
=
0
,
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
=
{
"general_chat"
,
"overview"
,
"navigation"
,
"specific_content"
,
"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
:
...
...
@@ -429,4 +486,24 @@ class QueryHandler:
"الموضوع ده مش مناسب هنا. الأحسن تسأل فيه بابا أو ماما."
)
logger
.
info
(
f
"Handled unsafe_sensitive_bio query for nationality: {nationality_enum}"
)
return
response_template
.
strip
()
\ No newline at end of file
return
response_template
.
strip
()
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
()
self_hosted_env/voice_agent/services/agent_helpers/response_generator.py
View file @
b080d889
...
...
@@ -120,6 +120,8 @@ class ResponseGenerator:
unsafe_context
=
self
.
query_handler
.
handle_unsafe_personal_query
(
student_info
)
elif
query_type
==
"unsafe_harmful"
:
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
:
unsafe_context
=
"هذا الموضوع غير مناسب للمناقشة هنا."
...
...
self_hosted_env/voice_agent/voice_agent.tar
View file @
b080d889
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment