|
Download README.md from Ilaa-1505/Explainable-RAG-System: direct link, hf CLI and curl.
- Browser
- Download file 4.7 kB
-
https://huggingface.co/spaces/Ilaa-1505/Explainable-RAG-System/resolve/main/README.md
- Command line
-
hf download hf://spaces/Ilaa-1505/Explainable-RAG-System/README.md
-
curl -L -o README.md https://huggingface.co/spaces/Ilaa-1505/Explainable-RAG-System/resolve/main/README.md
4.7 kB
| title: Explainable RAG System | |
| emoji: π | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| hardware: cpu-upgrade | |
| pinned: false | |
| # Explainable RAG System | |
|  | |
|  | |
|  | |
|  | |
|  | |
| π **[Live Demo](https://huggingface.co/spaces/Ilaa-1505/Explainable-RAG-System)** | |
| > If the Space is sleeping, it may take ~30 seconds to wake up on first visit. Startup may also be slow as the embedding model and reranker weights load into memory. | |
| > Groq free tier rate limits apply β if you get no response, wait a minute and try again. | |
| Most RAG systems are black boxes. You type a question, get an answer, and have no idea what happened in between. | |
| Which documents were retrieved. Why one chunk ranked above another. How the query was even interpreted. | |
| This project opens that box. Every stage of the retrieval pipeline is visible and interactive: | |
| - how your query gets tokenized and embedded | |
| - how BM25 and vector search disagree | |
| - how MMR trades off relevance for diversity | |
| - why the reranker promotes some chunks and drops others | |
| Ask a question. See exactly how the answer was built. | |
| --- | |
| ## Demo | |
| >  | |
| --- | |
| ## What's inside | |
| ### Answer | |
| Ask anything about the HuggingFace Transformers documentation. The system retrieves relevant chunks, reranks them, and generates an answer using Llama 3.1 via Groq. | |
| >  | |
| --- | |
| ### Latency Timeline | |
| Every stage of the pipeline: embed, vector search, BM25, hybrid fusion, MMR, rerank, LLM, broken down by time. You can see exactly where the bottleneck is. | |
| Below it, query analysis shows each token's IDF score, its position in the embedding space, and an overall complexity rating. | |
| >  | |
| >  | |
| --- | |
| ### Retrieval Comparison | |
| A table showing every candidate chunk with its Vector, BM25, Hybrid, and Reranker scores side by side. You can see which chunks got promoted, which got dropped, and by how much. | |
| >  | |
| --- | |
| ### MMR Visualization | |
| MMR (Maximal Marginal Relevance) balances relevance and diversity when selecting chunks. This tab shows that tradeoff visually, a UMAP scatter of all candidates, a similarity matrix, and a live Ξ» slider to see how the selection changes in real time. | |
| >  | |
| --- | |
| ### Context Chunks | |
| The final chunks passed to the LLM, each with its reranker score and source URL. | |
| >  | |
| --- | |
| ## Retrieval Pipeline | |
| ``` | |
| Query β Embed β Vector Search + BM25 β Hybrid Fusion β MMR β Rerank β LLM | |
| ``` | |
| - **Vector search** β BAAI/bge-small-en-v1.5 embeddings via ChromaDB | |
| - **BM25** β keyword search with BM25Okapi | |
| - **Hybrid fusion** β weighted combination of both (Ξ± = 0.7) | |
| - **MMR** β removes redundant chunks while preserving relevance | |
| - **Reranker** β cross-encoder/ms-marco-MiniLM-L-6-v2 for final scoring | |
| - **LLM** β Llama 3.1 8B via Groq API | |
| --- | |
| ## Stack | |
| - **Backend** β Flask | |
| - **Embeddings** β sentence-transformers, ChromaDB | |
| - **Retrieval** β rank-bm25, UMAP | |
| - **Reranker** β CrossEncoder (ms-marco-MiniLM-L-6-v2) | |
| - **LLM** β Llama 3.1 via Groq | |
| - **Frontend** β Vanilla JS | |
| --- | |
| ## Run it yourself | |
| ```bash | |
| git clone https://github.com/ilaa-1505/Explainable-RAG-System | |
| cd Explainable-RAG-System | |
| pip install -r requirements.txt | |
| ``` | |
| Set up your Groq API key: | |
| ```bash | |
| echo "GROQ_API_KEY=your_key_here" > .env | |
| ``` | |
| Build the index: | |
| ```bash | |
| python src/ingestion/fetch_docs.py | |
| python src/ingestion/chunk.py | |
| python src/retrieval/embed_store.py | |
| ``` | |
| Run: | |
| ```bash | |
| python app.py | |
| ``` | |
| > First startup takes a minute, the embedding model (BAAI/bge-small-en-v1.5) and reranker (ms-marco-MiniLM-L-6-v2) weights load into memory on first query. | |
| --- | |
| ## Things I learned building this | |
| - BM25 consistently outranks vector search on exact keyword matches, hybrid fusion is genuinely worth the complexity | |
| - MMR's Ξ» parameter matters more than expected, at Ξ»=1.0 the top chunks are nearly identical; at Ξ»=0.5 the diversity is visible in the UMAP | |
| - The reranker and vector search frequently disagree on rank. the retrieval comparison table makes this obvious | |
| --- | |
| ## What's next | |
| - Support for other documentation sources beyond HuggingFace Transformers | |
| - Side by side comparison of retrieval strategies on the same query |