# uzaam07/documind-rag-qa-chatbot architecture

> Architecture diagram of the GitHub repository uzaam07/documind-rag-qa-chatbot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/uzaam07/documind-rag-qa-chatbot
- Repository: https://github.com/uzaam07/documind-rag-qa-chatbot

## Overview

DocuMind lets users upload and manage documents, then ask questions and receive streamed, cited answers grounded in their files. The workflow runs from the React interface through FastAPI endpoints into document ingestion or RAG orchestration. Ingestion parses, chunks, embeds, and indexes documents; question answering retrieves and combines passages before invoking an LLM. The README documents capabilities beyond the sampled code, including document formats, retrieval modes, observability, and conversation tools. Some subsystem links rely on README or source-index references rather than inspected implementations.

Main entry points: [`backend/app/main.py`](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/main.py) (FastAPI application), [`backend/app/services/ingest.py`](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/ingest.py) (Ingestion pipeline), [`frontend/src/App.jsx`](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/App.jsx) (App routing), [`backend/app/services/rag.py`](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/rag.py) (RAG orchestration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["User experience"]
  node_app["App routing<br/>[App.jsx]"]
  node_chat_ui["Chat interface<br/>[Chat.jsx]"]
  node_documents_ui["Document management<br/>[Documents.jsx]"]
  node_stats_ui["Statistics dashboard<br/>[Stats.jsx]"]
  node_chat_state["Conversation state<br/>[useConversation.js]"]
  node_document_state["Document state<br/>[useDocuments.js]"]
  node_api_client["API client<br/>[client.js]"]
end

subgraph group_api["Application API"]
  node_api_app["FastAPI application<br/>[main.py]"]
  node_auth["Authentication<br/>[auth.py]"]
  node_chat_api["Chat and sessions<br/>[chat.py]"]
  node_documents_api["Document endpoints<br/>[documents.py]"]
  node_stats_api["Statistics endpoints<br/>[stats.py]"]
end

subgraph group_ingestion["Document ingestion"]
  node_ingest["Ingestion pipeline<br/>[ingest.py]"]
  node_parsing["Document parsing<br/>[parsing.py]"]
  node_chunking["Text chunking<br/>[chunking.py]"]
  node_embeddings["Embedding generation<br/>[embeddings.py]"]
end

subgraph group_retrieval["Question answering"]
  node_rag["RAG orchestration<br/>[rag.py]"]
  node_retrieval_service["Hybrid retrieval<br/>[retrieval.py]"]
  node_bm25["BM25 index<br/>[bm25_index.py]"]
  node_llm["LLM services<br/>[llm.py]"]
end

subgraph group_storage["Persistence and models"]
  node_vectorstore[("Vector store<br/>[vectorstore.py]")]
  node_cache[("Answer and embedding cache<br/>[cache.py]")]
  node_db[("Relational database<br/>[db.py]")]
  node_models["Domain records<br/>[models.py]"]
end

node_user(("User"))
node_gemini{{"Google Gemini"}}

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_chat_ui
node_app -->|"routes to"| node_documents_ui
node_app -->|"routes to"| node_stats_ui
node_chat_ui -->|"uses"| node_chat_state
node_chat_ui -->|"requests"| node_api_client
node_documents_ui -.->|"uses"| node_document_state
node_document_state -->|"requests"| node_api_client
node_stats_ui -->|"requests"| node_api_client
node_api_client -->|"sends API requests"| node_api_app
node_api_app -->|"registers router"| node_auth
node_api_app -->|"registers router"| node_chat_api
node_api_app -->|"registers router"| node_documents_api
node_api_app -->|"registers router"| node_stats_api
node_chat_api -->|"calls"| node_rag
node_documents_api -.->|"dispatches ingestion"| node_ingest
node_ingest -->|"extracts text"| node_parsing
node_ingest -->|"creates chunks"| node_chunking
node_ingest -->|"generates vectors"| node_embeddings
node_ingest -->|"indexes chunks"| node_vectorstore
node_rag -->|"retrieves passages"| node_retrieval_service
node_rag -->|"rewrites and answers"| node_llm
node_rag -->|"checks answers"| node_cache
node_retrieval_service -->|"searches vectors"| node_vectorstore
node_retrieval_service -->|"searches keywords"| node_bm25
node_retrieval_service -->|"reranks passages"| node_llm
node_embeddings -->|"reuses embeddings"| node_cache
node_llm -.->|"generates responses"| node_gemini
node_api_app -->|"initializes"| node_db
node_db -->|"creates tables"| node_models

click node_app "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/App.jsx"
click node_chat_ui "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Chat.jsx"
click node_documents_ui "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Documents.jsx"
click node_stats_ui "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Stats.jsx"
click node_chat_state "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/state/useConversation.js"
click node_document_state "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/state/useDocuments.js"
click node_api_client "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/api/client.js"
click node_api_app "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/main.py"
click node_auth "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/auth.py"
click node_chat_api "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/chat.py"
click node_documents_api "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/documents.py"
click node_stats_api "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/stats.py"
click node_ingest "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/ingest.py"
click node_parsing "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/parsing.py"
click node_chunking "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/chunking.py"
click node_embeddings "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/embeddings.py"
click node_rag "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/rag.py"
click node_retrieval_service "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/retrieval.py"
click node_bm25 "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/bm25_index.py"
click node_llm "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/llm.py"
click node_vectorstore "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/vectorstore.py"
click node_cache "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/cache.py"
click node_db "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/db.py"
click node_models "https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/models.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_chat_ui,node_documents_ui,node_stats_ui,node_chat_state,node_document_state,node_api_client,node_user toneBlue
class node_api_app,node_auth,node_chat_api,node_documents_api,node_stats_api toneAmber
class node_ingest,node_parsing,node_chunking,node_embeddings toneMint
class node_rag,node_retrieval_service,node_bm25,node_llm toneRose
class node_vectorstore,node_cache,node_db,node_models,node_gemini toneIndigo
```

## Components

### User experience

- [App routing](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Chat interface](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Chat.jsx): `frontend/src/pages/Chat.jsx`
- [Document management](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Documents.jsx): `frontend/src/pages/Documents.jsx`
- [Statistics dashboard](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/pages/Stats.jsx): `frontend/src/pages/Stats.jsx`
- [Conversation state](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/state/useConversation.js): `frontend/src/state/useConversation.js`
- [Document state](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/state/useDocuments.js): `frontend/src/state/useDocuments.js`
- [API client](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### Application API

- [FastAPI application](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/main.py): `backend/app/main.py`
- [Authentication](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/auth.py): `backend/app/routers/auth.py`
- [Chat and sessions](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/chat.py): `backend/app/routers/chat.py`
- [Document endpoints](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/documents.py): `backend/app/routers/documents.py`
- [Statistics endpoints](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/routers/stats.py): `backend/app/routers/stats.py`

### Document ingestion

- [Ingestion pipeline](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/ingest.py): `backend/app/services/ingest.py`
- [Document parsing](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/parsing.py): `backend/app/services/parsing.py`
- [Text chunking](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/chunking.py): `backend/app/services/chunking.py`
- [Embedding generation](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/embeddings.py): `backend/app/services/embeddings.py`

### Question answering

- [RAG orchestration](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/rag.py): `backend/app/services/rag.py`
- [Hybrid retrieval](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/retrieval.py): `backend/app/services/retrieval.py`
- [BM25 index](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/bm25_index.py): `backend/app/services/bm25_index.py`
- [LLM services](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/llm.py): `backend/app/services/llm.py`

### Persistence and models

- [Vector store](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/vectorstore.py): `backend/app/services/vectorstore.py`
- [Answer and embedding cache](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/services/cache.py): `backend/app/services/cache.py`
- [Relational database](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/db.py): `backend/app/db.py`
- [Domain records](https://github.com/uzaam07/documind-rag-qa-chatbot/blob/main/backend/app/models.py): `backend/app/models.py`

### Other components

- **User**
- **Google Gemini**

## Connections

- User → App routing: uses (evidence: `frontend/src/App.jsx`)
- App routing → Chat interface: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Document management: routes to (evidence: `frontend/src/App.jsx`)
- App routing → Statistics dashboard: routes to (evidence: `frontend/src/App.jsx`)
- Chat interface → Conversation state: uses (evidence: `frontend/src/pages/Chat.jsx`)
- Chat interface → API client: requests (evidence: `frontend/src/pages/Chat.jsx`)
- Document management → Document state: uses
- Document state → API client: requests (evidence: `frontend/src/state/useDocuments.js`)
- Statistics dashboard → API client: requests (evidence: `frontend/src/pages/Stats.jsx`)
- API client → FastAPI application: sends API requests (evidence: `README.md`)
- FastAPI application → Authentication: registers router (evidence: `backend/app/main.py`)
- FastAPI application → Chat and sessions: registers router (evidence: `backend/app/main.py`)
- FastAPI application → Document endpoints: registers router (evidence: `backend/app/main.py`)
- FastAPI application → Statistics endpoints: registers router (evidence: `backend/app/main.py`)
- Chat and sessions → RAG orchestration: calls (evidence: `backend/app/routers/chat.py`)
- Document endpoints → Ingestion pipeline: dispatches ingestion
- Ingestion pipeline → Document parsing: extracts text (evidence: `backend/app/services/ingest.py`)
- Ingestion pipeline → Text chunking: creates chunks (evidence: `backend/app/services/ingest.py`)
- Ingestion pipeline → Embedding generation: generates vectors (evidence: `backend/app/services/ingest.py`)
- Ingestion pipeline → Vector store: indexes chunks (evidence: `backend/app/services/ingest.py`)
- RAG orchestration → Hybrid retrieval: retrieves passages (evidence: `backend/app/services/rag.py`)
- RAG orchestration → LLM services: rewrites and answers (evidence: `backend/app/services/rag.py`)
- RAG orchestration → Answer and embedding cache: checks answers (evidence: `backend/app/services/rag.py`)
- Hybrid retrieval → Vector store: searches vectors (evidence: `backend/app/services/retrieval.py`)
- Hybrid retrieval → BM25 index: searches keywords (evidence: `backend/app/services/retrieval.py`)
- Hybrid retrieval → LLM services: reranks passages (evidence: `backend/app/services/retrieval.py`)
- Embedding generation → Answer and embedding cache: reuses embeddings (evidence: `backend/app/services/embeddings.py`)
- LLM services → Google Gemini: generates responses (evidence: `README.md`)
- FastAPI application → Relational database: initializes (evidence: `backend/app/main.py`)
- Relational database → Domain records: creates tables (evidence: `backend/app/db.py`)
