# salah-ud-din01/rag-docs-assistant architecture

> Architecture diagram of the GitHub repository salah-ud-din01/rag-docs-assistant, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/salah-ud-din01/rag-docs-assistant
- Repository: https://github.com/salah-ud-din01/rag-docs-assistant

## Overview

RAG Docs Assistant indexes local Markdown/PDF documents, then answers questions by retrieving relevant chunks and generating responses constrained to that context, with document/section citations. The primary user flow is Streamlit → FastAPI → retrieval and answer generation; a separate ingest action loads, chunks, and indexes documents. The README also documents fully local Ollama inference and Chroma storage. Edges are based on the shown callers and README; the HTTP deployment wiring is documented, while unsampled container configuration is not modeled.

Main entry points: [`app/main.py`](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/main.py) (FastAPI endpoints), [`app/rag.py`](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/rag.py) (Answer orchestration), [`app/ingest.py`](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/ingest.py) (Document loading), [`app/vectorstore.py`](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py) (Chroma vector store)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_ui["Streamlit chat<br/>[streamlit_app.py]"]
end

subgraph group_api["API orchestration"]
  node_api["FastAPI endpoints<br/>[main.py]"]
  node_schemas["API schemas<br/>[schemas.py]"]
  node_settings["Application settings<br/>[config.py]"]
end

subgraph group_indexing["Document indexing"]
  node_corpus["Local document corpus"]
  node_loader["Document loading<br/>[ingest.py]"]
  node_chunker["Section chunking<br/>[ingest.py]"]
  node_indexer["Index chunks<br/>[vectorstore.py]"]
end

subgraph group_answering["Retrieval and answers"]
  node_store[("Chroma vector store<br/>[vectorstore.py]")]
  node_embeddings["Embedding model"]
  node_retrieval["Semantic search<br/>[vectorstore.py]"]
  node_rag["Answer orchestration<br/>[rag.py]"]
  node_llm["Chat model"]
  node_citations["Answer and citations<br/>[rag.py]"]
end

node_user(("User"))

node_user -->|"asks or indexes"| node_ui
node_ui -->|"calls HTTP API"| node_api
node_api -->|"validates responses"| node_schemas
node_api -->|"loads documents"| node_loader
node_corpus -->|"reads files"| node_loader
node_api -->|"splits sections"| node_chunker
node_api -->|"indexes chunks"| node_indexer
node_indexer -->|"writes chunks"| node_store
node_api -->|"answers question"| node_rag
node_rag -->|"searches chunks"| node_retrieval
node_retrieval -->|"queries vectors"| node_store
node_store -.->|"embeds queries"| node_embeddings
node_rag -->|"generates answer"| node_llm
node_rag -->|"formats sources"| node_citations
node_api -->|"reads configuration"| node_settings
node_loader -->|"uses document settings"| node_settings
node_rag -->|"uses model settings"| node_settings

click node_ui "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/ui/streamlit_app.py"
click node_api "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/main.py"
click node_schemas "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/schemas.py"
click node_settings "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/config.py"
click node_corpus "https://github.com/salah-ud-din01/rag-docs-assistant/tree/main/data/docs"
click node_loader "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/ingest.py"
click node_chunker "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/ingest.py"
click node_indexer "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py"
click node_store "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py"
click node_retrieval "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py"
click node_rag "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/rag.py"
click node_citations "https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/rag.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_ui,node_user toneBlue
class node_api,node_schemas,node_settings toneAmber
class node_corpus,node_loader,node_chunker,node_indexer toneMint
class node_store,node_embeddings,node_retrieval,node_rag,node_llm,node_citations toneRose
```

## Components

### User interface

- [Streamlit chat](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/ui/streamlit_app.py): `ui/streamlit_app.py`

### API orchestration

- [FastAPI endpoints](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/main.py): `app/main.py`
- [API schemas](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/schemas.py): `app/schemas.py`
- [Application settings](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/config.py): `app/config.py`

### Document indexing

- [Local document corpus](https://github.com/salah-ud-din01/rag-docs-assistant/tree/main/data/docs): `data/docs`
- [Document loading](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/ingest.py): `app/ingest.py`
- [Section chunking](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/ingest.py): `app/ingest.py`
- [Index chunks](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py): `app/vectorstore.py`

### Retrieval and answers

- [Chroma vector store](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py): `app/vectorstore.py`
- **Embedding model**
- [Semantic search](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/vectorstore.py): `app/vectorstore.py`
- [Answer orchestration](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/rag.py): `app/rag.py`
- **Chat model**
- [Answer and citations](https://github.com/salah-ud-din01/rag-docs-assistant/blob/main/app/rag.py): `app/rag.py`

### Other components

- **User**

## Connections

- User → Streamlit chat: asks or indexes (evidence: `ui/streamlit_app.py`)
- Streamlit chat → FastAPI endpoints: calls HTTP API (evidence: `ui/streamlit_app.py`)
- FastAPI endpoints → API schemas: validates responses (evidence: `app/main.py`)
- FastAPI endpoints → Document loading: loads documents (evidence: `app/main.py`)
- Local document corpus → Document loading: reads files (evidence: `app/ingest.py`)
- FastAPI endpoints → Section chunking: splits sections (evidence: `app/main.py`)
- FastAPI endpoints → Index chunks: indexes chunks (evidence: `app/main.py`)
- Index chunks → Chroma vector store: writes chunks (evidence: `app/vectorstore.py`)
- FastAPI endpoints → Answer orchestration: answers question (evidence: `app/main.py`)
- Answer orchestration → Semantic search: searches chunks (evidence: `app/rag.py`)
- Semantic search → Chroma vector store: queries vectors (evidence: `app/vectorstore.py`)
- Chroma vector store → Embedding model: embeds queries
- Answer orchestration → Chat model: generates answer (evidence: `app/rag.py`)
- Answer orchestration → Answer and citations: formats sources (evidence: `app/rag.py`)
- FastAPI endpoints → Application settings: reads configuration (evidence: `app/main.py`)
- Document loading → Application settings: uses document settings (evidence: `app/ingest.py`)
- Answer orchestration → Application settings: uses model settings (evidence: `app/rag.py`)
