# padmanavamukhopadhyay/docurag architecture

> Architecture diagram of the GitHub repository padmanavamukhopadhyay/docurag, 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/padmanavamukhopadhyay/docurag
- Repository: https://github.com/padmanavamukhopadhyay/docurag

## Overview

DocuRAG is an interactive Java console RAG application. The user supplies a Gemini key, selects text/PDF documents for ingestion, then asks questions; the app retrieves relevant chunks from a temporary pgvector index, asks Gemini to answer from those excerpts, and appends source/page citations. The graph separates ingestion stages from query-time retrieval and generation. Docker lifecycle and the local embedding model are also shown. The README documents these capabilities; implementation edges are limited to relationships visible in the sampled source.

Main entry points: [`src/main/java/dev/padmanava/docurag/Main.java`](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Main.java) (App orchestration), [`src/main/java/dev/padmanava/docurag/Generation.java`](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Generation.java) (Query retrieval), [`src/main/java/dev/padmanava/docurag/VectorDB.java`](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java) (Embedding and indexing), [`src/main/java/dev/padmanava/docurag/Assistant.java`](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Assistant.java) (Assistant contract)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Console interaction"]
  node_main["App orchestration<br/>[Main.java]"]
end

subgraph group_ingestion["Document ingestion"]
  node_chooser["File selection<br/>[VectorDB.java]"]
  node_parsing["Document parsing<br/>[VectorDB.java]"]
  node_chunking["Chunking and metadata<br/>[VectorDB.java]"]
  node_indexing["Embedding and indexing<br/>[VectorDB.java]"]
end

subgraph group_qa["Question answering"]
  node_generation["Query retrieval<br/>[Generation.java]"]
  node_prompting["Prompt and citations<br/>[Generation.java]"]
  node_assistant["Assistant contract<br/>[Assistant.java]"]
end

subgraph group_runtime["Runtime services"]
  node_embedding["Local embedding model"]
  node_pgvector[("pgvector database")]
  node_gemini["Google Gemini"]
  node_docker["Docker Compose"]
end

node_user(("User"))
node_documents["TXT and PDF files"]

node_user -->|"provides key and questions"| node_main
node_main -->|"starts and stops"| node_docker
node_main -->|"constructs model"| node_embedding
node_main -->|"requests file selection"| node_chooser
node_chooser -->|"selects"| node_documents
node_main -->|"ingests selected files"| node_parsing
node_parsing -->|"passes parsed documents"| node_chunking
node_chunking -->|"passes text segments"| node_indexing
node_indexing -->|"embeds segments"| node_embedding
node_indexing -->|"stores vectors and segments"| node_pgvector
node_main -->|"asks question"| node_generation
node_generation -->|"embeds query"| node_embedding
node_generation -->|"searches similar chunks"| node_pgvector
node_generation -->|"passes retrieved matches"| node_prompting
node_prompting -->|"calls answer"| node_assistant
node_assistant -->|"answers prompt"| node_gemini
node_prompting -->|"returns answer and citations"| node_main

click node_main "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Main.java"
click node_chooser "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java"
click node_parsing "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java"
click node_chunking "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java"
click node_indexing "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java"
click node_generation "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Generation.java"
click node_prompting "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Generation.java"
click node_assistant "https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Assistant.java"

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_main,node_user toneBlue
class node_chooser,node_parsing,node_chunking,node_indexing toneAmber
class node_generation,node_prompting,node_assistant toneMint
class node_embedding,node_pgvector,node_gemini,node_docker toneRose
class node_documents toneIndigo
```

## Components

### Console interaction

- [App orchestration](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Main.java): `src/main/java/dev/padmanava/docurag/Main.java`

### Document ingestion

- [File selection](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java): `src/main/java/dev/padmanava/docurag/VectorDB.java`
- [Document parsing](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java): `src/main/java/dev/padmanava/docurag/VectorDB.java`
- [Chunking and metadata](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java): `src/main/java/dev/padmanava/docurag/VectorDB.java`
- [Embedding and indexing](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/VectorDB.java): `src/main/java/dev/padmanava/docurag/VectorDB.java`

### Question answering

- [Query retrieval](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Generation.java): `src/main/java/dev/padmanava/docurag/Generation.java`
- [Prompt and citations](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Generation.java): `src/main/java/dev/padmanava/docurag/Generation.java`
- [Assistant contract](https://github.com/padmanavamukhopadhyay/docurag/blob/main/src/main/java/dev/padmanava/docurag/Assistant.java): `src/main/java/dev/padmanava/docurag/Assistant.java`

### Runtime services

- **Local embedding model**
- **pgvector database**
- **Google Gemini**
- **Docker Compose**

### Other components

- **User**
- **TXT and PDF files**

## Connections

- User → App orchestration: provides key and questions (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- App orchestration → Docker Compose: starts and stops (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- App orchestration → Local embedding model: constructs model (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- App orchestration → File selection: requests file selection (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- File selection → TXT and PDF files: selects (evidence: `src/main/java/dev/padmanava/docurag/VectorDB.java`)
- App orchestration → Document parsing: ingests selected files (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- Document parsing → Chunking and metadata: passes parsed documents (evidence: `src/main/java/dev/padmanava/docurag/VectorDB.java`)
- Chunking and metadata → Embedding and indexing: passes text segments (evidence: `src/main/java/dev/padmanava/docurag/VectorDB.java`)
- Embedding and indexing → Local embedding model: embeds segments (evidence: `src/main/java/dev/padmanava/docurag/VectorDB.java`)
- Embedding and indexing → pgvector database: stores vectors and segments (evidence: `src/main/java/dev/padmanava/docurag/VectorDB.java`)
- App orchestration → Query retrieval: asks question (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
- Query retrieval → Local embedding model: embeds query (evidence: `src/main/java/dev/padmanava/docurag/Generation.java`)
- Query retrieval → pgvector database: searches similar chunks (evidence: `src/main/java/dev/padmanava/docurag/Generation.java`)
- Query retrieval → Prompt and citations: passes retrieved matches (evidence: `src/main/java/dev/padmanava/docurag/Generation.java`)
- Prompt and citations → Assistant contract: calls answer (evidence: `src/main/java/dev/padmanava/docurag/Generation.java`)
- Assistant contract → Google Gemini: answers prompt
- Prompt and citations → App orchestration: returns answer and citations (evidence: `src/main/java/dev/padmanava/docurag/Main.java`)
