CoolFace
Apppublic

AsrofiSyaikho/Ai-Contextual-Model-Backend

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes
App README

My AI Backend

Project backend untuk kompetisi.

JawaChat Fase 2 — Backend RAG + FastAPI

Fase ini mengubah chatbot CLI menjadi REST API dengan RAG pipeline, siap untuk diintegrasikan ke PWA di Fase 3.


Struktur File

jawachat-fase2/
├── backend/
│   ├── __init__.py
│   ├── main.py           ← FastAPI app + semua endpoint
│   ├── config.py         ← Settings dari .env
│   ├── models.py         ← Pydantic schema request/response
│   ├── rag_pipeline.py   ← Core RAG: embed → retrieve → generate
│   ├── prompts.py        ← System prompt per topik
│   └── logger.py         ← Logging terpusat
├── scripts/
│   └── seed_knowledge_base.py  ← Isi ChromaDB dengan data awal
├── tests/
│   └── test_api.py       ← Pytest untuk semua endpoint
├── .env.example          ← Template konfigurasi
├── requirements.txt      ← Dependencies Python
└── README.md

Setup (Hari 3)

1. Install Dependencies

bash
pip install -r requirements.txt
Catatan: sentence-transformers akan download model multilingual-e5-small (~480MB) saat pertama kali dijalankan. Butuh koneksi internet.

2. Setup File .env

bash
cp .env.example .env
# Edit .env, isi GROQ_API_KEY dengan key kamu

3. Jalankan Backend

bash
uvicorn backend.main:app --reload --port 8000

Output yang diharapkan:

INFO     | Memulai JawaChat backend...
INFO     | Memuat embedding model: intfloat/multilingual-e5-small
INFO     | RAG pipeline berhasil diinisialisasi.
INFO     | Application startup complete.

4. Isi Knowledge Base (Hari 4-5)

bash
# Seed dengan dokumen contoh bawaan
python scripts/seed_knowledge_base.py

# Atau seed via API (backend harus jalan dulu)
python scripts/seed_knowledge_base.py --via-api

Endpoint API

GET /health

Cek status semua komponen.

bash
curl http://localhost:8000/health

POST /chat

Chat dengan respons penuh.

bash
curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Piye cara tanam padi sing apik?",
    "topic": "pertanian",
    "use_rag": true
  }'

POST /chat/stream

Chat dengan streaming (kata per kata).

bash
curl -X POST http://localhost:8000/chat/stream \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"message": "Pupuk apa sing apik?", "topic": "pertanian"}'

POST /ingest

Tambah dokumen ke knowledge base.

bash
curl -X POST http://localhost:8000/ingest \
  -H "Content-Type: application/json" \
  -d '{
    "documents": [{
      "content": "Isi teks dokumen dalam bahasa Jawa...",
      "source": "nama_file.txt",
      "topic": "pertanian"
    }]
  }'

Swagger UI (Dev)

Buka di browser: http://localhost:8000/docs


Alur RAG Pipeline

User message
     │
     ▼
[Embedding: multilingual-e5-small]
     │
     ▼
[ChromaDB: similarity search, top-3]
     │
     ├── score ≥ 0.35? → masukkan ke context
     │
     ▼
[Build prompt: system + history + context + message]
     │
     ▼
[Groq API: Qwen3-32b, reasoning_format=hidden]
     │
     ▼
[Response dalam Bahasa Jawa + daftar sumber]

Testing

bash
# Jalankan semua tes
pytest tests/ -v

# Tes dengan coverage
pytest tests/ -v --tb=short

Yang Divalidasi di Fase 2

  • [ ] FastAPI berjalan di port 8000
  • [ ] /health mengembalikan status OK
  • [ ] /chat tanpa RAG merespons dalam bahasa Jawa
  • [ ] /chat dengan RAG menyertakan dokumen relevan
  • [ ] /chat/stream streaming berjalan (SSE)
  • [ ] /ingest berhasil tambah dokumen ke ChromaDB
  • [ ] Multi-turn conversation context terjaga
  • [ ] Semua topik (pertanian, kesehatan, pendidikan, umum) berjalan
  • [ ] Pytest lulus semua tes

Roadmap

FaseTarget
✅ 1CLI chatbot + validasi respons Jawa
✅ 2FastAPI + RAG + ChromaDB (file ini)
3PWA Frontend (React + Vite + Workbox)
4Contextual model + IndexedDB offline
5Deploy: HuggingFace Spaces + Vercel

Catatan Teknis

  • Node.js tidak diperlukan untuk fase ini
  • ChromaDB berjalan lokal, data tersimpan di ./chroma_db/
  • Model embedding di-cache otomatis di ~/.cache/huggingface/
  • Rate limit Groq gratis: ~30 req/menit — cukup untuk development
  • reasoning_format: hidden dikirim via extra_body untuk kompatibilitas SDK lama