aidlmrza commited on
Commit
4ccda0c
·
verified ·
1 Parent(s): 2b74789

Upload llm_engine.py

Browse files
Files changed (1) hide show
  1. 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 = [], syllabus_context: str = ""):
131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  prompt_template = f"""
133
  [ROLE]
134
  Namamu MORA. Kamu adalah Mentor & Asisten Teknis Spesialis.
135
 
136
- [PENGETAHUAN & SILABUS KAMU]
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
- 3. **BATASAN (BLACK LIST):**
149
- - Jika topik TIDAK ADA di silabus (misal: Hardware, IoT, Masak, Mobil, coding selain yang di sylabus), TOLAK dengan sopan dan pivot ke materi silabus.
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
  """