Fassarli (فسرلي) — A multilingual RAG chatbot with native Tunisian Darija support. Detects 26 intents from real Tunisian expressions using fuzzy-matched NLP, a manually farmed Darija database built from social media, and a hybrid BM25 + vector retrieval pipeline. Powered by Llama 3.3 70B via NVIDIA NIM. Built with LangChain, ChromaDB, and Streamlit
# Fassarli AI — Tunisian Darija RAG Chatbot
> *"Fassarli" (فسرلي) means "explain it to me" in Tunisian Darija.*
A multilingual document Q&A chatbot with **native Tunisian Darija support** — the first RAG system built specifically for Tunisian Arabizi. Powered by **Llama 3.3 70B** via NVIDIA NIM with a hybrid BM25 + vector retrieval pipeline and a self-improving feedback loop.
---
## Why This Project Is Different
Most RAG chatbots handle English, French, maybe Arabic. None of them handle Tunisian Darija — a dialect that mixes Arabic, French, and Berber, written in Latin script with numbers replacing missing letters (`3=ع`, `5=خ`, `7=ح`, `9=ق`). Fassarli does.
The system detects when a user writes `mafhemtch chy` (I didn't understand anything) or `5arreeff` (you're hallucinating) and **automatically adapts its response** — reformulating, repeating, giving examples, or acknowledging it went off topic. It does this across **4 languages simultaneously**, switching per message with no manual input.
---
## Darija Intent System
The core innovation: a custom NLP layer that reads Tunisian Darija signals and changes how the model responds in real time. 26 intents, detected by fuzzy matching with priority ordering.
| Priority | Intent | Trigger example | What the model does |
|---|---|---|---|
| p2 | `giving_up` | ayast moi, la3alayna | One final 2-sentence attempt |
| p3 | `hallucination` | 5arreeff, khareef | Returns strictly to document context |
| p3.5 | `pdf_mismatch` | mouch hakka fil pdf | Corrects answer to match source material |
| p4 | `wrong_answer` | mouch hakka, moch kk | Re-reads context and retries |
| p4.5 | `source_check` | mnayn jibt hadha | Cites the specific retrieved chunk |
| p5 | `confusion` | mafhemtch, chnou, zid fahamni | Reformulates more simply |
| p5.2 | `persistent_confusion` | ma fhemtech zeda | Switches strategy: analogy + schema |
| p5.5 | `pdf_reference` | fil pdf 9alek | Confirms or clarifies what the PDF says |
| p5.8 | `pdf_confusi …