# krishnatiwari005/multi-utility-ai-chatbot architecture

> Architecture diagram of the GitHub repository krishnatiwari005/multi-utility-ai-chatbot, 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/krishnatiwari005/multi-utility-ai-chatbot
- Repository: https://github.com/krishnatiwari005/multi-utility-ai-chatbot

## Overview

This is a multi-utility conversational AI application: users chat through Streamlit or a FastAPI API, and a LangGraph workflow streams model responses while routing tool requests. Its distinct capabilities include web search, arithmetic, stock lookup, and PDF ingestion and question answering; conversation checkpoints persist in SQLite. The PDF retrievers and metadata are held in backend memory per thread. The README documents the Streamlit workflow, while the FastAPI entry point and its endpoints are evident in sampled source; PDF processing details are also sampled.

Main entry points: [`langgraph_backend.py`](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py) (Chat Graph), [`streamlit_frontend.py`](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/streamlit_frontend.py) (Streamlit Chat), [`fastapi_backend.py`](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/fastapi_backend.py) (FastAPI API), [`ui.py`](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/ui.py) (UI Styling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User Interfaces"]
  node_streamlit["Streamlit Chat"]
  node_ui_helpers["UI Styling<br/>[ui.py]"]
  node_fastapi["FastAPI API<br/>[fastapi_backend.py]"]
end

subgraph group_workflow["Chat Workflow"]
  node_chat_graph["Chat Graph"]
  node_chat_node["Model Node"]
  node_tool_node["Tool Dispatcher"]
end

subgraph group_capabilities["Tools and Documents"]
  node_search_tool["Web Search"]
  node_calculator["Calculator"]
  node_stock_tool["Stock Lookup"]
  node_pdf_ingest["PDF Ingestion"]
  node_pdf_loader["PDF Extraction"]
  node_chunker["Text Chunking"]
  node_embeddings["Embeddings"]
  node_faiss[("FAISS Index")]
  node_rag_tool["PDF Retrieval"]
end

subgraph group_state["Conversation State"]
  node_thread_retrievers[("Thread Retrievers")]
  node_checkpoint[("SQLite Checkpoint")]
end

node_user(("User"))
node_api_client(("API Client"))
node_groq{{"Groq Model"}}
node_duckduckgo{{"DuckDuckGo"}}
node_alpha_vantage{{"Alpha Vantage"}}

node_user -->|"chats"| node_streamlit
node_streamlit -->|"loads styling"| node_ui_helpers
node_streamlit -->|"streams turns"| node_chat_graph
node_streamlit -->|"uploads PDF"| node_pdf_ingest
node_streamlit -->|"loads threads"| node_chat_graph
node_streamlit -->|"reads document metadata"| node_chat_graph
node_api_client -->|"calls API"| node_fastapi
node_fastapi -->|"streams turns"| node_chat_graph
node_fastapi -->|"uploads PDF"| node_pdf_ingest
node_fastapi -->|"loads threads"| node_chat_graph
node_fastapi -->|"loads conversations"| node_chat_graph
node_fastapi -->|"reads document metadata"| node_chat_graph
node_chat_graph -->|"starts and resumes"| node_chat_node
node_chat_node -->|"invokes model"| node_groq
node_chat_graph -->|"routes tool calls"| node_tool_node
node_tool_node -->|"returns tool results"| node_chat_node
node_tool_node -->|"dispatches"| node_search_tool
node_tool_node -->|"dispatches"| node_calculator
node_tool_node -->|"dispatches"| node_stock_tool
node_tool_node -->|"dispatches"| node_rag_tool
node_search_tool -->|"searches"| node_duckduckgo
node_stock_tool -->|"requests quote"| node_alpha_vantage
node_pdf_ingest -->|"loads PDF"| node_pdf_loader
node_pdf_ingest -->|"splits documents"| node_chunker
node_pdf_ingest -->|"embeds chunks"| node_embeddings
node_pdf_ingest -->|"builds index"| node_faiss
node_pdf_ingest -->|"stores retriever"| node_thread_retrievers
node_rag_tool -->|"gets retriever"| node_thread_retrievers
node_rag_tool -->|"retrieves chunks"| node_faiss
node_chat_graph -->|"reads and writes checkpoints"| node_checkpoint

click node_streamlit "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/streamlit_frontend.py"
click node_ui_helpers "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/ui.py"
click node_fastapi "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/fastapi_backend.py"
click node_chat_graph "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_chat_node "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_tool_node "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_search_tool "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_calculator "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_stock_tool "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_pdf_ingest "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_pdf_loader "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_chunker "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_embeddings "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_faiss "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_rag_tool "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_thread_retrievers "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py"
click node_checkpoint "https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.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_streamlit,node_ui_helpers,node_fastapi,node_user,node_api_client toneBlue
class node_chat_graph,node_chat_node,node_tool_node toneAmber
class node_search_tool,node_calculator,node_stock_tool,node_pdf_ingest,node_pdf_loader,node_chunker,node_embeddings,node_faiss,node_rag_tool toneMint
class node_thread_retrievers,node_checkpoint toneRose
class node_groq,node_duckduckgo,node_alpha_vantage toneIndigo
```

## Components

### User Interfaces

- [Streamlit Chat](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/streamlit_frontend.py): `streamlit_frontend.py`
- [UI Styling](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/ui.py): `ui.py`
- [FastAPI API](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/fastapi_backend.py): `fastapi_backend.py`

### Chat Workflow

- [Chat Graph](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Model Node](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Tool Dispatcher](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`

### Tools and Documents

- [Web Search](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Calculator](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Stock Lookup](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [PDF Ingestion](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [PDF Extraction](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Text Chunking](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [Embeddings](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [FAISS Index](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [PDF Retrieval](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`

### Conversation State

- [Thread Retrievers](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`
- [SQLite Checkpoint](https://github.com/krishnatiwari005/multi-utility-ai-chatbot/blob/main/langgraph_backend.py): `langgraph_backend.py`

### Other components

- **User**
- **API Client**
- **Groq Model**
- **DuckDuckGo**
- **Alpha Vantage**

## Connections

- User → Streamlit Chat: chats
- Streamlit Chat → UI Styling: loads styling
- Streamlit Chat → Chat Graph: streams turns
- Streamlit Chat → PDF Ingestion: uploads PDF
- Streamlit Chat → Chat Graph: loads threads
- Streamlit Chat → Chat Graph: reads document metadata
- API Client → FastAPI API: calls API
- FastAPI API → Chat Graph: streams turns
- FastAPI API → PDF Ingestion: uploads PDF
- FastAPI API → Chat Graph: loads threads
- FastAPI API → Chat Graph: loads conversations
- FastAPI API → Chat Graph: reads document metadata
- Chat Graph → Model Node: starts and resumes
- Model Node → Groq Model: invokes model
- Chat Graph → Tool Dispatcher: routes tool calls
- Tool Dispatcher → Model Node: returns tool results
- Tool Dispatcher → Web Search: dispatches
- Tool Dispatcher → Calculator: dispatches
- Tool Dispatcher → Stock Lookup: dispatches
- Tool Dispatcher → PDF Retrieval: dispatches
- Web Search → DuckDuckGo: searches
- Stock Lookup → Alpha Vantage: requests quote
- PDF Ingestion → PDF Extraction: loads PDF
- PDF Ingestion → Text Chunking: splits documents
- PDF Ingestion → Embeddings: embeds chunks
- PDF Ingestion → FAISS Index: builds index
- PDF Ingestion → Thread Retrievers: stores retriever
- PDF Retrieval → Thread Retrievers: gets retriever
- PDF Retrieval → FAISS Index: retrieves chunks
- Chat Graph → SQLite Checkpoint: reads and writes checkpoints
