# Execution Log: Task 2 - Development (Ragas Evaluation)

**Tanggal Eksekusi:** Rabu, 6 Mei 2026
**Fase:** Development (HTTP Runner Logic & Qwen Judge Setup)

## Aktivitas yang Dilakukan

1. **Pembuatan Skrip Evaluasi (Task 2A & 2B):**
   - Berhasil membuat file skrip `scripts/evaluate_ragas.py`.
   - Mengimplementasikan `get_chatbot_response` sebagai **HTTP Runner**. Fungsi ini menggunakan `httpx.AsyncClient` untuk melakukan HTTP POST ke `http://localhost:8000/api/chat/stream`. Fungsi ini dengan sukses mem-parsing *streaming response* (kata-demi-kata) menjadi satu string teks respons final yang utuh.
   - Mengimplementasikan `get_chatbot_contexts` yang secara lokal memanggil `GraphRetriever` dan `VectorRetriever` untuk mensimulasikan pencarian dokumen (chunks) yang digunakan oleh Chatbot, karena API streaming murni hanya mengembalikan teks akhir.
   - Mengimplementasikan **Qwen Judge Setup**. Menggunakan `ChatOpenAI` dari Langchain dengan `base_url` diubah ke `"https://dashscope-intl.aliyuncs.com/compatible-mode/v1"` dan menggunakan `DASHSCOPE_API_KEY`. Model yang diatur secara *default* adalah `qwen-plus`. Model ini lalu dibungkus menggunakan `LangchainLLMWrapper` agar kompatibel dengan mesin Ragas.

2. **Pembentukan Struktur Dataset:**
   - Menghubungkan fungsi-fungsi di atas ke dalam `build_evaluation_dataset` yang memetakan file `data/eval_dataset.json` ke format standar Ragas `EvaluationDataset` (`user_input`, `response`, `retrieved_contexts`, `reference`).

## Status Task
- [x] Task 2A: HTTP Runner Logic
- [x] Task 2B: Qwen Judge Setup

## Keputusan & Asumsi
- Model Qwen yang digunakan adalah `qwen-plus`. Anda dapat menyesuaikannya di dalam kode jika ingin menggunakan model yang lebih hemat (seperti `qwen-turbo`).
- Pengambilan *retrieved_contexts* dilakukan secara terpisah di skrip evaluasi (menggunakan kelas Retriever lokal) daripada merombak arsitektur *endpoint streaming* utama agar menjaga produksi kode FastAPI tetap bersih.
- Asumsi bahwa pengguna akan menambahkan `DASHSCOPE_API_KEY` ke dalam file `.env` sebelum menjalankan skrip di Task 4.

**Selanjutnya:** Menunggu validasi dan aba-aba untuk menuju ke **Task 3 (Integration: Ragas Pipeline & CSV Exporter)** dan menyelesaikan sisa *pipeline* pengujian.
