# advait27/eadip architecture

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

## Overview

EADIP is an enterprise decision-intelligence platform: users submit business questions, receive a live, evidence-grounded investigation, and get an independently verified executive brief. The principal flow spans question planning and execution, document and graph evidence, governed analytics, verification, and reporting; side-effecting tool actions pause for human approval. The README documents additional governance and integration capabilities, but excerpts do not show every route or dependency, so uncertain wiring is omitted.

Main entry points: [`src/eadip/orchestrator/service.py`](https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/service.py) (Run orchestrator), [`src/eadip/gateway/app.py`](https://github.com/advait27/eadip/blob/main/src/eadip/gateway/app.py) (API gateway), [`src/eadip/ingestion/pipeline.py`](https://github.com/advait27/eadip/blob/main/src/eadip/ingestion/pipeline.py) (Ingestion pipeline), [`src/eadip/retrieval`](https://github.com/advait27/eadip/tree/main/src/eadip/retrieval) (Hybrid retrieval)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and identity"]
  node_gateway["API gateway<br/>[app.py]"]
  node_run_api["Run endpoints<br/>[runs.py]"]
  node_search_api["Search endpoint<br/>[search.py]"]
  node_identity["Identity and access"]
end

subgraph group_evidence["Evidence and retrieval"]
  node_ingest["Ingestion pipeline<br/>[pipeline.py]"]
  node_retrieval["Hybrid retrieval"]
  node_graph_rag["GraphRAG evidence<br/>[service.py]"]
  node_vector_store[("Vector store<br/>[qdrant_store.py]")]
  node_document_store[("Document repository")]
end

subgraph group_analysis["Analysis and reporting"]
  node_analytics["Governed analytics<br/>[service.py]"]
  node_sql_gate["SQL safety gate<br/>[sql_validator.py]"]
  node_warehouse[("Analytics warehouse")]
  node_verification["Verification and brief<br/>[service.py]"]
end

subgraph group_execution["Investigation execution"]
  node_orchestrator["Run orchestrator<br/>[service.py]"]
  node_agents["Planning agents"]
  node_executors["Step executors<br/>[executors.py]"]
  node_checkpoint[("Run checkpoints<br/>[checkpoint.py]")]
end

subgraph group_governance["Governance and integrations"]
  node_approval["Human approval<br/>[service.py]"]
  node_mcp["MCP tool access"]
  node_audit[("Audit logging<br/>[audit.py]")]
end

node_user(("Business user"))
node_model{{"LLM provider"}}
node_analyst(("Approver"))

node_user -->|"submits question"| node_gateway
node_gateway -->|"authenticates requests"| node_identity
node_gateway -->|"routes run requests"| node_run_api
node_gateway -->|"routes searches"| node_search_api
node_run_api -->|"starts or streams runs"| node_orchestrator
node_search_api -->|"requests evidence"| node_retrieval
node_ingest -->|"upserts chunks"| node_vector_store
node_ingest -.->|"records lineage"| node_document_store
node_ingest -.->|"records redactions"| node_audit
node_retrieval -->|"searches vectors"| node_vector_store
node_retrieval -.->|"merges graph evidence"| node_graph_rag
node_orchestrator -->|"interprets and plans"| node_agents
node_orchestrator -->|"dispatches steps"| node_executors
node_orchestrator -->|"saves run state"| node_checkpoint
node_orchestrator -->|"submits findings"| node_verification
node_orchestrator -->|"gates proposed actions"| node_approval
node_approval -->|"updates run state"| node_checkpoint
node_analyst -->|"decides actions"| node_approval
node_executors -.->|"runs tool steps"| node_mcp
node_analytics -->|"validates queries"| node_sql_gate
node_analytics -->|"executes safe SQL"| node_warehouse
node_agents -.->|"requests completions"| node_model
node_verification -.->|"requests recommendations"| node_model

click node_gateway "https://github.com/advait27/eadip/blob/main/src/eadip/gateway/app.py"
click node_run_api "https://github.com/advait27/eadip/blob/main/src/eadip/gateway/routes/runs.py"
click node_search_api "https://github.com/advait27/eadip/blob/main/src/eadip/gateway/routes/search.py"
click node_identity "https://github.com/advait27/eadip/tree/main/src/eadip/security"
click node_ingest "https://github.com/advait27/eadip/blob/main/src/eadip/ingestion/pipeline.py"
click node_retrieval "https://github.com/advait27/eadip/tree/main/src/eadip/retrieval"
click node_graph_rag "https://github.com/advait27/eadip/blob/main/src/eadip/graph/service.py"
click node_vector_store "https://github.com/advait27/eadip/blob/main/src/eadip/adapters/qdrant_store.py"
click node_document_store "https://github.com/advait27/eadip/blob/main/src/eadip/adapters/postgres_document_repository.py"
click node_analytics "https://github.com/advait27/eadip/blob/main/src/eadip/analytics/service.py"
click node_sql_gate "https://github.com/advait27/eadip/blob/main/src/eadip/analytics/sql_validator.py"
click node_warehouse "https://github.com/advait27/eadip/blob/main/src/eadip/adapters/postgres_warehouse.py"
click node_verification "https://github.com/advait27/eadip/blob/main/src/eadip/verification/service.py"
click node_orchestrator "https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/service.py"
click node_agents "https://github.com/advait27/eadip/tree/main/src/eadip/agents"
click node_executors "https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/executors.py"
click node_checkpoint "https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/checkpoint.py"
click node_approval "https://github.com/advait27/eadip/blob/main/src/eadip/approval/service.py"
click node_mcp "https://github.com/advait27/eadip/tree/main/src/eadip/mcp"
click node_audit "https://github.com/advait27/eadip/blob/main/src/eadip/security/audit.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_gateway,node_run_api,node_search_api,node_identity,node_user toneBlue
class node_ingest,node_retrieval,node_graph_rag,node_vector_store,node_document_store toneAmber
class node_analytics,node_sql_gate,node_warehouse,node_verification toneMint
class node_orchestrator,node_agents,node_executors,node_checkpoint toneRose
class node_approval,node_mcp,node_audit,node_model,node_analyst toneIndigo
```

## Components

### API and identity

- [API gateway](https://github.com/advait27/eadip/blob/main/src/eadip/gateway/app.py): `src/eadip/gateway/app.py`
- [Run endpoints](https://github.com/advait27/eadip/blob/main/src/eadip/gateway/routes/runs.py): `src/eadip/gateway/routes/runs.py`
- [Search endpoint](https://github.com/advait27/eadip/blob/main/src/eadip/gateway/routes/search.py): `src/eadip/gateway/routes/search.py`
- [Identity and access](https://github.com/advait27/eadip/tree/main/src/eadip/security): `src/eadip/security`

### Evidence and retrieval

- [Ingestion pipeline](https://github.com/advait27/eadip/blob/main/src/eadip/ingestion/pipeline.py): `src/eadip/ingestion/pipeline.py`
- [Hybrid retrieval](https://github.com/advait27/eadip/tree/main/src/eadip/retrieval): `src/eadip/retrieval`
- [GraphRAG evidence](https://github.com/advait27/eadip/blob/main/src/eadip/graph/service.py): `src/eadip/graph/service.py`
- [Vector store](https://github.com/advait27/eadip/blob/main/src/eadip/adapters/qdrant_store.py): `src/eadip/adapters/qdrant_store.py`
- [Document repository](https://github.com/advait27/eadip/blob/main/src/eadip/adapters/postgres_document_repository.py): `src/eadip/adapters/postgres_document_repository.py`

### Analysis and reporting

- [Governed analytics](https://github.com/advait27/eadip/blob/main/src/eadip/analytics/service.py): `src/eadip/analytics/service.py`
- [SQL safety gate](https://github.com/advait27/eadip/blob/main/src/eadip/analytics/sql_validator.py): `src/eadip/analytics/sql_validator.py`
- [Analytics warehouse](https://github.com/advait27/eadip/blob/main/src/eadip/adapters/postgres_warehouse.py): `src/eadip/adapters/postgres_warehouse.py`
- [Verification and brief](https://github.com/advait27/eadip/blob/main/src/eadip/verification/service.py): `src/eadip/verification/service.py`

### Investigation execution

- [Run orchestrator](https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/service.py): `src/eadip/orchestrator/service.py`
- [Planning agents](https://github.com/advait27/eadip/tree/main/src/eadip/agents): `src/eadip/agents`
- [Step executors](https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/executors.py): `src/eadip/orchestrator/executors.py`
- [Run checkpoints](https://github.com/advait27/eadip/blob/main/src/eadip/orchestrator/checkpoint.py): `src/eadip/orchestrator/checkpoint.py`

### Governance and integrations

- [Human approval](https://github.com/advait27/eadip/blob/main/src/eadip/approval/service.py): `src/eadip/approval/service.py`
- [MCP tool access](https://github.com/advait27/eadip/tree/main/src/eadip/mcp): `src/eadip/mcp`
- [Audit logging](https://github.com/advait27/eadip/blob/main/src/eadip/security/audit.py): `src/eadip/security/audit.py`

### Other components

- **Business user**
- **LLM provider**
- **Approver**

## Connections

- Business user → API gateway: submits question
- API gateway → Identity and access: authenticates requests
- API gateway → Run endpoints: routes run requests
- API gateway → Search endpoint: routes searches
- Run endpoints → Run orchestrator: starts or streams runs
- Search endpoint → Hybrid retrieval: requests evidence
- Ingestion pipeline → Vector store: upserts chunks
- Ingestion pipeline → Document repository: records lineage
- Ingestion pipeline → Audit logging: records redactions
- Hybrid retrieval → Vector store: searches vectors
- Hybrid retrieval → GraphRAG evidence: merges graph evidence
- Run orchestrator → Planning agents: interprets and plans
- Run orchestrator → Step executors: dispatches steps
- Run orchestrator → Run checkpoints: saves run state
- Run orchestrator → Verification and brief: submits findings
- Run orchestrator → Human approval: gates proposed actions
- Human approval → Run checkpoints: updates run state
- Approver → Human approval: decides actions
- Step executors → MCP tool access: runs tool steps
- Governed analytics → SQL safety gate: validates queries
- Governed analytics → Analytics warehouse: executes safe SQL
- Planning agents → LLM provider: requests completions
- Verification and brief → LLM provider: requests recommendations
