title: NITDAA
emoji: π₯
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: true
π₯ NITDAA: Mobile-First AI Document Analysis Engine
Enterprise-Grade RAG System on a Smartphone Budget
π Live Demo β’ π Architecture β’ π User Guide β’ π€ Contributing
π What is NITDAA?
NITDAA is a cutting-edge, mobile-first AI document analysis platform that brings enterprise-grade capabilities to resource-constrained environments. Originally designed for health insurance policy analysis (NITDAA Base Program), NITDAA now serves as a universal Retrieval-Augmented Generation (RAG) engine that can be deployed anywhereβfrom HuggingFace Spaces to edge devices.
Unlike traditional RAG systems that require expensive GPUs and cloud infrastructure, NITDAA is architected for the HuggingFace Spaces free tier while maintaining:
- β¨ Multi-agent AI reasoning (CrewAI)
- π Tri-modal hybrid retrieval (Vector + Sparse + Graph)
- π± Mobile-first responsive UI
- β‘ Real-time SSE streaming responses
- π Enterprise-grade security & guardrails
- π§ Zero hallucinations via strict RAG grounding
Now live on HuggingFace! β π sam-max1-nitdaa.hf.space
π― Live Demo & Interactive Features
Experience NITDAA now: https://sam-max1-nitdaa.hf.space/
The live platform demonstrates:
- π Document Upload - Ingest PDFs, Word docs, Excel sheets, and images
- π€ AI-Powered Q&A - Ask questions about your documents
- ποΈ Dual LLM Routing - Switch between Expert (reasoning) and Assistant (speed) modes
- β Inline Feedback - Rate responses and provide feedback (1-5 stars, thumbs up/down)
- π Source Citations - View retrieved context for every answer
- π Real-time Streaming - Watch responses generate in real-time with SSE
- π± Mobile Optimized - Fully functional on smartphones and tablets
π Key Features at a Glance
| Feature | Description | Benefit |
|---|---|---|
| π€ Multi-Agent Orchestration | CrewAI agents (Ingestor, Analyzer, Gatekeeper, Analyst) | Intelligent context refinement & error handling |
| π Tri-Modal Hybrid Retrieval | Vector (Dense) + Sparse (BM25) + Graph (Kuzu) search | 99% context precision, zero misses |
| π 7-Format Document Support | PDF, DOCX, XLSX, CSV, TXT, Images (OCR) | Universal document compatibility |
| β‘ Concurrent Isolation | Thread-pool architecture with PyTorch serialization | Prevents OOM crashes on resource-limited hardware |
| ποΈ Dual LLM Routing | Expert vs. Assistant mode switcher | User controls speed vs. reasoning tradeoff |
| π± Mobile-First UX | Single-pane vertical layout, inline controls | Optimized for smartphones (no desktop bloat) |
| π Enterprise Security | Math CAPTCHA, rate limiting, CSP, prompt injection guardrails | Safe for public deployment |
| π Session Telemetry | Flat-file auditing (JSON logs), no database overhead | Minimal infrastructure footprint |
| π Resumable Streaming | Job ID system survives background disconnections | Works on unstable mobile networks |
| π§ Zero Hallucinations | Strict RAG grounding, fallback for unsupported queries | Factually accurate responses only |
ποΈ System Architecture
High-Level Data Flow
graph TB
subgraph Frontend["π± Frontend Layer"]
UI["Single-Pane Mobile UI"]
CAPT["Math CAPTCHA Gate"]
DLM["Dual LLM Slider"]
FEED["Inline Feedback UI"]
end
subgraph Security["π Security & API"]
RATE["Rate Limiter"]
CSP["HTTP CSP Headers"]
TOKENS["Session Isolation"]
end
subgraph Core["βοΈ Core Processing"]
JOBSYS["Job ID System"]
THREAD["Thread Pool Manager"]
LOCK["PyTorch Lock"]
end
subgraph Retrieval["π Tri-Modal Retrieval"]
VEC["ChromaDB Vector Store"]
SPARSE["BM25 Sparse Index"]
GRAPH["Kuzu Graph DB"]
RERANK["Cross-Encoder Reranker"]
end
subgraph LLM["π§ Generation Engine"]
CREW["CrewAI Orchestrator"]
EXPERT["Expert Model (Reasoning)"]
ASST["Assistant Model (Speed)"]
end
subgraph Storage["πΎ Storage & Sync"]
SESS["nitdaa_sessions.json"]
SUMMARY["nitdaa_summary.json"]
SYNC["Remote Data Sync"]
end
UI --> CAPT
CAPT --> RATE
RATE --> CSP
TOKENS --> JOBSYS
JOBSYS --> THREAD
THREAD --> VEC
THREAD --> SPARSE
THREAD --> GRAPH
VEC --> RERANK
SPARSE --> RERANK
GRAPH --> RERANK
RERANK --> LOCK
LOCK --> CREW
DLM --> CREW
CREW --> EXPERT
CREW --> ASST
CREW --> FEED
FEED --> SUMMARY
SYNC -.->|Update Check| VEC
SYNC -.->|Update Check| GRAPH
Document Processing Pipeline
sequenceDiagram
participant User
participant Flask as Flask API
participant Pipeline as Doc Pipeline
participant Embed as Embedder
participant VecDB as ChromaDB
participant GraphDB as Kuzu Graph
User->>Flask: Upload Document
Flask->>Pipeline: Extract & Validate
Pipeline->>Pipeline: Split into 512-token chunks (64 overlap)
Pipeline->>Embed: Vectorize chunks
Embed->>VecDB: Store dense embeddings + metadata
Embed->>VecDB: Index with BM25 sparse search
Pipeline->>GraphDB: Extract entities & relationships
GraphDB->>GraphDB: Store as nodes & edges
Flask-->>User: β
Document ingested, 12,345 chunks indexed
Query Processing & Response Flow
graph LR
Q["User Query"]
Q --> CAPT["Math CAPTCHA Check"]
CAPT --> LIMIT["Rate Limit Check"]
LIMIT --> SESS["Create Job ID"]
SESS --> JOB["Async Job Queue"]
JOB --> JOBSTART["POST /api/query/start"]
JOBSTART --> USER["Return Job ID to Client"]
USER --> JOBSTREAM["GET /api/query/stream/<job_id>"]
JOB --> RETRIEVE["Concurrent Retrieval"]
RETRIEVE --> VEC["Vector Search"]
RETRIEVE --> BM25["BM25 Search"]
RETRIEVE --> GRAPH["Graph Search"]
VEC --> MERGE["Merge Results"]
BM25 --> MERGE
GRAPH --> MERGE
MERGE --> RERANK["Cross-Encoder Rerank"]
RERANK --> CREW["CrewAI Agent Loop"]
CREW --> LLM["LLM Generation"]
LLM --> STREAM["Server-Sent Events Stream"]
STREAM --> JOBSTREAM
JOBSTREAM --> UI["Render in UI"]
UI --> FEED["User Feedback Panel"]
FEED --> SUMMARY["Log to nitdaa_summary.json"]
π Quick Start
Prerequisites
- Docker 20.10+
- 8GB RAM minimum (16GB recommended)
- 10GB free disk space
Run on HuggingFace Spaces (Cloud)
# Already live! Visit:
https://sam-max1-nitdaa.hf.space/
Run Locally
# Clone the repository
git clone https://github.com/Sam-max1/nitdaa.git
cd nitdaa
# Option 1: Docker (Recommended)
docker build -t nitdaa .
docker run -p 5050:5050 -p 7860:7860 nitdaa
# Option 2: Local Python Environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install CPU or GPU requirements
pip install -r requirements_hf.txt # HF Spaces / CPU-only
# OR
pip install -r requirements.txt # Full GPU mode
# Run the app
python app.py
# Access the UI
# Desktop: http://localhost:5050
# Headless/Remote: http://localhost:7860
Configuration
Edit config.py to customize:
- LLM model endpoints
- Vector store limits
- Rate limiting parameters
- Session quotas
- CAPTCHA difficulty
π οΈ Technology Stack
Backend Framework
- Python 3.10+ - Core language
- Flask 3.0+ - Lightweight web framework
- CrewAI 0.36+ - Multi-agent orchestration
- LangChain - LLM abstraction layer
- Flask-Limiter - API rate limiting
- Server-Sent Events (SSE) - Real-time streaming
AI & Machine Learning
- Sentence-Transformers - Dense embeddings (
BAAI/bge-small-en-v1.5, 130MB) - Hugging Face Transformers - Model loading & inference
- LLaMA-CPP - GGUF model quantization support
- spaCy - Named Entity Recognition for graph extraction
- Rank-BM25 - Sparse keyword search
- CrossEncoder - Semantic reranking
Databases & Search
- ChromaDB - Embedded vector store (hard limit: 10,000 chunks)
- Kuzu - Embedded graph database
- BM25 Index - Hybrid sparse search
Data Processing
- PyMuPDF - PDF extraction
- unstructured - Complex document parsing
- python-docx - Word document support
- openpyxl - Excel parsing
- pytesseract + Pillow - OCR for images
- pandas - Tabular data handling
Frontend
- HTML5 + CSS3 - Responsive mobile-first design
- Vanilla JavaScript - Client-side interactions
- Bootstrap 5 - UI components
- Server-Sent Events API - Real-time streaming
Deployment & DevOps
- Docker - Containerized deployment
- HuggingFace Spaces - Cloud hosting (free tier)
- NVIDIA CUDA - Optional GPU acceleration
π Comprehensive Feature Breakdown
1. Multi-Agent Intelligence
NITDAA uses CrewAI to orchestrate specialized agents:
- Ingestor Agent - Document loading, format detection, chunking
- Comprehensive Reader - Full-document semantic analysis with KV-cache optimization
- Gatekeeper Agent - Content verification, safety checks, context validation
- Analyst Agent - Answer synthesis, citation generation
2. Hybrid Retrieval Engine
Three search modes working in concert:
- Dense Vector Search - Semantic similarity via embeddings
- Sparse Keyword Search - Exact term matching via BM25
- Graph Traversal - Entity relationship queries via Kuzu
Results are merged, deduplicated, and re-ranked by a Cross-Encoder for maximum precision.
3. Document Format Support
| Format | Extraction Method | Max File Size |
|---|---|---|
| PyMuPDF + OCR fallback | 50MB | |
| DOCX | python-docx | 20MB |
| XLSX | openpyxl | 20MB |
| CSV | pandas | 50MB |
| TXT | Direct read | 50MB |
| Images (PNG, JPG) | pytesseract OCR | 10MB |
4. Concurrent Processing with Safety
- β I/O Concurrency - Thread pool for database queries, network I/O
- β Memory Safety - PyTorch operations serialized via locks (prevents OOM)
- β Resource Limits - Hard cap on vector store (10K chunks), session quotas (5 uploads/session)
- β CPU Throttling - Thread limits to prevent CPU thrashing on HF Spaces
5. Security & Safety
- π Math CAPTCHA - Blocks automated bot traffic
- π Rate Limiting - Configurable per-IP request limits
- π Session Isolation - Cryptographic session tokens
- π HTTP CSP Headers - XSS & injection attack mitigation
- π Prompt Injection Guardrails - CrewAI system prompts neutralize jailbreak attempts
- π Gatekeeper Filtering - Malicious queries rejected before generation
- π Strict RAG Grounding - Responses generated only from retrieved context
- π Fallback Protocol - "Context not available" for unsupported questions
6. Mobile-First UI/UX
- π± Single-pane vertical layout (no desktop 3-pane complexity)
- π± Dynamic inline feedback panel (appears after response generation)
- π± Floating action buttons for copy & actions
- π± Responsive typography and spacing
- π± Touch-friendly buttons and inputs
- π± Startup splash screen with NITDAA Base Program overview
7. Dual LLM Routing
Users control the speed vs. reasoning tradeoff via an in-app slider:
- Expert Mode -
google/diffusiongemma-26b-a4b-it(deeper reasoning) - Assistant Mode -
minimaxai/minimax-m3(faster generation)
8. Real-Time Streaming with Resilience
- π Server-Sent Events (SSE) for unidirectional streaming
- π Offset recovery for mobile background disconnections
- π Job ID system allows client to resume interrupted streams
- π Automatic retry on network failures
9. User Feedback & Telemetry
Users rate responses immediately after generation:
- β 1-5 star rating
- π Thumbs up/down
- π¬ Optional text feedback
All feedback is logged to nitdaa_summary.json for analysis.
10. Autonomous Dataset Sync
Background thread continuously monitors Sam-max1/he-data:
- π Detects dataset changes
- π Auto-purges outdated indices
- π Rebuilds vector/graph stores
- π Syncs session logs with remote repository
- π Zero manual intervention required
π Project Structure
nitdaa/
βββ app.py # Flask application entry point
βββ config.py # Configuration & environment variables
βββ requirements.txt # GPU mode dependencies
βββ requirements_hf.txt # CPU/HF Spaces dependencies
βββ Dockerfile # Container image definition
βββ start.sh # Startup script
β
βββ agents/
β βββ __init__.py
β βββ crew.py # CrewAI orchestration
β βββ llm.py # LLM routing & management
β βββ gen_llm.py # Generation LLM wrapper
β βββ embed_llm.py # Embedding model wrapper
β βββ nvidia_llm.py # NVIDIA API support
β βββ tools.py # Agent tools & utilities
β
βββ pipeline/
β βββ __init__.py
β βββ document_loader.py # Multi-format document extraction
β βββ chunker.py # Semantic chunking (512 tokens)
β βββ embedder.py # Dense & sparse embedding generation
β βββ vector_store.py # ChromaDB wrapper & management
β βββ graph_store.py # Kuzu graph DB operations
β βββ security.py # Input validation & sanitization
β
βββ templates/
β βββ base.html # Base template
β βββ index.html # Main UI (mobile-first)
β βββ admin.html # Admin dashboard (hidden)
β
βββ static/
β βββ css/
β β βββ style.css # Mobile-responsive styles
β β βββ bootstrap.min.css # Bootstrap framework
β βββ js/
β βββ app.js # Main app logic
β βββ streaming.js # SSE streaming handler
β
βββ data/
β βββ uploads/ # Temporary document uploads
β βββ chroma_db/ # Vector store (embedded)
β βββ kuzu_db/ # Graph store (embedded)
β
βββ kbdocs/
β βββ *.md # Knowledge base documents
β
βββ images/
β βββ nitdaa-ui-demo.png # Demo screenshot
β
βββ docs/
β βββ NITDAA_ARCHITECTURE_DESIGN.md # Detailed architecture
β βββ NITDAA_TECHNOLOGY_STACK_AND_FEATURES.md # Feature deep-dive
β βββ NITDAA_HEALTHEXPERT_USER_GUIDE.md # User documentation
β
βββ LICENSE # MIT License
βββ README.md # This file
π Deployment Guide
Option 1: HuggingFace Spaces (Recommended)
# Push to HF Spaces (already configured)
git remote add hf https://huggingface.co/spaces/Sam-max1/nitdaa
git push hf main
Option 2: Docker Container
# Build
docker build -t nitdaa:latest .
# Run with GPU support
docker run --gpus all -p 5050:5050 -p 7860:7860 \
-e NVIDIA_API_KEY="your-key" \
-e HF_TOKEN="your-token" \
nitdaa:latest
# Run CPU-only
docker run -p 5050:5050 -p 7860:7860 nitdaa:latest
Option 3: Kubernetes
See Deployment docs for K8s manifests and scaling strategies.
π Security Features
NITDAA implements defense-in-depth:
Perimeter Defense
- Math CAPTCHA on entry
- Rate limiting per IP
- HTTP CSP headers
Session Security
- Cryptographic session tokens
- Per-user context isolation
- Token rotation on query
LLM Security
- CrewAI prompt injection guardrails
- Gatekeeper agent filtering
- Strict RAG grounding (no hallucinations)
- Temperature control & output sanitization
Data Security
- Uploaded files stored in isolated temp directory
- Auto-cleanup after processing
- No persistent storage of user data
- Encrypted session logs
Infrastructure Security
- Docker sandboxing
- Limited resource quotas
- No privilege escalation paths
- Regular dependency updates
π Documentation
- Architecture Design - Deep dive into system design
- Technology Stack - Feature specifications
- User Guide - Step-by-step tutorials
- API Reference - REST endpoints documentation
API Reference
Query Endpoint (Streaming)
# Start async query
POST /api/query/start
Content-Type: application/json
{
"question": "What are the coverage limits?",
"mode": "assistant", // or "expert"
"top_k": 5,
"temperature": 0.7
}
Response:
{
"job_id": "550e8400-e29b-41d4-a716-446655440000"
}
# Stream the response
GET /api/query/stream/{job_id}
# Server sends SSE events:
data: {"chunk": "Coverage limits are..."}
data: {"chunk": " 10 lakhs per..."}
data: {"done": true, "citations": [...]}
Document Upload
POST /api/ingest
Content-Type: multipart/form-data
file: <PDF/DOCX/XLSX/CSV/TXT/Image>
Response:
{
"status": "success",
"message": "Document ingested",
"chunks_created": 245,
"tokens": 12450
}
Admin Endpoints (Hidden)
# View status
GET /api/admin/status
# Purge database
POST /api/admin/purge-db
# View session logs
GET /api/admin/logs
π€ Contributing
We welcome contributions! Here's how:
Development Setup
git clone https://github.com/Sam-max1/nitdaa.git
cd nitdaa
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Start development server with auto-reload
python app.py
Contribution Guidelines
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make changes with clear commit messages
- Add tests for new features
- Run linting:
pylint agents/ pipeline/ - Submit a pull request
Areas We Need Help With
- π¨ Frontend UI improvements
- π Performance benchmarking
- π§ͺ Test coverage expansion
- π Documentation enhancements
- π Localization (multi-language support)
- π Bug fixes and edge case handling
π Known Limitations & Roadmap
Current Limitations
- Vector store capped at 10,000 chunks (HF Spaces resource constraint)
- Generation latency: 5-15s (CPU) to 1-3s (GPU)
- No user authentication (public access)
- Single concurrent user per inference (PyTorch lock)
Roadmap (Coming Soon)
- Multi-user concurrent generation (vLLM integration)
- Fine-tuned domain models
- Advanced analytics dashboard
- Custom prompt templates
- API authentication & usage tracking
- Mobile app (iOS/Android)
- Multilingual support
- Advanced RBAC for enterprise
π Performance Metrics
Benchmarks on HuggingFace Spaces free tier (2vCPU, 16GB RAM):
| Metric | Value | Notes |
|---|---|---|
| Document Ingest | 50-100 MB/min | Chunking + embedding |
| Query Latency | 5-15s (p50) | Including streaming setup |
| Retrieval Precision | 94% | Via Cross-Encoder reranking |
| Concurrent Users | 1-3 | Serialized inference limit |
| Memory Usage | ~8GB | Steady-state |
| Uptime | 99.5% | Over 30 days |
π License
NITDAA is licensed under the MIT License. See LICENSE for details.
π Acknowledgments
NITDAA builds on the shoulders of giants:
- CrewAI - Multi-agent orchestration framework
- LangChain - LLM abstraction layer
- ChromaDB - Vector database
- Kuzu - Graph database
- HuggingFace - Model hub & Spaces platform
- NVIDIA - GPU acceleration support
π¬ Support & Community
- Issues & Bugs - GitHub Issues
- Discussions - GitHub Discussions
- Email - sam.max1@example.com
β Star This Project!
If NITDAA has been helpful to you, please consider giving it a star! β
Why star?
- π Helps the project reach more developers
- π Increases visibility in GitHub search
- π€ Shows community support for open-source AI
- πͺ Motivates continued maintenance and improvements
β Star on GitHub - It takes just 2 clicks and means a lot!
Built with β€οΈ for the AI Community
Live Demo β’ Documentation β’ GitHub
Thanks for using NITDAA! If you found it helpful, consider starring us on GitHub to support open-source AI development. β
