kibali-api / README.md
lojol469-cmd
Add clean README.md for Hugging Face
fc58822
---
title: Kibali AI
emoji: 🧠
colorFrom: green
colorTo: blue
sdk: docker
sdk_version: "1.0.0"
app_file: app.py
pinned: false
---
# 🇬🇦 Kibali AI — Intelligence Artificielle Gabonaise Souveraine
Assistant IA expert du Gabon, avec contexte géographique, RAG sur documents PDF, mémoire conversationnelle adaptative et recherche web en temps réel.
Modèle : `BelikanM/kibali-final-merged` (7B quantisé 4-bit) chargé sur GPU CUDA.
## 🚀 Fonctionnalités
- Réponses naturelles en français, toujours factuelles et chaleureuses
- Contexte géolocalisé (Libreville par défaut, configurable)
- Upload et interrogation de documents PDF (RAG vectoriel avec FAISS)
- Mémoire conversationnelle persistante et adaptative
- Recherche web intégrée (Tavily)
- API FastAPI complète avec streaming de génération
## 🔗 Endpoints API
- `POST /chat` → conversation principale
- `GET /status` → état du système (chunks, mémoire, GPU, etc.)
- `POST /upload` → import de PDFs
- `POST /clear-memory` → réinitialisation mémoire
- `/docs` → documentation Swagger interactive
- `/static` → fichiers statiques (logo, etc.)
## 🛠️ Stack technique
- FastAPI + Uvicorn
- Transformers + BitsAndBytes (quantisation 4-bit)
- Sentence-Transformers + FAISS (embedding & RAG)
- Tavily pour la recherche web
- Docker CUDA 12.4 (GPU accéléré)
## 🔐 Secrets requis
Ajouter dans **Settings → Secrets** du Space :
- `TAVILY_API_KEY` → votre clé Tavily (format `tvly-...`)
## 📂 Structure du projet
- `app.py` → API FastAPI principale
- `tools/` → outils personnalisés (web, raisonnement, géo)
- `static/` → assets statiques
- `Dockerfile` → build CUDA optimisé
- `requirements.txt` → dépendances Python
## 🌍 Utilisation
L’API est prête à être consommée par n’importe quel frontend (React, Streamlit, Gradio, mobile, etc.).
### Exemple de requête `/chat`
```json
{
"messages": [{"role": "user", "content": "Bonjour Kibali, quel est le climat à Libreville aujourd'hui ?"}],
"latitude": 0.4061,
"longitude": 9.4673,
"city": "Libreville",
"thinking_mode": true
}