Built a LangGraph agentic RAG system with an explicit four-tool state machine (search, summarize, timeline, direct answer) routing Arabic queries over 26,000+ indexed news chunks — chose LangGraph over a ReAct agent specifically for inspectable, visualizable node/edge control flow rather than a black-box loop.
Implemented hybrid retrieval combining AraBERT v2 dense vectors (768-dim) with BM25 sparse vectors via FastEmbed, fused using Reciprocal Rank Fusion (RRF) in Qdrant, then reranked with a Cohere cross-encoder — evaluated across all four retrieval modes on labeled queries: Recall@5 rose from 0.56 (dense-only) → 0.63 (BM25) → 0.74 (hybrid) → 0.85 (hybrid + reranked).
Built a full evaluation harness — router accuracy with a confusion matrix, retrieval recall/precision/MRR, LLM-as-judge generation scoring, latency breakdown — reporting 80% router accuracy and 4.8/5 groundedness, with sample size and methodology limitations disclosed rather than inflated.
Diagnosed and fixed 6+ production bugs through systematic root-cause analysis: Qdrant filter leaking across Prefetch sub-queries; routing prompt/TOOL_MAP spelling mismatch causing silent fallback on every summarize query; AraBERT tokenizer deadlock on Windows resolved by bypassing the sentence-transformers wrapper; duplicate indexing eliminated with deterministic MD5 hash IDs.
FastAPI backend with error handling and a 30s timeout wrapper; Streamlit frontend with Arabic RTL support; full architecture documented with decision rationale, rejected alternatives, and known limitations.