navigation handeling

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