# Artifact Plan: Task 3 - Agentic (PRAL Orchestrator & Context Reranker)

## 1. Judul
Pembangunan Otak AI: PRAL Orchestrator & Context Reranker

## 2. Tanggal
Rabu, 6 Mei 2026

## 3. Deskripsi
Fase ketiga adalah inti dari kecerdasan Chatbot. Menggabungkan fondasi (Task 1) dan *retrieval* (Task 2) menjadi satu siklus otomatis. Modul ini bertugas memutuskan strategi pengambilan data, memfilter *noise* dari hasil pencarian (Reranking), dan mengeksekusi generasi *response* melalui LLM utama.

## 4. Metodologi
*   **Adaptive Routing:** Menggunakan LLM ringan untuk klasifikasi *intent* pengguna (P - Perceive) guna menentukan Lapisan Konteks (1, 2, atau 3).
*   **Cross-Scoring (Reranking):** Menghindari *token overflow* di LLM utama dengan mem-filter *chunks* kasar dari Supabase. Modul ini akan memberikan skor relevansi (0-10) untuk setiap *chunk* terhadap pertanyaan *user*.
*   **Unified Action:** Merakit *Research Policy*, *Chat History*, *Filtered Chunks*, dan *Graph Reasoning* menjadi satu *Prompt Payload* final.

## 5. Keputusan
*   **Reranker:** Akan menggunakan *prompting* sederhana ke LLM mini (misal `gemini-1.5-flash-8b` atau model hemat biaya) untuk melakukan *scoring* teks, guna menghindari *setup library cross-encoder* yang berat.
*   **LLM Utama:** Google Gemini-2.5-Flash (atau setara) melalui `google-genai` SDK.

## 6. Alur Diagram
```mermaid
flowchart TD
    Input["User Query + History"] --> Perceive["Perceive()\nAnalyze Intent"]
    Perceive --> Reason{"Reason()\nSelect Layer"}
    Reason --> Retrieve["Fetch Data (Task 2)"]
    Retrieve --> Rerank["Reranker()\nScore Chunks (0-10)"]
    Rerank --> Filter["Keep Top 5 Chunks"]
    Filter --> Act["Act()\nBuild Final Prompt + Policy"]
    Act --> LLM["Generate Stream Response"]
```

## 7. Struktur Folder (Tree)
```text
app/
└── services/
    └── chatbot/
        ├── reranker.py
        └── agent_orchestrator.py
```

## 8. Asumsi
*   Modul Task 1 dan Task 2 sudah stabil.
*   Tersedia kapabilitas untuk *async generator* guna mendukung *streaming*.

## 9. Konsep Tabel Metriks
Di dalam `agent_orchestrator.py`, fase L (Learn) akan mengkompilasi waktu eksekusi Perceive, Reason, dan Act, untuk dikirim ke sistem observasi.

## 10. Konsep Logika Prompting
*   **Reranker Prompt:** *"Berikan skor 0 hingga 10 mengenai seberapa relevan teks berikut untuk menjawab pertanyaan: [QUERY]. Kembalikan hanya angka."*

## 11. Langkah Implementasi
1.  Buat `reranker.py` dengan fungsi `score_chunks(query, chunks_list)`.
2.  Buat `agent_orchestrator.py` yang membungkus semua tahapan (P-R-A-L) dalam satu fungsi utama `async def process_chat(query, active_hash, session_id)`.

## 12. Tabel Eksekusi Task

| Check | Fase | Task | Detail Task | Deskripsi | Acceptance Criteria |
| :---: | :---: | :--- | :--- | :--- | :--- |
| [ ] | 3A | **Agentic** | Context Reranker | Buat `reranker.py`. | Fungsi mampu menerima daftar teks, menskornya, dan mengembalikan *top-K chunks*. |
| [ ] | 3B | **Agentic** | Perceive & Reason | Logika Router di `orchestrator`. | Skrip dapat mendeteksi pertanyaan komparatif dan memilih Layer 2 (Graf). |
| [ ] | 3C | **Agentic** | PRAL Orchestrator | Fungsi `process_chat` utama. | Seluruh siklus terintegrasi dari input hingga output jawaban akhir (belum di-API-kan). |
