# morglinf/insightai architecture

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

- Interactive diagram: https://gitdiagram.com/morglinf/insightai
- Repository: https://github.com/morglinf/insightai

## Overview

InsightAI is a dataset-upload and natural-language analytics application. Users upload files, receive dataset analysis and generated business insights, then ask questions answered with retrieved dataset context and streamed AI responses. The graph includes the documented analytics, RAG, and dashboard capabilities. Route, API-client, and several UI implementation excerpts were not provided, so links involving those modules follow the documented API and workflow; uncertain internal wiring is omitted.

Main entry points: [`backend/app/routes/upload.py`](https://github.com/morglinf/insightai/blob/main/backend/app/routes/upload.py) (Upload API), [`frontend/src/pages/ChatPage.js`](https://github.com/morglinf/insightai/blob/main/frontend/src/pages/ChatPage.js) (Chat page), [`backend/app/routes/chat.py`](https://github.com/morglinf/insightai/blob/main/backend/app/routes/chat.py) (Chat API), [`frontend/src/App.js`](https://github.com/morglinf/insightai/blob/main/frontend/src/App.js) (App)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React dashboard"]
  node_app["App<br/>[App.js]"]
  node_chatpage["Chat page<br/>[ChatPage.js]"]
  node_datasetstate["Dataset state<br/>[DatasetContext.js]"]
  node_chatui["Chat interface<br/>[ChatWindow.js]"]
  node_analyticsui["Analytics panel<br/>[AnalyticsPanel.js]"]
  node_api_client["API client<br/>[client.js]"]
end

subgraph group_api["API and dataset handling"]
  node_upload["Upload API<br/>[upload.py]"]
  node_chat["Chat API<br/>[chat.py]"]
  node_parser["File parser<br/>[file_parser.py]"]
  node_csv["CSV profiling<br/>[csv_engine.py]"]
  node_registry["File registry<br/>[file_registry.py]"]
  node_main["FastAPI app<br/>[main.py]"]
end

subgraph group_analytics["Analytics and insights"]
  node_insight_engine["Insight analysis<br/>[insight_engine.py]"]
end

subgraph group_rag["RAG and generation"]
  node_rag_ingest["RAG ingestion<br/>[ingest.py]"]
  node_chunker["Text chunker<br/>[chunker.py]"]
  node_vector_store[("Vector store<br/>[vector_store.py]")]
  node_retriever["Context retrieval<br/>[retriever.py]"]
  node_llm["LLM engine<br/>[llm_engine.py]"]
end

subgraph group_state["Persistence"]
  node_db[("SQLite database<br/>[database.py]")]
  node_dataset_model["Dataset model<br/>[dataset.py]"]
  node_insight_model["Insight model<br/>[insight.py]"]
end

node_user(("User"))
node_openai["OpenAI"]

node_user -->|"uses"| node_app
node_app -->|"renders"| node_chatpage
node_app -->|"provides state"| node_datasetstate
node_chatpage -->|"shows"| node_chatui
node_chatpage -->|"shows"| node_analyticsui
node_chatpage -->|"requests"| node_api_client
node_api_client -->|"uploads"| node_upload
node_api_client -->|"sends questions"| node_chat
node_main -->|"registers route"| node_upload
node_main -->|"registers route"| node_chat
node_upload -->|"processes file"| node_parser
node_upload -->|"profiles CSV"| node_csv
node_upload -->|"registers file"| node_registry
node_upload -->|"ingests data"| node_rag_ingest
node_upload -->|"generates insights"| node_insight_engine
node_rag_ingest -->|"chunks text"| node_chunker
node_rag_ingest -->|"stores chunks"| node_vector_store
node_chat -->|"retrieves context"| node_retriever
node_retriever -->|"searches"| node_vector_store
node_chat -->|"streams response"| node_llm
node_llm -->|"requests completion"| node_openai
node_insight_engine -->|"generates summary"| node_openai
node_dataset_model -->|"persists dataset"| node_db
node_insight_model -->|"persists insight"| node_db

click node_app "https://github.com/morglinf/insightai/blob/main/frontend/src/App.js"
click node_chatpage "https://github.com/morglinf/insightai/blob/main/frontend/src/pages/ChatPage.js"
click node_datasetstate "https://github.com/morglinf/insightai/blob/main/frontend/src/context/DatasetContext.js"
click node_chatui "https://github.com/morglinf/insightai/blob/main/frontend/src/components/chat/ChatWindow.js"
click node_analyticsui "https://github.com/morglinf/insightai/blob/main/frontend/src/components/analytics/AnalyticsPanel.js"
click node_api_client "https://github.com/morglinf/insightai/blob/main/frontend/src/api/client.js"
click node_upload "https://github.com/morglinf/insightai/blob/main/backend/app/routes/upload.py"
click node_chat "https://github.com/morglinf/insightai/blob/main/backend/app/routes/chat.py"
click node_parser "https://github.com/morglinf/insightai/blob/main/backend/app/utils/file_parser.py"
click node_csv "https://github.com/morglinf/insightai/blob/main/backend/app/services/csv_engine.py"
click node_registry "https://github.com/morglinf/insightai/blob/main/backend/app/services/file_registry.py"
click node_insight_engine "https://github.com/morglinf/insightai/blob/main/backend/app/services/insight_engine.py"
click node_rag_ingest "https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/ingest.py"
click node_chunker "https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/chunker.py"
click node_vector_store "https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/vector_store.py"
click node_retriever "https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/retriever.py"
click node_llm "https://github.com/morglinf/insightai/blob/main/backend/app/services/llm_engine.py"
click node_db "https://github.com/morglinf/insightai/blob/main/backend/app/database.py"
click node_dataset_model "https://github.com/morglinf/insightai/blob/main/backend/app/models/dataset.py"
click node_insight_model "https://github.com/morglinf/insightai/blob/main/backend/app/models/insight.py"
click node_main "https://github.com/morglinf/insightai/blob/main/backend/app/main.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_app,node_chatpage,node_datasetstate,node_chatui,node_analyticsui,node_api_client,node_user toneBlue
class node_upload,node_chat,node_parser,node_csv,node_registry,node_main toneAmber
class node_insight_engine toneMint
class node_rag_ingest,node_chunker,node_vector_store,node_retriever,node_llm toneRose
class node_db,node_dataset_model,node_insight_model,node_openai toneIndigo
```

## Components

### React dashboard

- [App](https://github.com/morglinf/insightai/blob/main/frontend/src/App.js): `frontend/src/App.js`
- [Chat page](https://github.com/morglinf/insightai/blob/main/frontend/src/pages/ChatPage.js): `frontend/src/pages/ChatPage.js`
- [Dataset state](https://github.com/morglinf/insightai/blob/main/frontend/src/context/DatasetContext.js): `frontend/src/context/DatasetContext.js`
- [Chat interface](https://github.com/morglinf/insightai/blob/main/frontend/src/components/chat/ChatWindow.js): `frontend/src/components/chat/ChatWindow.js`
- [Analytics panel](https://github.com/morglinf/insightai/blob/main/frontend/src/components/analytics/AnalyticsPanel.js): `frontend/src/components/analytics/AnalyticsPanel.js`
- [API client](https://github.com/morglinf/insightai/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### API and dataset handling

- [Upload API](https://github.com/morglinf/insightai/blob/main/backend/app/routes/upload.py): `backend/app/routes/upload.py`
- [Chat API](https://github.com/morglinf/insightai/blob/main/backend/app/routes/chat.py): `backend/app/routes/chat.py`
- [File parser](https://github.com/morglinf/insightai/blob/main/backend/app/utils/file_parser.py): `backend/app/utils/file_parser.py`
- [CSV profiling](https://github.com/morglinf/insightai/blob/main/backend/app/services/csv_engine.py): `backend/app/services/csv_engine.py`
- [File registry](https://github.com/morglinf/insightai/blob/main/backend/app/services/file_registry.py): `backend/app/services/file_registry.py`
- [FastAPI app](https://github.com/morglinf/insightai/blob/main/backend/app/main.py): `backend/app/main.py`

### Analytics and insights

- [Insight analysis](https://github.com/morglinf/insightai/blob/main/backend/app/services/insight_engine.py): `backend/app/services/insight_engine.py`

### RAG and generation

- [RAG ingestion](https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/ingest.py): `backend/app/services/rag/ingest.py`
- [Text chunker](https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/chunker.py): `backend/app/services/rag/chunker.py`
- [Vector store](https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/vector_store.py): `backend/app/services/rag/vector_store.py`
- [Context retrieval](https://github.com/morglinf/insightai/blob/main/backend/app/services/rag/retriever.py): `backend/app/services/rag/retriever.py`
- [LLM engine](https://github.com/morglinf/insightai/blob/main/backend/app/services/llm_engine.py): `backend/app/services/llm_engine.py`

### Persistence

- [SQLite database](https://github.com/morglinf/insightai/blob/main/backend/app/database.py): `backend/app/database.py`
- [Dataset model](https://github.com/morglinf/insightai/blob/main/backend/app/models/dataset.py): `backend/app/models/dataset.py`
- [Insight model](https://github.com/morglinf/insightai/blob/main/backend/app/models/insight.py): `backend/app/models/insight.py`

### Other components

- **User**
- **OpenAI**

## Connections

- User → App: uses
- App → Chat page: renders
- App → Dataset state: provides state
- Chat page → Chat interface: shows
- Chat page → Analytics panel: shows
- Chat page → API client: requests
- API client → Upload API: uploads
- API client → Chat API: sends questions
- FastAPI app → Upload API: registers route
- FastAPI app → Chat API: registers route
- Upload API → File parser: processes file
- Upload API → CSV profiling: profiles CSV
- Upload API → File registry: registers file
- Upload API → RAG ingestion: ingests data
- Upload API → Insight analysis: generates insights
- RAG ingestion → Text chunker: chunks text
- RAG ingestion → Vector store: stores chunks
- Chat API → Context retrieval: retrieves context
- Context retrieval → Vector store: searches
- Chat API → LLM engine: streams response
- LLM engine → OpenAI: requests completion
- Insight analysis → OpenAI: generates summary
- Dataset model → SQLite database: persists dataset
- Insight model → SQLite database: persists insight
