# ishanjais01io/ragcorp architecture

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

## Overview

RAGCorp ingests PDF files into a persistent chunk index, then serves chat queries by retrieving indexed text and generating grounded answers. Its ingestion stages include page extraction/OCR, hierarchical chunking, embedding and index persistence, plus manifest tracking and index synchronization. The tree also contains separate routing, retrieval, reranking, groundedness, and generation components, but excerpts do not establish how these are wired into the serving path. The graph shows only relationships visible in excerpts or the source index.

Main entry points: [`ingestion/run_ingestion.py`](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py) (Ingestion pipeline), [`serving/generation.py`](https://github.com/ishanjais01io/ragcorp/blob/main/serving/generation.py) (Retrieval and answer functions), [`shared/config.py`](https://github.com/ishanjais01io/ragcorp/blob/main/shared/config.py) (Runtime configuration), [`ingestion/chunker.py`](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/chunker.py) (Hierarchical chunker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingestion["Document ingestion"]
  node_ingestion_pipeline["Ingestion pipeline<br/>[run_ingestion.py]"]
  node_page_extractor["PDF page extractor<br/>[extractors.py]"]
  node_chunker["Hierarchical chunker<br/>[chunker.py]"]
  node_embedding["Text embedding<br/>[run_ingestion.py]"]
  node_index[("Chroma index<br/>[run_ingestion.py]")]
  node_manifest["Ingestion manifest<br/>[run_ingestion.py]"]
end

subgraph group_serving["Chat serving"]
  node_chat_app["Gradio chat app<br/>[app.py]"]
  node_query_generation["Retrieval and answer functions<br/>[generation.py]"]
  node_generator["Groq generator<br/>[generator.py]"]
end

subgraph group_retrieval["Retrieval components"]
  node_retriever["Retriever<br/>[retriever.py]"]
  node_intent_router["Query intent router<br/>[router.py]"]
  node_reranker["Fusion reranker<br/>[reranker.py]"]
  node_groundedness["Groundedness checks<br/>[groundedness.py]"]
end

subgraph group_shared["Shared models"]
  node_schemas["Ingestion data models<br/>[schema.py]"]
  node_config["Runtime configuration<br/>[config.py]"]
end

node_user(("Chat user"))
node_hf_dataset[("Hugging Face dataset")]
node_groq{{"Groq API"}}

node_user -->|"asks question"| node_chat_app
node_chat_app -->|"calls retrieval and generation"| node_query_generation
node_query_generation -->|"queries chunks"| node_index
node_query_generation -->|"requests completion"| node_groq
node_ingestion_pipeline -->|"processes pages"| node_page_extractor
node_ingestion_pipeline -->|"chunks extracted text"| node_chunker
node_chunker -->|"creates chunks"| node_schemas
node_ingestion_pipeline -->|"loads manifest"| node_schemas
node_ingestion_pipeline -->|"reads settings"| node_config
node_ingestion_pipeline -->|"encodes chunk text"| node_embedding
node_ingestion_pipeline -->|"adds embeddings"| node_index
node_ingestion_pipeline -->|"saves progress"| node_manifest
node_ingestion_pipeline -->|"uploads index folder"| node_hf_dataset
node_reranker -->|"reads model setting"| node_config
node_generator -->|"reads model setting"| node_config

click node_ingestion_pipeline "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py"
click node_page_extractor "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/extractors.py"
click node_chunker "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/chunker.py"
click node_embedding "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py"
click node_index "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py"
click node_manifest "https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py"
click node_chat_app "https://github.com/ishanjais01io/ragcorp/blob/main/serving/app.py"
click node_query_generation "https://github.com/ishanjais01io/ragcorp/blob/main/serving/generation.py"
click node_retriever "https://github.com/ishanjais01io/ragcorp/blob/main/serving/retriever.py"
click node_intent_router "https://github.com/ishanjais01io/ragcorp/blob/main/serving/router.py"
click node_reranker "https://github.com/ishanjais01io/ragcorp/blob/main/serving/reranker.py"
click node_groundedness "https://github.com/ishanjais01io/ragcorp/blob/main/serving/groundedness.py"
click node_generator "https://github.com/ishanjais01io/ragcorp/blob/main/serving/generator.py"
click node_schemas "https://github.com/ishanjais01io/ragcorp/blob/main/shared/schema.py"
click node_config "https://github.com/ishanjais01io/ragcorp/blob/main/shared/config.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_ingestion_pipeline,node_page_extractor,node_chunker,node_embedding,node_index,node_manifest,node_user toneBlue
class node_chat_app,node_query_generation,node_generator,node_hf_dataset toneAmber
class node_retriever,node_intent_router,node_reranker,node_groundedness,node_groq toneMint
class node_schemas,node_config toneRose
```

## Components

### Document ingestion

- [Ingestion pipeline](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py): `ingestion/run_ingestion.py`
- [PDF page extractor](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/extractors.py): `ingestion/extractors.py`
- [Hierarchical chunker](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/chunker.py): `ingestion/chunker.py`
- [Text embedding](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py): `ingestion/run_ingestion.py`
- [Chroma index](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py): `ingestion/run_ingestion.py`
- [Ingestion manifest](https://github.com/ishanjais01io/ragcorp/blob/main/ingestion/run_ingestion.py): `ingestion/run_ingestion.py`

### Chat serving

- [Gradio chat app](https://github.com/ishanjais01io/ragcorp/blob/main/serving/app.py): `serving/app.py`
- [Retrieval and answer functions](https://github.com/ishanjais01io/ragcorp/blob/main/serving/generation.py): `serving/generation.py`
- [Groq generator](https://github.com/ishanjais01io/ragcorp/blob/main/serving/generator.py): `serving/generator.py`

### Retrieval components

- [Retriever](https://github.com/ishanjais01io/ragcorp/blob/main/serving/retriever.py): `serving/retriever.py`
- [Query intent router](https://github.com/ishanjais01io/ragcorp/blob/main/serving/router.py): `serving/router.py`
- [Fusion reranker](https://github.com/ishanjais01io/ragcorp/blob/main/serving/reranker.py): `serving/reranker.py`
- [Groundedness checks](https://github.com/ishanjais01io/ragcorp/blob/main/serving/groundedness.py): `serving/groundedness.py`

### Shared models

- [Ingestion data models](https://github.com/ishanjais01io/ragcorp/blob/main/shared/schema.py): `shared/schema.py`
- [Runtime configuration](https://github.com/ishanjais01io/ragcorp/blob/main/shared/config.py): `shared/config.py`

### Other components

- **Chat user**
- **Hugging Face dataset**
- **Groq API**

## Connections

- Chat user → Gradio chat app: asks question (evidence: `serving/app.py`)
- Gradio chat app → Retrieval and answer functions: calls retrieval and generation (evidence: `serving/app.py`)
- Retrieval and answer functions → Chroma index: queries chunks (evidence: `serving/generation.py`)
- Retrieval and answer functions → Groq API: requests completion (evidence: `serving/generation.py`)
- Ingestion pipeline → PDF page extractor: processes pages (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Hierarchical chunker: chunks extracted text (evidence: `ingestion/run_ingestion.py`)
- Hierarchical chunker → Ingestion data models: creates chunks (evidence: `ingestion/chunker.py`)
- Ingestion pipeline → Ingestion data models: loads manifest (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Runtime configuration: reads settings (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Text embedding: encodes chunk text (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Chroma index: adds embeddings (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Ingestion manifest: saves progress (evidence: `ingestion/run_ingestion.py`)
- Ingestion pipeline → Hugging Face dataset: uploads index folder (evidence: `ingestion/run_ingestion.py`)
- Fusion reranker → Runtime configuration: reads model setting (evidence: `serving/reranker.py`)
- Groq generator → Runtime configuration: reads model setting (evidence: `serving/generator.py`)
