lexrag / README.md
RV302001's picture
Add live demo link to README
cd40388
|
Raw
History Blame Contribute Delete
2.05 kB
---
title: LexRAG
emoji: ⚖️
colorFrom: indigo
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
license: apache-2.0
---
# LexRAG — Hybrid-Search Legal RAG
**🔗 Live demo:** https://huggingface.co/spaces/RV302001/lexrag
Retrieval-augmented Q&A over real Indian court judgments
([opennyaiorg/InJudgements_dataset](https://huggingface.co/datasets/opennyaiorg/InJudgements_dataset),
Apache-2.0). Answers are grounded in retrieved judgments and cite their sources;
hallucinated citations are stripped before display.
## How it works
1. **Hybrid retrieval** — one SQL CTE fuses two arms with Reciprocal Rank Fusion:
- **Vector**: pgvector cosine (`<=>`) over `bge-small-en-v1.5` embeddings (384-dim), HNSW index.
- **Keyword**: Postgres full-text `ts_rank_cd` over a generated `tsvector`, GIN index.
2. **Generation** — Groq `llama-3.1-8b-instant`, temp 0.1, strict "answer only from context, cite `[case_name]`" prompt.
3. **Validation** — citations not matching a retrieved case name are stripped.
Data lives in an **external Neon Postgres** (pgvector), so it persists across
Space restarts. The Space holds no data — only the app + embedding model.
## Stack
FastAPI · SQLAlchemy 2.0 + Alembic · Postgres 15 + pgvector (Neon) ·
sentence-transformers · Groq · plain HTML/JS. No Celery/Redis.
## Configuration
Set these as **Space secrets** (or local `.env`, see `.env.example`):
| Secret | Description |
|--------|-------------|
| `DATABASE_URL` | Neon connection string (pgvector enabled) |
| `GROQ_API_KEY` | Groq API key |
## One-time setup (offline, run locally)
```bash
pip install -r requirements.txt
alembic upgrade head # create extension, table, HNSW + GIN indexes
python -m ingest.build_index # load 300 judgments -> chunk -> embed -> insert
```
Then deploy: push this repo to a Hugging Face Space (Docker SDK) with the two secrets set.
## Local run
```bash
uvicorn app.main:app --host 0.0.0.0 --port 7860
```
Endpoints: `GET /` (UI), `POST /ask {question}`, `GET /health`.