legal assistant specialized in Tunisian legislation, leveraging RAG, vector search, and large language models to deliver reliable, context-aware legal answers.
# Assistant Juridique Tunisien π§ββοΈ
A production-ready **RAG (Retrieval-Augmented Generation)** microservices platform that answers questions about Tunisian law, grounded in real legal texts (Code Civil, Code de Commerce, Code du Travail) with cited sources.
Built as a portfolio project demonstrating microservices architecture, authentication, observability, and CI/CD practices for a DevOps/Cloud engineering role.
---
## π Architecture
```
Internet
β
Nginx (reverse proxy, port 80)
β
ββββββββββββββββββΌβββββββββββββββββ
β β β
Frontend API Gateway Ingestion Service
(Next.js 14) (FastAPI, JWT, (PDF β chunks β
Google OAuth) embeddings)
β β
β β
RAG Service βββββββββββ
(retrieval + Groq LLM)
β
ββββββββββββββββββΌβββββββββββββββββ¬βββββββββββββββ
β β β β
PostgreSQL Qdrant Redis Groq API
(users, sessions, (vector store (rate limiting) (LLM inference)
messages) for legal docs)
Monitoring stack
Prometheus ββββ Grafana ββββ cAdvisor
(metrics scraping) (dashboards) (container metrics)
```
### Services
| Service | Tech | Responsibility |
|---|---|---|
| **nginx** | Nginx | Reverse proxy β routes `/` to frontend, `/api/*` to API Gateway |
| **frontend** | Next.js 14, TypeScript, Tailwind | Chat UI, auth pages, session management |
| **api-gateway** | FastAPI, asyncpg | Auth (JWT + Google OAuth), session/message persistence, RAG orchestration, rate limiting |
| **rag-service** | FastAPI, sentence-transformers, Groq SDK | Embeds queries, retrieves relevant legal chunks from Qdrant, generates answers via Groq |
| **ingestion-service** | FastAPI, PyMuPDF | Parses legal PDFs, chunks text, generates embeddings, stores in Qdrant |
| **postgres** | PostgreSQL 16 | Users, sessions, chat messages |
| **qdrant** | Qdrant | Vector store for legal document embeddings |
| **redis** | Redis 7 | Login attempt trackin β¦