# root-minus-one/gov_support_rag_chatbot architecture

> Architecture diagram of the GitHub repository root-minus-one/gov_support_rag_chatbot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/root-minus-one/gov_support_rag_chatbot
- Repository: https://github.com/root-minus-one/gov_support_rag_chatbot

## Overview

Gov_Support_RAG_Chatbot is a FastAPI chatbot for answering questions about government schemes and policies using retrieved document content. Its principal workflow validates a chat question, loads session history, retrieves and reranks relevant chunks, generates an answer, saves the exchange, and returns citations. A separate ingestion workflow extracts PDF text, tables, and images; embedding makes searchable content available to retrieval. The README also describes multilingual, voice, profile-personalization, status-tracking, and analytics goals, but the sampled runtime does not establish those capabilities. Some links are omitted where implementation was not sampled.

Main entry points: [`app/api/routes.py`](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/api/routes.py) (API routes), [`main.py`](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/main.py) (FastAPI application), [`app/rag/retrieval.py`](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/retrieval.py) (Chunk retrieval), [`app/rag/embeddings.py`](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/embeddings.py) (Embedding pipeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and sessions"]
  node_fastapi["FastAPI application<br/>[main.py]"]
  node_routes["API routes<br/>[routes.py]"]
  node_memory["Conversation memory<br/>[memory.py]"]
end

subgraph group_rag["RAG workflow"]
  node_guardrails["Input and relevance checks<br/>[gaurdrails.py]"]
  node_retrieval["Chunk retrieval<br/>[retrieval.py]"]
  node_hybrid["BM25 search<br/>[hybrid_search.py]"]
  node_embeddings["Embedding pipeline<br/>[embeddings.py]"]
  node_reranker["Result reranking<br/>[reranker.py]"]
  node_generation["Answer generation<br/>[generation.py]"]
end

subgraph group_content["Document processing"]
  node_ingest["PDF ingestion<br/>[ingest.py]"]
end

subgraph group_data["Data services"]
  node_postgres[("PostgreSQL<br/>[postgres.py]")]
  node_mongo[("MongoDB<br/>[mongo.py]")]
  node_pinecone[("Pinecone index")]
end

node_entrepreneur(("Entrepreneur"))
node_pdfs["PDF documents"]

node_entrepreneur -->|"sends requests"| node_fastapi
node_fastapi -->|"dispatches"| node_routes
node_fastapi -->|"initializes pool"| node_postgres
node_fastapi -->|"initializes client"| node_mongo
node_fastapi -->|"builds index"| node_hybrid
node_routes -->|"validates question"| node_guardrails
node_routes -->|"loads and saves"| node_memory
node_routes -->|"requests chunks"| node_retrieval
node_routes -->|"generates answer"| node_generation
node_routes -->|"schedules ingestion"| node_ingest
node_routes -->|"schedules embedding"| node_embeddings
node_routes -->|"reads ingestion log"| node_postgres
node_ingest -->|"converts"| node_pdfs
node_ingest -->|"writes documents, chunks, logs"| node_postgres
node_ingest -->|"writes images and tables"| node_mongo
node_embeddings -->|"reads chunks"| node_postgres
node_embeddings -->|"reads tables"| node_mongo
node_embeddings -->|"upserts vectors"| node_pinecone
node_retrieval -->|"embeds query"| node_embeddings
node_retrieval -->|"queries vectors"| node_pinecone
node_retrieval -->|"searches BM25"| node_hybrid
node_retrieval -->|"reranks fused results"| node_reranker

click node_fastapi "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/main.py"
click node_routes "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/api/routes.py"
click node_guardrails "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/gaurdrails.py"
click node_memory "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/memory.py"
click node_retrieval "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/retrieval.py"
click node_hybrid "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/hybrid_search.py"
click node_embeddings "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/embeddings.py"
click node_reranker "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/reranker.py"
click node_generation "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/generation.py"
click node_ingest "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/ingest.py"
click node_postgres "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/db/postgres.py"
click node_mongo "https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/db/mongo.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_fastapi,node_routes,node_memory toneBlue
class node_guardrails,node_retrieval,node_hybrid,node_embeddings,node_reranker,node_generation toneAmber
class node_ingest toneMint
class node_postgres,node_mongo,node_pinecone toneRose
class node_entrepreneur,node_pdfs toneIndigo
```

## Components

### API and sessions

- [FastAPI application](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/main.py): `main.py`
- [API routes](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/api/routes.py): `app/api/routes.py`
- [Conversation memory](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/memory.py): `app/rag/memory.py`

### RAG workflow

- [Input and relevance checks](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/gaurdrails.py): `app/rag/gaurdrails.py`
- [Chunk retrieval](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/retrieval.py): `app/rag/retrieval.py`
- [BM25 search](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/hybrid_search.py): `app/rag/hybrid_search.py`
- [Embedding pipeline](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/embeddings.py): `app/rag/embeddings.py`
- [Result reranking](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/reranker.py): `app/rag/reranker.py`
- [Answer generation](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/generation.py): `app/rag/generation.py`

### Document processing

- [PDF ingestion](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/rag/ingest.py): `app/rag/ingest.py`

### Data services

- [PostgreSQL](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/db/postgres.py): `app/db/postgres.py`
- [MongoDB](https://github.com/root-minus-one/gov_support_rag_chatbot/blob/main/app/db/mongo.py): `app/db/mongo.py`
- **Pinecone index**

### Other components

- **Entrepreneur**
- **PDF documents**

## Connections

- Entrepreneur → FastAPI application: sends requests
- FastAPI application → API routes: dispatches
- FastAPI application → PostgreSQL: initializes pool
- FastAPI application → MongoDB: initializes client
- FastAPI application → BM25 search: builds index
- API routes → Input and relevance checks: validates question
- API routes → Conversation memory: loads and saves
- API routes → Chunk retrieval: requests chunks
- API routes → Answer generation: generates answer
- API routes → PDF ingestion: schedules ingestion
- API routes → Embedding pipeline: schedules embedding
- API routes → PostgreSQL: reads ingestion log
- PDF ingestion → PDF documents: converts
- PDF ingestion → PostgreSQL: writes documents, chunks, logs
- PDF ingestion → MongoDB: writes images and tables
- Embedding pipeline → PostgreSQL: reads chunks
- Embedding pipeline → MongoDB: reads tables
- Embedding pipeline → Pinecone index: upserts vectors
- Chunk retrieval → Embedding pipeline: embeds query
- Chunk retrieval → Pinecone index: queries vectors
- Chunk retrieval → BM25 search: searches BM25
- Chunk retrieval → Result reranking: reranks fused results
