# Artifact Plan: Task 5 - API (Endpoint Integration)

## 1. Judul
Integrasi Produksi: Pembangunan Endpoint FastAPI dan Streaming Response Chatbot

## 2. Tanggal
Rabu, 6 Mei 2026

## 3. Deskripsi
Tahap akhir pengembangan backend Chatbot. Mengambil sistem yang sudah tervalidasi via CLI (Task 4) dan membungkusnya ke dalam *endpoint* HTTP/REST via FastAPI. Modul ini bertanggung jawab melayani antarmuka Frontend (seperti Next.js), mengelola manajemen koneksi ke Neo4j (*Lifespan*), serta memastikan *user experience* terbaik melalui *Server-Sent Events* (SSE) atau *Streaming Response*.

## 4. Metodologi
*   **Dependency Injection:** Menggunakan `Depends` FastAPI untuk memastikan *lifecycle* database (Neo4j driver) dikelola dengan aman per-request, meminimalisir koneksi bocor.
*   **Streaming I/O:** Memanfaatkan generator asinkron Python (`yield`) dan `StreamingResponse` dari FastAPI untuk mengirim potongan kata-per-kata dari LLM langsung ke *client*.
*   **Robust Error Handling:** Mengonversi *exception* dari siklus PRAL menjadi respons HTTP yang bermakna (misal HTTP 422 untuk *missing hash*, HTTP 500 untuk kegagalan LLM).

## 5. Keputusan
*   Akan dibuat *route* baru spesifik untuk chat (tidak menimpa *endpoint* lama di `main.py`), idealnya di `app/api/routes/chat.py`.
*   Tipe pengiriman adalah *StreamingResponse* murni.

## 6. Alur Diagram
```mermaid
sequenceDiagram
    participant Client
    participant API as FastAPI Router
    participant O as PRAL Orchestrator
    
    Client->>API: POST /api/chat (Query, Session, Hash)
    API->>O: Mulai Proses PRAL
    O-->>API: Async Generator (Yielding text)
    loop Streaming
        API-->>Client: Potongan teks
    end
    API-->>Client: Selesai
```

## 7. Struktur Folder (Tree)
```text
app/
├── api/
│   ├── dependencies.py      # (Jika diperlukan untuk injeksi DB)
│   └── routes/
│       ├── __init__.py
│       └── chat.py
└── main.py                  # (Integrasi router baru)
```

## 8. Asumsi
*   FastAPI sudah terpasang.
*   Client (Frontend) mendukung pembacaan *streaming response*.

## 9. Konsep Tabel Metriks
*   Penggunaan FastAPI middleware/logger untuk memantau durasi eksekusi *endpoint*.

## 10. Konsep Logika Prompting
(Terkelola di dalam Task 1).

## 11. Langkah Implementasi
1.  Buat skema Pydantic (`ChatRequest`) di `app/api/routes/chat.py`.
2.  Implementasikan *endpoint* `POST /api/chat` yang memanggil `process_chat` dari Orchestrator dan mengembalikan `StreamingResponse`.
3.  Daftarkan (include) *router* `chat.py` ke dalam aplikasi utama `app/main.py`.

## 12. Tabel Eksekusi Task

| Check | Fase | Task | Detail Task | Deskripsi | Acceptance Criteria |
| :---: | :---: | :--- | :--- | :--- | :--- |
| [ ] | 5A | **API** | Create Endpoint | Buat `app/api/routes/chat.py`. | Endpoint `POST /api/chat` tersedia dan memvalidasi input Pydantic. |
| [ ] | 5B | **API** | Implement Streaming | Gunakan `StreamingResponse`. | Endpoint mengembalikan tipe data *stream* dari generator asinkron Orchestrator. |
| [ ] | 5C | **API** | Router Integration | Daftarkan di aplikasi utama. | Pengujian menggunakan Swagger UI (`/docs`) atau cURL berhasil memicu fungsi chat. |
