# sachin-prasad-29/ai-document-assistant architecture

> Architecture diagram of the GitHub repository sachin-prasad-29/ai-document-assistant, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sachin-prasad-29/ai-document-assistant
- Repository: https://github.com/sachin-prasad-29/ai-document-assistant

## Overview

AI Document Assistant is a FastAPI backend for authenticated document management and question answering. Users upload files or submit text; the backend stores document records, extracts and chunks content, and indexes it for semantic search. Users can then list, retrieve, summarize, or ask questions about documents; agent tools provide retrieval and gated deletion. The graph captures routes and service calls visible in excerpts and the source index. Chat-to-agent dispatch is not shown in the available chat excerpt, so that connection is omitted.

Main entry points: [`backend/app/api/documents.py`](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/api/documents.py) (Document routes), [`backend/app/services/vector_store.py`](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/vector_store.py) (Vector search), [`backend/app/db/crud.py`](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/crud.py) (Document CRUD), [`backend/app/agent/tools.py`](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/tools.py) (Document tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and identity"]
  node_app["FastAPI application<br/>[main.py]"]
  node_doc_api["Document routes<br/>[documents.py]"]
  node_chat_api["Chat routes<br/>[chat.py]"]
  node_auth["JWT authorization<br/>[auth.py]"]
  node_config["Runtime settings<br/>[config.py]"]
  node_schemas["API schemas<br/>[schemas.py]"]
end

subgraph group_documents["Document processing"]
  node_ingestion["Document ingestion<br/>[ingestion.py]"]
  node_document_service["Document lifecycle<br/>[documents.py]"]
  node_summarizer["Document summaries<br/>[summarizer.py]"]
end

subgraph group_assistant["AI assistant"]
  node_agent["Agent orchestration<br/>[agent.py]"]
  node_prompts["Agent prompts<br/>[prompts.py]"]
  node_tools["Document tools<br/>[tools.py]"]
  node_vector_service["Vector search<br/>[vector_store.py]"]
end

subgraph group_storage["Persistence"]
  node_crud["Document CRUD<br/>[crud.py]"]
  node_models["Document model<br/>[models.py]"]
  node_database[("SQLite database<br/>[database.py]")]
  node_chroma[("Chroma index<br/>[vector_store.py]")]
end

node_user(("Client user"))
node_embedding_provider{{"NVIDIA embeddings"}}
node_llm_provider{{"Google Gemini"}}
node_supabase{{"Supabase JWKS"}}

node_user -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_doc_api
node_app -->|"mounts routes"| node_chat_api
node_app -->|"builds at startup"| node_agent
node_doc_api -->|"checks identity"| node_auth
node_auth -->|"fetches signing keys"| node_supabase
node_doc_api -->|"creates and queries"| node_crud
node_doc_api -->|"ingests documents"| node_ingestion
node_doc_api -->|"requests summaries"| node_summarizer
node_doc_api -->|"deletes documents"| node_document_service
node_doc_api -->|"validates responses"| node_schemas
node_ingestion -->|"loads and updates records"| node_crud
node_ingestion -->|"indexes chunks"| node_vector_service
node_document_service -->|"removes indexed chunks"| node_vector_service
node_summarizer -->|"reads and caches summary"| node_crud
node_summarizer -->|"generates summary"| node_llm_provider
node_agent -->|"uses prompts"| node_prompts
node_agent -->|"registers tools"| node_tools
node_tools -->|"lists and retrieves"| node_crud
node_tools -->|"searches passages"| node_vector_service
node_tools -->|"requests summaries"| node_summarizer
node_tools -->|"deletes with approval"| node_document_service
node_vector_service -->|"embeds text"| node_embedding_provider
node_vector_service -->|"stores and searches"| node_chroma
node_crud -->|"queries model"| node_models
node_crud -->|"persists records"| node_database
node_database -->|"reads data directory"| node_config
node_ingestion -->|"reads chunk settings"| node_config
node_vector_service -->|"reads index settings"| node_config
node_summarizer -->|"reads model setting"| node_config

click node_app "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/main.py"
click node_doc_api "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/api/documents.py"
click node_chat_api "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/api/chat.py"
click node_auth "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/auth.py"
click node_config "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/config.py"
click node_schemas "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/schemas.py"
click node_ingestion "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/ingestion.py"
click node_document_service "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/documents.py"
click node_summarizer "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/summarizer.py"
click node_agent "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/agent.py"
click node_prompts "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/prompts.py"
click node_tools "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/tools.py"
click node_vector_service "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/vector_store.py"
click node_crud "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/crud.py"
click node_models "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/models.py"
click node_database "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/database.py"
click node_chroma "https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/vector_store.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_doc_api,node_chat_api,node_auth,node_config,node_schemas,node_user toneBlue
class node_ingestion,node_document_service,node_summarizer toneAmber
class node_agent,node_prompts,node_tools,node_vector_service toneMint
class node_crud,node_models,node_database,node_chroma toneRose
class node_embedding_provider,node_llm_provider,node_supabase toneIndigo
```

## Components

### API and identity

- [FastAPI application](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/main.py): `backend/app/main.py`
- [Document routes](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/api/documents.py): `backend/app/api/documents.py`
- [Chat routes](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/api/chat.py): `backend/app/api/chat.py`
- [JWT authorization](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/auth.py): `backend/app/auth.py`
- [Runtime settings](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/config.py): `backend/app/config.py`
- [API schemas](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/schemas.py): `backend/app/schemas.py`

### Document processing

- [Document ingestion](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/ingestion.py): `backend/app/services/ingestion.py`
- [Document lifecycle](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/documents.py): `backend/app/services/documents.py`
- [Document summaries](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/summarizer.py): `backend/app/services/summarizer.py`

### AI assistant

- [Agent orchestration](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/agent.py): `backend/app/agent/agent.py`
- [Agent prompts](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/prompts.py): `backend/app/agent/prompts.py`
- [Document tools](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/agent/tools.py): `backend/app/agent/tools.py`
- [Vector search](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/vector_store.py): `backend/app/services/vector_store.py`

### Persistence

- [Document CRUD](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/crud.py): `backend/app/db/crud.py`
- [Document model](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/models.py): `backend/app/db/models.py`
- [SQLite database](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/db/database.py): `backend/app/db/database.py`
- [Chroma index](https://github.com/sachin-prasad-29/ai-document-assistant/blob/master/backend/app/services/vector_store.py): `backend/app/services/vector_store.py`

### Other components

- **Client user**
- **NVIDIA embeddings**
- **Google Gemini**
- **Supabase JWKS**

## Connections

- Client user → FastAPI application: sends requests (evidence: `backend/app/main.py`)
- FastAPI application → Document routes: mounts routes (evidence: `backend/app/main.py`)
- FastAPI application → Chat routes: mounts routes (evidence: `backend/app/main.py`)
- FastAPI application → Agent orchestration: builds at startup (evidence: `backend/app/main.py`)
- Document routes → JWT authorization: checks identity (evidence: `backend/app/api/documents.py`)
- JWT authorization → Supabase JWKS: fetches signing keys (evidence: `backend/app/auth.py`)
- Document routes → Document CRUD: creates and queries (evidence: `backend/app/api/documents.py`)
- Document routes → Document ingestion: ingests documents (evidence: `backend/app/api/documents.py`)
- Document routes → Document summaries: requests summaries (evidence: `backend/app/api/documents.py`)
- Document routes → Document lifecycle: deletes documents (evidence: `backend/app/api/documents.py`)
- Document routes → API schemas: validates responses (evidence: `backend/app/api/documents.py`)
- Document ingestion → Document CRUD: loads and updates records (evidence: `backend/app/services/ingestion.py`)
- Document ingestion → Vector search: indexes chunks (evidence: `backend/app/services/ingestion.py`)
- Document lifecycle → Vector search: removes indexed chunks (evidence: `backend/app/services/documents.py`)
- Document summaries → Document CRUD: reads and caches summary (evidence: `backend/app/services/summarizer.py`)
- Document summaries → Google Gemini: generates summary (evidence: `backend/app/services/summarizer.py`)
- Agent orchestration → Agent prompts: uses prompts (evidence: `backend/app/agent/agent.py`)
- Agent orchestration → Document tools: registers tools (evidence: `backend/app/agent/agent.py`)
- Document tools → Document CRUD: lists and retrieves (evidence: `backend/app/agent/tools.py`)
- Document tools → Vector search: searches passages (evidence: `backend/app/agent/tools.py`)
- Document tools → Document summaries: requests summaries (evidence: `backend/app/agent/tools.py`)
- Document tools → Document lifecycle: deletes with approval (evidence: `backend/app/agent/tools.py`)
- Vector search → NVIDIA embeddings: embeds text (evidence: `backend/app/services/vector_store.py`)
- Vector search → Chroma index: stores and searches (evidence: `backend/app/services/vector_store.py`)
- Document CRUD → Document model: queries model (evidence: `backend/app/db/crud.py`)
- Document CRUD → SQLite database: persists records (evidence: `backend/app/db/crud.py`)
- SQLite database → Runtime settings: reads data directory (evidence: `backend/app/db/database.py`)
- Document ingestion → Runtime settings: reads chunk settings (evidence: `backend/app/services/ingestion.py`)
- Vector search → Runtime settings: reads index settings (evidence: `backend/app/services/vector_store.py`)
- Document summaries → Runtime settings: reads model setting (evidence: `backend/app/services/summarizer.py`)
