test2 / README.md
Martechsol
Restore to latest backup from 13 May - 2026-05-15 17:56
608d6ed
|
Raw
History Blame Contribute Delete
3.95 kB
---
title: Fast RAG Chatbot
emoji: 🤖
colorFrom: blue
colorTo: indigo
sdk: docker
pinned: false
storage: true
---
# High-Performance RAG Chatbot (FastAPI + FAISS)
Production-style document QA chatbot using:
- FastAPI API service
- FAISS vector search
- SentenceTransformer embeddings (`BAAI/bge-small-en-v1.5` by default)
- Groq (preferred) or Hugging Face LLM APIs
- Optional Gradio chat UI
## Features
- Loads `.pdf` and `.txt` files from `docs/`
- Cleans extracted text and chunks into semantic windows
- Chunk size: 420 tokens (word-level approximation)
- Overlap: 80 tokens
- Builds FAISS index and saves it locally
- Re-indexes only when docs change (fingerprint-based cache)
- Retrieves top-k relevant chunks only (default k=4)
- Strict anti-hallucination prompt
- Health endpoint with docs/index status
- Retrieval logging (source + similarity score)
- CORS controls for website integration
- Optional API key auth for `/chat`
- In-memory rate limiting per client IP
- Query embedding cache for repeated questions
- Docker + docker-compose deployment
## Project Structure
`app/main.py` - FastAPI app and endpoints
`app/services/document_loader.py` - PDF/TXT ingestion and cleaning
`app/services/chunker.py` - token-window chunking
`app/services/embeddings.py` - embedding model wrapper
`app/services/vector_store.py` - FAISS index and retrieval
`app/services/llm.py` - Groq/HF LLM clients and prompt
`app/services/rag_pipeline.py` - end-to-end chat flow
`app/ui_gradio.py` - optional web chat UI
## Setup
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Configure environment:
```bash
copy .env.example .env
```
Then set your keys in `.env`:
- `GROQ_API_KEY` (if using Groq)
- `HF_API_KEY` (if using Hugging Face)
- Optional:
- `API_KEY` for request auth (send as `x-api-key`)
- `CORS_ALLOW_ORIGINS` as comma-separated origins
- `RATE_LIMIT_REQUESTS` and `RATE_LIMIT_WINDOW_SECONDS`
3. Add documents:
- Put your `.pdf` and `.txt` files in `docs/`
## Run API
```bash
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
## Endpoints
### `GET /health`
Returns status and index readiness.
### `POST /chat`
Request:
```json
{
"message": "What are the key points?",
"history": []
}
```
Response:
```json
{
"reply": "Answer based on retrieved context.",
"retrieved_chunks": [
{
"id": "...",
"source": "...",
"text": "...",
"score": 0.83
}
]
}
```
## Optional UI
Start API first, then:
```bash
python -m app.ui_gradio
```
By default, Gradio now runs in direct RAG mode (no localhost API dependency).
If you set `RAG_API_URL`, it will call that external FastAPI endpoint instead.
## Deployment Notes
- Works as backend for websites (REST API is frontend-agnostic)
- Persist `data/index/` volume in production
- Prefer Groq provider for low latency
- Keep `top_k` small (3-5) for speed and lower prompt tokens
- Protect `/chat` with `API_KEY` in production
- Set strict `CORS_ALLOW_ORIGINS` instead of `*`
## Docker Deployment
Build and run:
```bash
docker compose up --build -d
```
Health check:
```bash
curl http://localhost:8000/health
```
Chat call with API key:
```bash
curl -X POST http://localhost:8000/chat ^
-H "Content-Type: application/json" ^
-H "x-api-key: YOUR_API_KEY" ^
-d "{\"message\":\"What does the handbook say about leave policy?\",\"history\":[]}"
```
## Hugging Face Spaces (Recommended: Gradio Space)
Use these settings in your Space:
- **SDK**: Gradio
- **App file**: `app.py`
- **Python version**: 3.10+ (3.11 recommended)
Add Space Secrets:
- `GROQ_API_KEY` (or `HF_API_KEY`)
- Optional: `LLM_PROVIDER`, `GROQ_MODEL`, `HF_MODEL`, `TOP_K`
Upload project files (excluding `.env`) and include your knowledge files inside `docs/`.