# zulkarnainfaizan/agentic-enterprise-it-support-rag architecture

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

- Interactive diagram: https://gitdiagram.com/zulkarnainfaizan/agentic-enterprise-it-support-rag
- Repository: https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag

## Overview

This is an employee-facing IT support copilot: employees ask questions in the web UI, the API invokes a LangGraph workflow, and the workflow returns an answer, citations, and a decision trace. IT support questions are checked against private Pinecone knowledge first; weak evidence can trigger Tavily search, grading, and a bounded query rewrite/retry. Authorized staff can upload documents for ingestion and indexing. The graph preserves the workflow’s distinct decision stages; its implementation is concentrated in `app/rag/workflow.py`. Relationships are based on the shown source and README; unsampled template and infrastructure details are not expanded.

Main entry points: [`app/rag/workflow.py`](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py) (Evidence grading), [`app/api/routes.py`](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/api/routes.py) (Chat and ingest API), [`static/js/app.js`](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/static/js/app.js) (Support web UI), [`app/rag/vectorstore.py`](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/vectorstore.py) (Vector store adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_web_ui["Support web UI<br/>[app.js]"]
end

subgraph group_service["API and services"]
  node_app["FastAPI app<br/>[main.py]"]
  node_api["Chat and ingest API<br/>[routes.py]"]
  node_config["App settings<br/>[config.py]"]
  node_logging["Logging setup<br/>[logging.py]"]
  node_audit["Query audit<br/>[audit.py]"]
  node_ingestion["Document loading and chunking<br/>[ingestion.py]"]
end

subgraph group_agent["Agentic RAG"]
  node_state["Workflow state<br/>[state.py]"]
  node_workflow["RAG workflow<br/>[workflow.py]"]
  node_routing["Question routing<br/>[workflow.py]"]
  node_private_retrieval["Private KB retrieval<br/>[workflow.py]"]
  node_evidence_grading["Evidence grading<br/>[workflow.py]"]
  node_query_rewrite["Query rewrite and retry<br/>[workflow.py]"]
  node_answer_generation["Answer generation<br/>[workflow.py]"]
  node_web_search["Web fallback search<br/>[workflow.py]"]
end

subgraph group_integrations["Data and integrations"]
  node_vectorstore["Vector store adapter<br/>[vectorstore.py]"]
  node_pinecone[("Pinecone knowledge store")]
  node_sqlite[("SQLite audit database<br/>[audit.db]")]
  node_llm["OpenAI chat and embeddings"]
  node_tavily["Tavily search"]
end

node_employee(("Employee"))
node_it_staff(("Authorized IT staff"))

node_employee -->|"asks"| node_web_ui
node_web_ui -->|"POSTs chat"| node_api
node_api -->|"calls ask"| node_workflow
node_workflow -->|"starts at"| node_routing
node_routing -->|"routes KB"| node_private_retrieval
node_routing -->|"routes direct"| node_answer_generation
node_private_retrieval -->|"retrieves from"| node_vectorstore
node_vectorstore -->|"reads and writes"| node_pinecone
node_private_retrieval -->|"grades private evidence"| node_evidence_grading
node_evidence_grading -->|"uses sufficient KB"| node_answer_generation
node_evidence_grading -->|"falls back when weak"| node_web_search
node_web_search -->|"searches"| node_tavily
node_web_search -->|"grades web evidence"| node_evidence_grading
node_evidence_grading -->|"rewrites when weak"| node_query_rewrite
node_query_rewrite -->|"retries retrieval"| node_private_retrieval
node_evidence_grading -->|"uses sufficient web"| node_answer_generation
node_answer_generation -->|"generates with"| node_llm
node_routing -->|"classifies with"| node_llm
node_evidence_grading -->|"grades with"| node_llm
node_query_rewrite -->|"rewrites with"| node_llm
node_vectorstore -->|"embeds with"| node_llm
node_workflow -->|"uses"| node_state
node_api -->|"writes trace"| node_audit
node_audit -->|"stores audit"| node_sqlite
node_it_staff -->|"uploads document"| node_web_ui
node_web_ui -->|"POSTs upload"| node_api
node_api -->|"loads and chunks"| node_ingestion
node_api -->|"indexes chunks"| node_vectorstore
node_app -->|"includes router"| node_api
node_app -->|"configures"| node_logging
node_app -->|"initializes database"| node_audit

click node_web_ui "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/static/js/app.js"
click node_app "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/main.py"
click node_api "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/api/routes.py"
click node_config "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/core/config.py"
click node_logging "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/core/logging.py"
click node_audit "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/services/audit.py"
click node_ingestion "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/services/ingestion.py"
click node_state "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/state.py"
click node_workflow "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_routing "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_private_retrieval "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_evidence_grading "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_query_rewrite "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_answer_generation "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_web_search "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py"
click node_vectorstore "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/vectorstore.py"
click node_sqlite "https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/data/audit.db"

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_web_ui toneBlue
class node_app,node_api,node_config,node_logging,node_audit,node_ingestion toneAmber
class node_state,node_workflow,node_routing,node_private_retrieval,node_evidence_grading,node_query_rewrite,node_answer_generation,node_web_search toneMint
class node_vectorstore,node_pinecone,node_sqlite,node_llm,node_tavily toneRose
class node_employee,node_it_staff toneIndigo
```

## Components

### User interface

- [Support web UI](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/static/js/app.js): `static/js/app.js`

### API and services

- [FastAPI app](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/main.py): `app/main.py`
- [Chat and ingest API](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/api/routes.py): `app/api/routes.py`
- [App settings](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/core/config.py): `app/core/config.py`
- [Logging setup](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/core/logging.py): `app/core/logging.py`
- [Query audit](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/services/audit.py): `app/services/audit.py`
- [Document loading and chunking](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/services/ingestion.py): `app/services/ingestion.py`

### Agentic RAG

- [Workflow state](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/state.py): `app/rag/state.py`
- [RAG workflow](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Question routing](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Private KB retrieval](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Evidence grading](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Query rewrite and retry](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Answer generation](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`
- [Web fallback search](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/workflow.py): `app/rag/workflow.py`

### Data and integrations

- [Vector store adapter](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/app/rag/vectorstore.py): `app/rag/vectorstore.py`
- **Pinecone knowledge store**
- [SQLite audit database](https://github.com/zulkarnainfaizan/agentic-enterprise-it-support-rag/blob/main/data/audit.db): `data/audit.db`
- **OpenAI chat and embeddings**
- **Tavily search**

### Other components

- **Employee**
- **Authorized IT staff**

## Connections

- Employee → Support web UI: asks (evidence: `README.md`)
- Support web UI → Chat and ingest API: POSTs chat (evidence: `static/js/app.js`)
- Chat and ingest API → RAG workflow: calls ask (evidence: `app/api/routes.py`)
- RAG workflow → Question routing: starts at (evidence: `app/rag/workflow.py`)
- Question routing → Private KB retrieval: routes KB (evidence: `app/rag/workflow.py`)
- Question routing → Answer generation: routes direct (evidence: `app/rag/workflow.py`)
- Private KB retrieval → Vector store adapter: retrieves from (evidence: `app/rag/workflow.py`)
- Vector store adapter → Pinecone knowledge store: reads and writes (evidence: `app/rag/vectorstore.py`)
- Private KB retrieval → Evidence grading: grades private evidence (evidence: `app/rag/workflow.py`)
- Evidence grading → Answer generation: uses sufficient KB (evidence: `app/rag/workflow.py`)
- Evidence grading → Web fallback search: falls back when weak (evidence: `app/rag/workflow.py`)
- Web fallback search → Tavily search: searches (evidence: `app/rag/workflow.py`)
- Web fallback search → Evidence grading: grades web evidence (evidence: `app/rag/workflow.py`)
- Evidence grading → Query rewrite and retry: rewrites when weak (evidence: `app/rag/workflow.py`)
- Query rewrite and retry → Private KB retrieval: retries retrieval (evidence: `app/rag/workflow.py`)
- Evidence grading → Answer generation: uses sufficient web (evidence: `app/rag/workflow.py`)
- Answer generation → OpenAI chat and embeddings: generates with (evidence: `app/rag/workflow.py`)
- Question routing → OpenAI chat and embeddings: classifies with (evidence: `app/rag/workflow.py`)
- Evidence grading → OpenAI chat and embeddings: grades with (evidence: `app/rag/workflow.py`)
- Query rewrite and retry → OpenAI chat and embeddings: rewrites with (evidence: `app/rag/workflow.py`)
- Vector store adapter → OpenAI chat and embeddings: embeds with (evidence: `app/rag/vectorstore.py`)
- RAG workflow → Workflow state: uses (evidence: `app/rag/workflow.py`)
- Chat and ingest API → Query audit: writes trace (evidence: `app/api/routes.py`)
- Query audit → SQLite audit database: stores audit (evidence: `app/services/audit.py`)
- Authorized IT staff → Support web UI: uploads document (evidence: `static/js/app.js`)
- Support web UI → Chat and ingest API: POSTs upload (evidence: `static/js/app.js`)
- Chat and ingest API → Document loading and chunking: loads and chunks (evidence: `app/api/routes.py`)
- Chat and ingest API → Vector store adapter: indexes chunks (evidence: `app/api/routes.py`)
- FastAPI app → Chat and ingest API: includes router (evidence: `app/main.py`)
- FastAPI app → Logging setup: configures (evidence: `app/main.py`)
- FastAPI app → Query audit: initializes database (evidence: `app/main.py`)
