# ochirinho/agentic-rag architecture

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

- Interactive diagram: https://gitdiagram.com/ochirinho/agentic-rag
- Repository: https://github.com/ochirinho/agentic-rag

## Overview

Agentic-RAG answers questions over technical documentation through a FastAPI endpoint, input guardrails, and a tool-using agent that can repeat retrieval before returning a grounded, cited answer. The separate indexing workflow chunks corpus documents, embeds them, and stores them in ChromaDB. The README also documents web search and calculator tools. Some subsystem links are based on README descriptions because their implementation files were not sampled.

Main entry points: [`src/agent/graph.py`](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/graph.py) (Agent graph), [`src/ingest/index.py`](https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/index.py) (Index builder), [`src/agent/tools.py`](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/tools.py) (Agent tools), [`src/api/main.py`](https://github.com/ochirinho/agentic-rag/blob/main/src/api/main.py) (Chat API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API"]
  node_api["Chat API<br/>[main.py]"]
  node_answer["Cited answer"]
end

subgraph group_agent["Agent workflow"]
  node_graph["Agent graph<br/>[graph.py]"]
  node_guardrail["Input guardrail<br/>[filters.py]"]
  node_llm_factory["LLM factory<br/>[llm.py]"]
  node_tool_dispatch["Tool dispatch<br/>[graph.py]"]
  node_tools["Agent tools<br/>[tools.py]"]
end

subgraph group_knowledge["Knowledge base"]
  node_search["Semantic search<br/>[search.py]"]
  node_chunking["Text chunking<br/>[chunk.py]"]
  node_indexing["Index builder<br/>[index.py]"]
  node_embeddings["Embedding encoder<br/>[embed.py]"]
  node_corpus["Docs corpus"]
  node_chroma[("Chroma collection<br/>[search.py]")]
end

subgraph group_integrations["Integrations"]
  node_llm{{"LLM provider"}}
  node_web_search{{"Web search"}}
  node_calculator["Calculator<br/>[tools.py]"]
  node_encoder_model{{"Embedding model"}}
end

node_user(("Questioner"))

node_user -->|"asks"| node_api
node_api -->|"runs agent"| node_graph
node_graph -->|"checks input"| node_guardrail
node_guardrail -->|"checks relevance"| node_search
node_search -->|"embeds query"| node_embeddings
node_embeddings -->|"encodes locally"| node_encoder_model
node_search -->|"queries"| node_chroma
node_graph -->|"requests model"| node_llm_factory
node_llm_factory -->|"invokes"| node_llm
node_graph -->|"dispatches calls"| node_tool_dispatch
node_tool_dispatch -->|"executes tools"| node_tools
node_tools -->|"retrieves documents"| node_search
node_tools -.->|"searches web"| node_web_search
node_tools -->|"calculates"| node_calculator
node_tool_dispatch -->|"returns results"| node_graph
node_indexing -->|"reads documents"| node_corpus
node_indexing -->|"splits text"| node_chunking
node_indexing -->|"embeds chunks"| node_embeddings
node_indexing -->|"stores vectors"| node_chroma
node_graph -->|"returns answer"| node_api
node_api -->|"responds with"| node_answer

click node_api "https://github.com/ochirinho/agentic-rag/blob/main/src/api/main.py"
click node_graph "https://github.com/ochirinho/agentic-rag/blob/main/src/agent/graph.py"
click node_guardrail "https://github.com/ochirinho/agentic-rag/blob/main/src/guardrails/filters.py"
click node_llm_factory "https://github.com/ochirinho/agentic-rag/blob/main/src/agent/llm.py"
click node_tool_dispatch "https://github.com/ochirinho/agentic-rag/blob/main/src/agent/graph.py"
click node_tools "https://github.com/ochirinho/agentic-rag/blob/main/src/agent/tools.py"
click node_search "https://github.com/ochirinho/agentic-rag/blob/main/src/retrieval/search.py"
click node_chunking "https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/chunk.py"
click node_indexing "https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/index.py"
click node_embeddings "https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/embed.py"
click node_corpus "https://github.com/ochirinho/agentic-rag/tree/main/data/corpus"
click node_chroma "https://github.com/ochirinho/agentic-rag/blob/main/src/retrieval/search.py"
click node_calculator "https://github.com/ochirinho/agentic-rag/blob/main/src/agent/tools.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_api,node_answer toneBlue
class node_graph,node_guardrail,node_llm_factory,node_tool_dispatch,node_tools toneAmber
class node_search,node_chunking,node_indexing,node_embeddings,node_corpus,node_chroma toneMint
class node_llm,node_web_search,node_calculator,node_encoder_model toneRose
class node_user toneIndigo
```

## Components

### API

- [Chat API](https://github.com/ochirinho/agentic-rag/blob/main/src/api/main.py): `src/api/main.py`
- **Cited answer**

### Agent workflow

- [Agent graph](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/graph.py): `src/agent/graph.py`
- [Input guardrail](https://github.com/ochirinho/agentic-rag/blob/main/src/guardrails/filters.py): `src/guardrails/filters.py`
- [LLM factory](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/llm.py): `src/agent/llm.py`
- [Tool dispatch](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/graph.py): `src/agent/graph.py`
- [Agent tools](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/tools.py): `src/agent/tools.py`

### Knowledge base

- [Semantic search](https://github.com/ochirinho/agentic-rag/blob/main/src/retrieval/search.py): `src/retrieval/search.py`
- [Text chunking](https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/chunk.py): `src/ingest/chunk.py`
- [Index builder](https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/index.py): `src/ingest/index.py`
- [Embedding encoder](https://github.com/ochirinho/agentic-rag/blob/main/src/ingest/embed.py): `src/ingest/embed.py`
- [Docs corpus](https://github.com/ochirinho/agentic-rag/tree/main/data/corpus): `data/corpus`
- [Chroma collection](https://github.com/ochirinho/agentic-rag/blob/main/src/retrieval/search.py): `src/retrieval/search.py`

### Integrations

- **LLM provider**
- **Web search**
- [Calculator](https://github.com/ochirinho/agentic-rag/blob/main/src/agent/tools.py): `src/agent/tools.py`
- **Embedding model**

### Other components

- **Questioner**

## Connections

- Questioner → Chat API: asks
- Chat API → Agent graph: runs agent
- Agent graph → Input guardrail: checks input
- Input guardrail → Semantic search: checks relevance
- Semantic search → Embedding encoder: embeds query
- Embedding encoder → Embedding model: encodes locally
- Semantic search → Chroma collection: queries
- Agent graph → LLM factory: requests model
- LLM factory → LLM provider: invokes
- Agent graph → Tool dispatch: dispatches calls
- Tool dispatch → Agent tools: executes tools
- Agent tools → Semantic search: retrieves documents
- Agent tools → Web search: searches web
- Agent tools → Calculator: calculates
- Tool dispatch → Agent graph: returns results
- Index builder → Docs corpus: reads documents
- Index builder → Text chunking: splits text
- Index builder → Embedding encoder: embeds chunks
- Index builder → Chroma collection: stores vectors
- Agent graph → Chat API: returns answer
- Chat API → Cited answer: responds with
