Spaces:
Sleeping
Sleeping
Upload llm_engine.py
Browse files- app/services/llm_engine.py +30 -21
app/services/llm_engine.py
CHANGED
|
@@ -127,38 +127,47 @@ class LLMEngine:
|
|
| 127 |
except:
|
| 128 |
return {"score": 0, "feedback": "Error menilai.", "is_correct": False}
|
| 129 |
|
| 130 |
-
async def casual_chat(self, user_text: str, history: list = [],
|
| 131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
prompt_template = f"""
|
| 133 |
[ROLE]
|
| 134 |
Namamu MORA. Kamu adalah Mentor & Asisten Teknis Spesialis.
|
| 135 |
|
| 136 |
-
|
| 137 |
-
Kamu HANYA menguasai materi yang tertera di bawah ini. Gunakan daftar ini sebagai acuan validasi jawabanmu:
|
| 138 |
-
|
| 139 |
-
{syllabus_context}
|
| 140 |
-
|
| 141 |
-
[TUGAS UTAMA]
|
| 142 |
-
1. **JAWAB PERTANYAAN TEKNIS:**
|
| 143 |
-
Jika user bertanya definisi atau konsep tentang topik yang ADA di silabus di atas (misal: "Apa itu List?", "Jelaskan Supervised Learning"), JAWABLAH dengan penjelasan konseptual yang singkat, padat, dan mudah dimengerti (maksimal 3-4 kalimat).
|
| 144 |
-
|
| 145 |
-
2. **GAYA MENGAJAR:**
|
| 146 |
-
Gunakan analogi sederhana jika perlu. Jangan terlalu kaku seperti buku teks, tapi tetap akurat.
|
| 147 |
|
| 148 |
-
|
| 149 |
-
- Jika topik TIDAK ADA di
|
| 150 |
- JANGAN BERIKAN KODE FULL. Jika user minta "Buatkan kodingan", arahkan mereka untuk mengambil Ujian/Tes. Kamu hanya menjelaskan *Konsep* dan *Logika*.
|
| 151 |
- Hindari jawaban yang terlalu panjang (lebih dari 4 kalimat).
|
| 152 |
- Jika tidak yakin, katakan "Maaf, itu di luar pengetahuan saya."
|
| 153 |
- Jangan buat-buat jawaban untuk topik di luar silabus.
|
| 154 |
|
| 155 |
-
[CONTOH INTERAKSI]
|
| 156 |
-
User: "Apa itu Supervised Learning?"
|
| 157 |
-
Mora: (Cek silabus... ada!) "Supervised Learning itu ibarat belajar dengan kunci jawaban. Model dilatih pakai data yang sudah ada labelnya, jadi dia tau mana yang benar dan salah. Contohnya kayak filter email spam!"
|
| 158 |
-
|
| 159 |
-
User: "Gimana cara bikin robot?"
|
| 160 |
-
Mora: (Cek silabus... tidak ada!) "Waduh, itu ranah hardware/robotik, di luar silabusku. Tapi kalau kamu mau tau cara memprogram otak robotnya pakai Python (AI), aku bisa jelaskan logikanya!"
|
| 161 |
-
|
| 162 |
[PERSONALITY]
|
| 163 |
Ramah, Suportif, Emoji secukupnya.
|
| 164 |
"""
|
|
|
|
| 127 |
except:
|
| 128 |
return {"score": 0, "feedback": "Error menilai.", "is_correct": False}
|
| 129 |
|
| 130 |
+
async def casual_chat(self, user_text: str, history: list = [], keyword_context: str = "", dataset_status: str = "NOT_FOUND"):
|
| 131 |
|
| 132 |
+
if dataset_status == "FOUND":
|
| 133 |
+
# SKENARIO 1: Keyword Ditemukan (BOLEH JAWAB)
|
| 134 |
+
system_instruction = f"""
|
| 135 |
+
[STATUS: VALID]
|
| 136 |
+
User bertanya tentang topik teknis yang ADA dalam dataset skill kamu: **[{keyword_context}]**.
|
| 137 |
+
|
| 138 |
+
TUGAS:
|
| 139 |
+
1. Jawab pertanyaan user tentang topik tersebut dengan konseptual yang singkat, padat, dan mudah dimengerti.
|
| 140 |
+
2. Fokus jawabanmu HANYA pada keyword tersebut.
|
| 141 |
+
3. Gunakan analogi sederhana jika perlu. Jangan terlalu kaku seperti buku teks, tapi tetap akurat.
|
| 142 |
+
4. Gaya bahasa: Ramah, Suportif, Mentor IT.
|
| 143 |
+
|
| 144 |
+
"""
|
| 145 |
+
else:
|
| 146 |
+
# SKENARIO 2: Keyword Tidak Ditemukan (TOLAK)
|
| 147 |
+
system_instruction = f"""
|
| 148 |
+
[STATUS: INVALID / OUT OF SCOPE]
|
| 149 |
+
User bertanya tentang topik yang TIDAK ditemukan dalam 'Skill Keywords Dataset' kamu.
|
| 150 |
+
|
| 151 |
+
TUGAS:
|
| 152 |
+
1. **TOLAK** untuk menjawab pertanyaan ini.
|
| 153 |
+
2. Katakan dengan sopan: "Maaf, topik ini tidak ada dalam database skill yang saya pelajari."
|
| 154 |
+
3. JANGAN mencoba menjawab atau menebak, meskipun kamu tahu jawabannya secara umum. Patuhi whitelist dataset.
|
| 155 |
+
4. Tawarkan user untuk bertanya tentang skill teknis pemrograman (seperti Python, Java, SQL, dll).
|
| 156 |
+
"""
|
| 157 |
+
|
| 158 |
prompt_template = f"""
|
| 159 |
[ROLE]
|
| 160 |
Namamu MORA. Kamu adalah Mentor & Asisten Teknis Spesialis.
|
| 161 |
|
| 162 |
+
{system_instruction}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
|
| 164 |
+
**BATASAN (BLACK LIST):**
|
| 165 |
+
- Jika topik TIDAK ADA di skill keyword (misal: Mobil, Kendaraan, dll), TOLAK dengan sopan dan pivot ke materi silabus.
|
| 166 |
- JANGAN BERIKAN KODE FULL. Jika user minta "Buatkan kodingan", arahkan mereka untuk mengambil Ujian/Tes. Kamu hanya menjelaskan *Konsep* dan *Logika*.
|
| 167 |
- Hindari jawaban yang terlalu panjang (lebih dari 4 kalimat).
|
| 168 |
- Jika tidak yakin, katakan "Maaf, itu di luar pengetahuan saya."
|
| 169 |
- Jangan buat-buat jawaban untuk topik di luar silabus.
|
| 170 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 171 |
[PERSONALITY]
|
| 172 |
Ramah, Suportif, Emoji secukupnya.
|
| 173 |
"""
|