# sushmitha-2007/pdf-chat-assistant architecture

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

- Interactive diagram: https://gitdiagram.com/sushmitha-2007/pdf-chat-assistant
- Repository: https://github.com/sushmitha-2007/pdf-chat-assistant

## Overview

This is a Streamlit PDF chat assistant. A user uploads a PDF, which the app loads, splits, and indexes in Chroma; the resulting retriever supplies context for a prompted Mistral answer to a user question. The app also tracks chat and document state and supports clearing the indexed document. The excerpt documents the MMR configuration and model names, but omits some setup code, so uncertain setup details are not expanded into extra components.

Main entry points: [`pythoncode/app.py`](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py) (Streamlit app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_app["Streamlit app<br/>[app.py]"]
  node_chat_state["Chat and document state<br/>[app.py]"]
  node_answer["Displayed answer<br/>[app.py]"]
end

subgraph group_ingestion["PDF ingestion"]
  node_pdf_loader["PDF loader<br/>[app.py]"]
  node_splitter["Text splitter<br/>[app.py]"]
  node_chroma[("Chroma vector store<br/>[app.py]")]
  node_embeddings["HuggingFace embeddings<br/>[app.py]"]
end

subgraph group_answering["Retrieval and answers"]
  node_retriever["MMR retriever<br/>[app.py]"]
  node_prompt["Chat prompt<br/>[app.py]"]
  node_llm["Mistral chat model<br/>[app.py]"]
end

node_user(("User"))
node_embedding_model["Sentence Transformers model"]
node_mistral_service["Mistral service"]

node_user -->|"uploads PDF"| node_app
node_user -->|"asks question"| node_app
node_app -->|"updates state"| node_chat_state
node_app -->|"loads PDF"| node_pdf_loader
node_pdf_loader -->|"returns pages"| node_app
node_app -->|"splits pages"| node_splitter
node_splitter -->|"returns chunks"| node_app
node_app -->|"indexes chunks"| node_chroma
node_chroma -->|"requests vectors"| node_embeddings
node_embeddings -.->|"uses model"| node_embedding_model
node_app -->|"configures MMR"| node_retriever
node_retriever -->|"queries vectors"| node_chroma
node_app -->|"retrieves context"| node_retriever
node_app -->|"formats context"| node_prompt
node_app -->|"requests answer"| node_llm
node_llm -.->|"calls model"| node_mistral_service
node_llm -->|"returns response"| node_app
node_app -->|"renders answer"| node_answer

click node_app "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_chat_state "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_pdf_loader "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_splitter "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_chroma "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_embeddings "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_retriever "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_prompt "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_llm "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py"
click node_answer "https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.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_chat_state,node_answer,node_user toneBlue
class node_pdf_loader,node_splitter,node_chroma,node_embeddings toneAmber
class node_retriever,node_prompt,node_llm toneMint
class node_embedding_model,node_mistral_service toneIndigo
```

## Components

### User interface

- [Streamlit app](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Chat and document state](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Displayed answer](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`

### PDF ingestion

- [PDF loader](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Text splitter](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Chroma vector store](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [HuggingFace embeddings](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`

### Retrieval and answers

- [MMR retriever](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Chat prompt](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`
- [Mistral chat model](https://github.com/sushmitha-2007/pdf-chat-assistant/blob/main/pythoncode/app.py): `pythoncode/app.py`

### Other components

- **User**
- **Sentence Transformers model**
- **Mistral service**

## Connections

- User → Streamlit app: uploads PDF
- User → Streamlit app: asks question
- Streamlit app → Chat and document state: updates state
- Streamlit app → PDF loader: loads PDF
- PDF loader → Streamlit app: returns pages
- Streamlit app → Text splitter: splits pages
- Text splitter → Streamlit app: returns chunks
- Streamlit app → Chroma vector store: indexes chunks
- Chroma vector store → HuggingFace embeddings: requests vectors
- HuggingFace embeddings → Sentence Transformers model: uses model
- Streamlit app → MMR retriever: configures MMR
- MMR retriever → Chroma vector store: queries vectors
- Streamlit app → MMR retriever: retrieves context
- Streamlit app → Chat prompt: formats context
- Streamlit app → Mistral chat model: requests answer
- Mistral chat model → Mistral service: calls model
- Mistral chat model → Streamlit app: returns response
- Streamlit app → Displayed answer: renders answer
