Dokumentasi Backend Sentimind (API)
Dokumen ini menjelaskan struktur folder api, fungsi dari setiap file, dan logika perhitungan yang digunakan dalam sistem Sentimind.
π Struktur Folder
api/
βββ index.py # Entry point utama aplikasi (FastAPI)
βββ predict.py # Endpoint untuk prediksi teks manual
βββ quiz.py # Endpoint untuk sistem kuis MBTI
βββ core/
β βββ chatbot.py # Logic Chatbot menggunakan Google Gemini
β βββ nlp_handler.py # Logic utama NLP (Machine Learning + Youtube)
β βββ quiz_logic.py # Perhitungan skor dan logika MBTI
βββ data/
βββ questions.json # Database soal kuis
βββ model_mbti.pkl # Model Machine Learning untuk MBTI
βββ model_emotion.pkl # Model Machine Learning untuk Emosi
π§ Logika Perhitungan Kuis (MBTI Scoring)
Perhitungan MBTI dilakukan di file api/core/quiz_logic.py. Sistem tidak menggunakan sistem "benar/salah", melainkan sistem Dimensi Bipolar.
1. Variabel Dimensi
Kita memiliki 4 variabel skor awal yang dimulai dari angka 0:
EI: Introvert vs ExtravertSN: Sensing vs IntuitionTF: Thinking vs FeelingJP: Judging vs Perceiving
2. Rumus Per Soal
Setiap soal memiliki atribut dimension (misal "EI") dan direction (1 atau -1).
User memberikan jawaban dalam skala -3 sampai 3 (Sangat Tidak Setuju s.d. Sangat Setuju).
Rumus:
Skor Dimensi += (Jawaban User * Arah Soal)
Contoh Kasus:
Soal: "Saya suka pesta."
- Dimensi:
EI - Arah (
direction):1(Positif mengarah ke Extravert)
- Dimensi:
Jawaban User:
3(Sangat Setuju)Hitungan:
3 * 1 = 3. Skor EI bertambah +3 (Makin E).Soal: "Saya butuh waktu sendiri."
- Dimensi:
EI - Arah (
direction):-1(Positif mengarah ke Introvert)
- Dimensi:
Jawaban User:
3(Sangat Setuju)Hitungan:
3 * -1 = -3. Skor EI berkurang -3 (Makin I).
3. Penentuan Hasil Akhir
Setelah menghitung total skor dari 40 soal, hasil ditentukan berdasarkan tanda positif/negatif:
| Dimensi | Skor Positif (>= 0) | Skor Negatif (< 0) |
|---|---|---|
| EI | E (Extravert) | I (Introvert) |
| SN | S (Sensing) | N (Intuition) |
| TF | T (Thinking) | F (Feeling) |
| JP | J (Judging) | P (Perceiving) |
π Penjelasan File & Fungsi (Detail)
1. api/index.py
File utama untuk menjalankan server backend.
app = FastAPI(): Inisialisasi aplikasi.startup_event(): Mengecek keberadaanYOUTUBE_API_KEYsaat server nyala. Menentukan mode Official atau Scraping.app.add_middleware(CORSMiddleware): Mengizinkan frontend (berbeda port) untuk mengakses API ini.- Routes: Mendaftarkan URL endpoint dari file lain (
/api/predict,/api/quiz, dll). analyze_youtube_video(video_id): Endpoint khusus untuk analisis YouTube. MemanggilNLPHandleruntuk mengambil transkrip/komentar dan melakukan prediksi.
2. api/predict.py
Handler untuk fitur "Analyzer" (Input Teks Manual).
predict_endpoint(input_data): Menerima JSON{ "text": "..." }, memvalidasi input, lalu memanggilNLPHandler.predict_alluntuk mendapatkan hasil MBTI dan Emosi.
3. api/quiz.py
Handler untuk fitur "Quiz".
get_quiz_questions(): Mengambil daftar soal dariQuizHandler.submit_quiz(submission): Menerima jawaban user dan mengembalikan hasil MBTI.
4. api/core/chatbot.py
Otak dari fitur Chatbot.
__init__: Menghubungkan ke Google Gemini API. Menggunakan modelgemini-2.0-flashatau fallback kelite.generate_response(user_query, lang):- Membuat
system_promptyang mendefinisikan persona AI "Sentimind". - Menyesuaikan gaya bahasa (Slang Jakarta untuk ID, Formal untuk EN).
- Mengirim prompt ke Gemini dan mengembalikan teks balasan.
- Membuat
5. api/core/nlp_handler.py (Core Logic)
File paling kompleks yang menangani Machine Learning dan pemrosesan data.
Fungsi Utama:
load_models(): Memuat file.pkl(model ML yang sudah dilatih) ke memory agar prediksi cepat._validate_with_gemini(text, ml_prediction):- Teknik Hybrid AI: Menggunakan LLM (Gemini) untuk "mengoreksi" hasil Machine Learning klasik.
- Jika teks cukup panjang (>50 kata), Gemini akan menganalisis ulang teks dan memberikan "second opinion".
- Mengembalikan confidence score dan alasan logis.
predict_all(raw_text):- Translate teks ke Inggris (karena model dilatih pakai B.Inggris).
- Prediksi MBTI pakai Model ML.
- Validasi MBTI pakai Gemini (jika memungkinkan).
- Prediksi Emosi pakai Model ML + Normalisasi probabilitas.
- Ekstrak Keyword utama.
- Generate penjelasan/reasoning untuk ditampilkan di UI.
fetch_youtube_transcript(video_id):- Mencoba pakai Official YouTube API dulu (ambil judul, deskripsi, komentar).
- Jika gagal/tak ada key, fallback ke Scraping (ambil subtitle otomatis).
6. api/core/quiz_logic.py
Logic pemrosesan kuis.
get_questions(): Membaca fileapi/data/questions.json.calculate_mbti(answers): Mengimplementasikan rumus scoring MBTI (lihat bagian Logika Perhitungan Kuis di atas).
π Flow Data (E2E)
- Frontend kirim data (Teks/Jawaban Kuis/Video ID) ke Backend.
- Backend (
index.py/quiz.py/predict.py) terima request. - Core Logic (
NLPHandler/QuizHandler) memproses data:- Load Model ML.
- Hitung Matematika / Prediksi Statistik.
- Panggil External API (Gemini/YouTube) jika perlu.
- Backend membalas dengan JSON standar:
{ "success": true, "mbti": "INTJ", "emotion": { "id": "Senang", "en": "Joy" }, "reasoning": { ... } } - Frontend menampilkan animasi dan hasil ke user.