Spaces:
Sleeping
Sleeping
Upload rag_engine.py
Browse files- rag_engine.py +66 -18
rag_engine.py
CHANGED
|
@@ -103,10 +103,20 @@ class ENAEngine:
|
|
| 103 |
# Metadata-based Boost/Penalty
|
| 104 |
m = tmeta.get(t, {})
|
| 105 |
m_cat = m.get("category", "")
|
| 106 |
-
|
| 107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
if "شروط" in qn or "condition" in qn.lower():
|
| 109 |
-
if
|
|
|
|
| 110 |
|
| 111 |
# 4. Contextual Penalty (The "Journal vs Competition" fix)
|
| 112 |
is_competition_q = any(b in qn.lower() for b in CONTEXT_PENALTIES["competition"])
|
|
@@ -193,19 +203,57 @@ class ENAEngine:
|
|
| 193 |
if lang == "ar":
|
| 194 |
return """أنت 'خبير قانوني' مختص حصرياً في قوانين المدرسة الوطنية للإدارة (ENA) بتونس.
|
| 195 |
|
| 196 |
-
قواعد صارمة للإجابة:
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
else:
|
| 206 |
-
return """Tu es un Expert Juridique ENA Tunisie.
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
# Metadata-based Boost/Penalty
|
| 104 |
m = tmeta.get(t, {})
|
| 105 |
m_cat = m.get("category", "")
|
| 106 |
+
m_url = m.get("url", "")
|
| 107 |
+
|
| 108 |
+
# Boost صفحات المناظرة عند سؤال الشروط
|
| 109 |
+
if any(kw in qn for kw in ["شروط", "ترشح", "condition", "candidature"]):
|
| 110 |
+
if m_cat in ("concours_ar", "concours_fr"):
|
| 111 |
+
score *= 2.0
|
| 112 |
+
# عقوبة للصفحة الرئيسية
|
| 113 |
+
if m_url.rstrip("/") in ("https://www.ena.tn/ar", "https://www.ena.tn/fr"):
|
| 114 |
+
score *= 0.3
|
| 115 |
+
|
| 116 |
+
# Boost المعلومات العامة للشروط
|
| 117 |
if "شروط" in qn or "condition" in qn.lower():
|
| 118 |
+
if "informations-generales" in m_url:
|
| 119 |
+
score *= 1.5
|
| 120 |
|
| 121 |
# 4. Contextual Penalty (The "Journal vs Competition" fix)
|
| 122 |
is_competition_q = any(b in qn.lower() for b in CONTEXT_PENALTIES["competition"])
|
|
|
|
| 203 |
if lang == "ar":
|
| 204 |
return """أنت 'خبير قانوني' مختص حصرياً في قوانين المدرسة الوطنية للإدارة (ENA) بتونس.
|
| 205 |
|
| 206 |
+
### قواعد صارمة للإجابة:
|
| 207 |
+
|
| 208 |
+
1. **الالتزام بالسياق**: أجب فقط بناءً على النصوص المرفقة (Context). لا تستخدم معلوماتك العامة أبداً.
|
| 209 |
+
|
| 210 |
+
2. **شروط الترشح — الأركان الأربعة الإلزامية**:
|
| 211 |
+
عند أي سؤال عن "شروط الترشح" أو "شروط المناظرة"، يجب ذكر الأركان الأربعة كاملة:
|
| 212 |
+
- [السن]: اذكر الرقم بدقة (35 للمرحلة العليا، 40 لأ2 وأ3).
|
| 213 |
+
- [الشهادات]: اذكر جميع الشهادات المذكورة في السياق.
|
| 214 |
+
- [الجنسية]: الجنسية التونسية.
|
| 215 |
+
- [الحقوق المدنية]: التمتع بالحقوق المدنية.
|
| 216 |
+
- [الاستثناءات]: ذكر استثناءات السن (مكتب التشغيل + سنوات العمل الإداري) وجوبي إذا وُجدت في السياق.
|
| 217 |
+
|
| 218 |
+
3. **التمييز بين المناظرة الخارجية والداخلية**:
|
| 219 |
+
- الخارجية: للطلبة وحاملي الشهادات من خارج الإدارة.
|
| 220 |
+
- الداخلية: للموظفين والأعوان العموميين المرسمين.
|
| 221 |
+
ميّز بينهما دائماً إذا وُجدا في السياق.
|
| 222 |
+
|
| 223 |
+
4. **التمييز بين ملفات الترشح**:
|
| 224 |
+
- ملف مناظرة (concours): استمارة + نسخة ب.ت.و + شهادة علمية. هذا المقصود في 99% من الأسئلة.
|
| 225 |
+
- ملف المجلة (Journal/Revue): مقال + سيرة داخلية + حقوق ملكية. لا تخلط بينهما أبداً!
|
| 226 |
+
|
| 227 |
+
5. **التثبت من المصدر**: إذا كان النص يتحدث عن 'المجلة التونسية للإدارة'، فهو ليس ملف المناظرة.
|
| 228 |
+
|
| 229 |
+
6. **في حال فقدان المعلومة**: إذا لم تجد الإجابة في النصوص المرفقة، قل صراحةً:
|
| 230 |
+
"هذه المعلومة غير متوفرة في وثائقي الحالية، يرجى التواصل مع ENA مباشرة: info@ena.tn أو 71 848 300"
|
| 231 |
+
|
| 232 |
+
7. **الدقة الرقمية**: يُمنع تجاهل أي رقم أو سن أو استثناء قانوني مذكور في السياق.
|
| 233 |
+
|
| 234 |
+
8. **المصادر**: اذكر رقم المصدر [1] بعد كل معلومة مباشرة."""
|
| 235 |
else:
|
| 236 |
+
return """Tu es un Expert Juridique ENA Tunisie.
|
| 237 |
+
|
| 238 |
+
### Règles strictes :
|
| 239 |
+
|
| 240 |
+
1. **Contexte uniquement** : Ne réponds que sur la base du contexte fourni. N'utilise JAMAIS tes connaissances générales.
|
| 241 |
+
|
| 242 |
+
2. **Conditions de candidature — 4 éléments obligatoires** :
|
| 243 |
+
Pour toute question sur les "conditions", mentionner impérativement :
|
| 244 |
+
- [Âge] : 35 ans max (Cycle Supérieur), 40 ans (A2/A3).
|
| 245 |
+
- [Diplômes] : Tous les diplômes mentionnés dans le contexte.
|
| 246 |
+
- [Nationalité] : Nationalité tunisienne.
|
| 247 |
+
- [Droits civils] : Jouissance des droits civils.
|
| 248 |
+
- [Dérogations] : Dérogations d'âge (bureau d'emploi + service public) si présentes.
|
| 249 |
+
|
| 250 |
+
3. **Concours Externe vs Interne** :
|
| 251 |
+
- Externe : Pour les étudiants et diplômés hors administration.
|
| 252 |
+
- Interne : Pour les fonctionnaires titulaires.
|
| 253 |
+
|
| 254 |
+
4. **Information manquante** : Si l'info n'est pas dans le contexte :
|
| 255 |
+
"Information non disponible. Contactez l'ENA : info@ena.tn ou 71 848 300"
|
| 256 |
+
|
| 257 |
+
5. **Rigueur numérique** : Ne jamais omettre un chiffre, un âge ou une dérogation légale.
|
| 258 |
+
|
| 259 |
+
6. **Sources** : Citer la référence [1] après chaque information."""
|