navigation handeling

parent cea5383f
......@@ -26,12 +26,12 @@ ENHANCED_SYSTEM_PROMPTS: Dict[tuple, str] = {
لو سأل أسئلة عامة زي "نت عارف انا مين؟" أو "إزيك؟" أو "شكرا"، رد بطريقة طبيعية ودودة باستخدام اسمه {student_name}.
**عن المنهج وطريقة الشرح:**
- إنت عارف المنهج المصري للصف {grade} كويس من ملف الـ JSON.
- لو الطّفل سأل بشكل عام ("إحنا هناخد إيه؟"، "وريني المنهج"، "إيه المواضيع؟")، اعرضله المنهج بشكل واضح ومنظّم.
- لو سأل عن حاجة مُعيّنة، استخدم السياق من المنهج واربطها بالوحدات والأفكار اللي ليها علاقة.
- دايمًا قول مكان الدرس فين: "ده في الوحدة الأولى، المفهوم التاني".
- وضّح الروابط: "ده ليه علاقة باللي اتعلمناه عن..." أو "ده هيوصلنا للي هنتعلمه بعد كده عن...".
**للمنهج والتوجه التعليمي:**
- عندك وعي كامل بالمنهج المصري للصف {grade} من ملف JSON
- لو السؤال عن نظرة عامة على المنهج ("ماذا ندرس؟"، "أظهر المنهج"، "ما المواضيع؟")، اعرض هيكل المنهج بوضوح
- لو السؤال عن محتوى معيّن، استخدم السياق من المنهج وارבط بالوحدات والمفاهيم ذات الصلة
- اذكر دائماً موقع الموضوع في المنهج: "هذا من الوحدة الأولى، المفهوم الثاني"
- وضِّح الروابط: "هذا يرتبط بما تعلمناه عن..." أو "هذا يؤدي إلى ما سنتعلمه عن..."
ملاحظة مُلزمة: كلمة "منصّة" لازم تكتبها دايماً كده بالضبط: **مَنَصّة** (بالفتحة على الميم والنون)،
عشان الـTTS ينطقها صح.
......@@ -65,12 +65,12 @@ ENHANCED_SYSTEM_PROMPTS: Dict[tuple, str] = {
لو سأل أسئلة عامة مثل "نت عارف انا مين؟" أو "كيفك؟" أو "شكرا"، رد بطريقة طبيعية ودودة باستخدام اسمه {student_name}.
**عن المنهج وطريقة الشرح:**
- إنت تعرف المنهج السعودي للصف {grade} مضبوط من ملف الـ JSON.
- لو الولد سأل بشكل عام ("وش بندرس؟"، "ورني المنهج"، "إيش المواضيع؟")، عرّض له المنهج بشكل واضح ومرتب.
- لو سأل عن موضوع محدد، استخدم السياق من المنهج واربطه بالوحدات والأفكار اللي لها علاقة.
- دايمًا قول وين مكان الدرس: "هذا في الوحدة الأولى، المفهوم الثاني".
- وضّح الترابط: "هذا مرتبط باللي تعلمناه عن..." أو "هذا يودينا للي راح نتعلمه بعدين عن...".
**للمنهج والتوجه التعليمي:**
- عندك وعي كامل بالمنهج السعودي للصف {grade} من ملف JSON
- لو السؤال عن نظرة عامة على المنهج ("ماذا ندرس؟"، "أظهر المنهج"، "ما المواضيع؟")، اعرض هيكل المنهج بوضوح
- لو السؤال عن محتوى معيّن، استخدم السياق من المنهج وارבط بالوحدات والمفاهيم ذات الصلة
- اذكر دائماً موقع الموضوع في المنهج: "هذا من الوحدة الأولى، المفهوم الثاني"
- وضِّح الروابط: "هذا يرتبط بما تعلمناه عن..." أو "هذا يؤدي إلى ما سنتعلمه عن..."
ملاحظة مُلزمة: كلمة "منصّة" لازم تكتبها دايماً كده بالضبط: **مَنَصّة** (بالفتحة على الميم والنون)،
عشان الـTTS ينطقها صح.
......@@ -104,13 +104,10 @@ ENHANCED_SYSTEM_PROMPTS: Dict[tuple, str] = {
لو سأل أسئلة عامة (زي "إزيك؟"، "شكراً")، رد بطريقة طبيعية ودودة باستخدام اسمه {student_name}.
**عن المنهج وطريقة الشرح:**
- إنت عارف المنهج المصري للصف {grade} كويس من ملف الـ JSON.
- لو الطّفل سأل بشكل عام ("إحنا هناخد إيه؟"، "وريني المنهج"، "إيه المواضيع؟")، اعرضله المنهج بشكل واضح ومنظّم.
- لو سأل عن حاجة مُعيّنة، استخدم السياق من المنهج واربطها بالوحدات والأفكار اللي ليها علاقة.
- دايمًا قول مكان الدرس فين: "ده في الوحدة الأولى، المفهوم التاني".
- وضّح الروابط: "ده ليه علاقة باللي اتعلمناه عن..." أو "ده هيوصلنا للي هنتعلمه بعد كده عن...".
**للمنهج والتوجه التعليمي:**
- عندك وعي كامل بالمنهج الإنجليزي المصري للصف {grade} من ملف JSON
- للأسئلة العامة عن المنهج، اعرض الهيكل بوضوح
- للمحتوى المحدد، اربط بالسياق والوحدات ذات الصلة
بالنسبة لأسئلة العلوم أو المنهج:
- Always answer **in English first**.
......@@ -144,13 +141,10 @@ ENHANCED_SYSTEM_PROMPTS: Dict[tuple, str] = {
لو سأل أسئلة عامة (زي "كيفك؟"، "شكراً")، رد بطريقة طبيعية ودودة باستخدام اسمه {student_name}.
**عن المنهج وطريقة الشرح:**
- إنت تعرف المنهج السعودي للصف {grade} مضبوط من ملف الـ JSON.
- لو الولد سأل بشكل عام ("وش بندرس؟"، "ورني المنهج"، "إيش المواضيع؟")، عرّض له المنهج بشكل واضح ومرتب.
- لو سأل عن موضوع محدد، استخدم السياق من المنهج واربطه بالوحدات والأفكار اللي لها علاقة.
- دايمًا قول وين مكان الدرس: "هذا في الوحدة الأولى، المفهوم الثاني".
- وضّح الترابط: "هذا مرتبط باللي تعلمناه عن..." أو "هذا يودينا للي راح نتعلمه بعدين عن...".
**للمنهج والتوجه التعليمي:**
- عندك وعي كامل بالمنهج الإنجليزي السعودي للصف {grade} من ملف JSON
- للأسئلة العامة عن المنهج، اعرض الهيكل بوضوح
- للمحتوى المحدد، اربط بالسياق والوحدات ذات الصلة
بالنسبة لأسئلة العلوم أو المنهج:
- Always answer **in English first**.
......@@ -338,6 +332,8 @@ Be friendly and simple in your response.
"""
return context
def handle_navigation_query(self, query: str, student_info: Dict, subject: str = "Science") -> str:
"""Handle unit/concept navigation queries using JSON structure"""
if not self.pgvector:
return self.handle_overview_query(student_info, subject)
......
......@@ -381,50 +381,72 @@ class PGVectorService:
return response
def get_unit_navigation_response(self, query: str, grade: int, is_arabic: bool, subject: str = "Science") -> str:
"""Generate unit navigation response based on JSON structure"""
"""Generate unit/concept navigation response based on JSON structure"""
curriculum = self.get_curriculum_structure(grade, is_arabic, subject)
if not curriculum:
return self.get_overview_response(grade, is_arabic, subject)
# Extract unit number or name from query
# Extract unit and concept numbers from query
import re
numbers = re.findall(r'\d+', query)
numbers = re.findall(r'(\d+)', query)
unit_num = None
concept_num = None
if len(numbers) >= 1:
unit_num = int(numbers[0]) - 1 # Convert to 0-based index
if len(numbers) >= 2:
concept_num = numbers[1]
response = ""
if is_arabic:
response = f"📖 من منهج العلوم للصف {grade}:\n\n"
else:
response = f"📖 From Grade {grade} Science Curriculum:\n\n"
# If unit number is specified
if numbers and 'units' in curriculum:
unit_num = int(numbers[0]) - 1 # Convert to 0-based index
if 0 <= unit_num < len(curriculum['units']):
unit = curriculum['units'][unit_num]
unit_name = unit.get('name', f'Unit {unit_num + 1}')
if is_arabic:
response += f"**الوحدة {unit_num + 1}: {unit_name}**\n\n"
if 'concepts' in unit:
response += "المفاهيم:\n"
for concept in unit['concepts']:
concept_name = concept.get('name', '')
concept_number = concept.get('number', '')
if concept_name:
response += f"{concept_number}: {concept_name}\n"
else:
response += f"**Unit {unit_num + 1}: {unit_name}**\n\n"
if 'concepts' in unit:
response += "Concepts:\n"
for concept in unit['concepts']:
concept_name = concept.get('name', '')
concept_number = concept.get('number', '')
if concept_name:
response += f"{concept_number}: {concept_name}\n"
# If unit number is specified and exists
if unit_num is not None and 0 <= unit_num < len(curriculum.get('units', [])):
unit = curriculum['units'][unit_num]
unit_name = unit.get('name', f'Unit {unit_num + 1}')
# Try to find a specific concept
if concept_num is not None and 'concepts' in unit:
for concept in unit['concepts']:
if str(concept.get('number')) == concept_num:
concept_name = concept.get('name', '')
concept_description = concept.get('description', '')
if is_arabic:
response += f"**الوحدة {unit_num + 1}: {unit_name}**\n\n"
response += f"**المفهوم {concept_num}: {concept_name}**\n\n"
response += f"{concept_description}\n"
else:
response += f"**Unit {unit_num + 1}: {unit_name}**\n\n"
response += f"**Concept {concept_num}: {concept_name}**\n\n"
response += f"{concept_description}\n"
return response
# Fallback to a unit overview if a specific concept wasn't found or requested
if is_arabic:
response += f"**الوحدة {unit_num + 1}: {unit_name}**\n\n"
if 'concepts' in unit:
response += "المفاهيم:\n"
for concept in unit['concepts']:
concept_name = concept.get('name', '')
concept_number = concept.get('number', '')
if concept_name:
response += f"├── المفهوم {concept_number}: {concept_name}\n"
else:
response += f"**Unit {unit_num + 1}: {unit_name}**\n\n"
if 'concepts' in unit:
response += "Concepts:\n"
for concept in unit['concepts']:
concept_name = concept.get('name', '')
concept_number = concept.get('number', '')
if concept_name:
response += f"├── Concept {concept_number}: {concept_name}\n"
return response
# Fallback to overview
return response
# Final fallback to a general overview if the unit number is not valid or was not found
return self.get_overview_response(grade, is_arabic, subject)
def setup_curriculum_table(self):
......
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