# ifsaurabh/rag-humanitarian-risk-analysis-india architecture

> Architecture diagram of the GitHub repository ifsaurabh/rag-humanitarian-risk-analysis-india, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ifsaurabh/rag-humanitarian-risk-analysis-india
- Repository: https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india

## Overview

This is a question-answering RAG application for Indian food-price and state-level poverty data. The user submits a natural-language question to the FastAPI `/ask` endpoint; the app embeds and retrieves context from both data collections, then asks Claude to produce an answer. The wider documented workflow fetches and prepares HDX data and ingests it into ChromaDB or Pinecone. The graph reflects the two app implementations and the README-described notebook workflow; ingestion notebook internals were not sampled.

Main entry points: [`src/app_pinecone.py`](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py) (RAG answer flow), [`notebooks/02_data_processing.ipynb`](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/02_data_processing.ipynb) (Clean and convert), [`data/food_prices_final.csv`](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/food_prices_final.csv) (Food price data), [`data/poverty_final.csv`](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/poverty_final.csv) (Poverty data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_fetch["Fetch data"]
  node_clean["Clean and convert"]
  node_food_data["Food price data"]
  node_poverty_data["Poverty data<br/>[poverty_final.csv]"]
end

subgraph group_index["Vector indexing"]
  node_chroma_ingest["Chroma ingestion"]
  node_pine_ingest["Pinecone ingestion"]
  node_embed_chroma["Chroma embeddings<br/>[app.py]"]
  node_embed_pine["Pinecone embeddings<br/>[app_pinecone.py]"]
  node_chroma[("ChromaDB")]
  node_pinecone[("Pinecone")]
end

subgraph group_answer["Question answering"]
  node_ask["RAG answer flow<br/>[app_pinecone.py]"]
  node_retrieve["Context retrieval<br/>[app_pinecone.py]"]
  node_chroma_api["Chroma RAG app<br/>[app.py]"]
  node_chroma_retrieve["Chroma retrieval<br/>[app.py]"]
  node_answer_result["Natural-language answer<br/>[app_pinecone.py]"]
end

subgraph group_service["API and operations"]
  node_api["FastAPI endpoints<br/>[app_pinecone.py]"]
  node_auth["Credential verification<br/>[app_pinecone.py]"]
  node_log["Interaction logging<br/>[app_pinecone.py]"]
end

node_analyst(("Questioner"))
node_hdx(("OCHA HDX"))
node_claude(("Claude Haiku"))
node_s3[("Amazon S3")]

node_hdx -->|"provides data"| node_fetch
node_fetch -->|"passes records"| node_clean
node_clean -->|"writes"| node_food_data
node_clean -->|"writes"| node_poverty_data
node_food_data -->|"ingests"| node_chroma_ingest
node_poverty_data -->|"ingests"| node_chroma_ingest
node_food_data -->|"ingests"| node_pine_ingest
node_poverty_data -->|"ingests"| node_pine_ingest
node_chroma_ingest -->|"writes vectors"| node_chroma
node_pine_ingest -->|"writes vectors"| node_pinecone
node_analyst -->|"submits question"| node_api
node_api -->|"verifies credentials"| node_auth
node_api -->|"calls"| node_ask
node_ask -->|"requests context"| node_retrieve
node_retrieve -->|"embeds query"| node_embed_pine
node_retrieve -->|"queries namespaces"| node_pinecone
node_ask -->|"sends prompt"| node_claude
node_claude -->|"returns completion"| node_ask
node_ask -->|"returns answer"| node_answer_result
node_api -->|"logs interaction"| node_log
node_log -.->|"uploads log"| node_s3
node_analyst -->|"submits question"| node_chroma_api
node_chroma_api -->|"calls"| node_chroma_retrieve
node_chroma_retrieve -->|"embeds query"| node_embed_chroma
node_chroma_retrieve -->|"retrieves documents"| node_chroma
node_chroma_api -->|"sends prompt"| node_claude

click node_fetch "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/01_data_fetch.ipynb"
click node_clean "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/02_data_processing.ipynb"
click node_food_data "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/food_prices_final.csv"
click node_poverty_data "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/poverty_final.csv"
click node_chroma_ingest "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/03_chromadb_integration.ipynb"
click node_pine_ingest "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/03.5_pinecone.ipynb"
click node_embed_chroma "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py"
click node_embed_pine "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_api "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_auth "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_ask "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_retrieve "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_chroma_api "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py"
click node_chroma_retrieve "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py"
click node_answer_result "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py"
click node_log "https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.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_fetch,node_clean,node_food_data,node_poverty_data toneBlue
class node_chroma_ingest,node_pine_ingest,node_embed_chroma,node_embed_pine,node_chroma,node_pinecone,node_s3 toneAmber
class node_ask,node_retrieve,node_chroma_api,node_chroma_retrieve,node_answer_result toneMint
class node_api,node_auth,node_log toneRose
class node_analyst,node_hdx,node_claude toneIndigo
```

## Components

### Data preparation

- [Fetch data](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/01_data_fetch.ipynb): `notebooks/01_data_fetch.ipynb`
- [Clean and convert](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/02_data_processing.ipynb): `notebooks/02_data_processing.ipynb`
- [Food price data](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/food_prices_final.csv): `data/food_prices_final.csv`
- [Poverty data](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/data/poverty_final.csv): `data/poverty_final.csv`

### Vector indexing

- [Chroma ingestion](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/03_chromadb_integration.ipynb): `notebooks/03_chromadb_integration.ipynb`
- [Pinecone ingestion](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/notebooks/03.5_pinecone.ipynb): `notebooks/03.5_pinecone.ipynb`
- [Chroma embeddings](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py): `src/app.py`
- [Pinecone embeddings](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`
- **ChromaDB**
- **Pinecone**

### Question answering

- [RAG answer flow](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`
- [Context retrieval](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`
- [Chroma RAG app](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py): `src/app.py`
- [Chroma retrieval](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app.py): `src/app.py`
- [Natural-language answer](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`

### API and operations

- [FastAPI endpoints](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`
- [Credential verification](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`
- [Interaction logging](https://github.com/ifsaurabh/rag-humanitarian-risk-analysis-india/blob/main/src/app_pinecone.py): `src/app_pinecone.py`

### Other components

- **Questioner**
- **OCHA HDX**
- **Claude Haiku**
- **Amazon S3**

## Connections

- OCHA HDX → Fetch data: provides data
- Fetch data → Clean and convert: passes records
- Clean and convert → Food price data: writes
- Clean and convert → Poverty data: writes
- Food price data → Chroma ingestion: ingests
- Poverty data → Chroma ingestion: ingests
- Food price data → Pinecone ingestion: ingests
- Poverty data → Pinecone ingestion: ingests
- Chroma ingestion → ChromaDB: writes vectors
- Pinecone ingestion → Pinecone: writes vectors
- Questioner → FastAPI endpoints: submits question
- FastAPI endpoints → Credential verification: verifies credentials
- FastAPI endpoints → RAG answer flow: calls
- RAG answer flow → Context retrieval: requests context
- Context retrieval → Pinecone embeddings: embeds query
- Context retrieval → Pinecone: queries namespaces
- RAG answer flow → Claude Haiku: sends prompt
- Claude Haiku → RAG answer flow: returns completion
- RAG answer flow → Natural-language answer: returns answer
- FastAPI endpoints → Interaction logging: logs interaction
- Interaction logging → Amazon S3: uploads log
- Questioner → Chroma RAG app: submits question
- Chroma RAG app → Chroma retrieval: calls
- Chroma retrieval → Chroma embeddings: embeds query
- Chroma retrieval → ChromaDB: retrieves documents
- Chroma RAG app → Claude Haiku: sends prompt
