# prajjwal2051/ai-based-summarizer architecture

> Architecture diagram of the GitHub repository prajjwal2051/ai-based-summarizer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/prajjwal2051/ai-based-summarizer
- Repository: https://github.com/prajjwal2051/ai-based-summarizer

## Overview

This is a local-model RAG knowledge assistant: users ingest YouTube, web, PDF, or note content, then ask questions and receive streamed, citation-backed answers. The graph shows the UI/API workflow, source-specific extraction, indexing and retrieval, and model configuration. Several runtime modules are unsampled; internal RAG stages and some UI/API interactions are included only where the README documents them, so those edges cite the README.

Main entry points: [`backend/app.py`](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/app.py) (FastAPI routes), [`backend/rag_engine.py`](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py) (RAG engine), [`frontend/src/App.jsx`](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/App.jsx) (App and sessions), [`frontend/src/components/ChatInterface.jsx`](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ChatInterface.jsx) (Chat and citations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Assistant UI"]
  node_appui["App and sessions<br/>[App.jsx]"]
  node_ingestui["Resource ingestion"]
  node_chatui["Chat and citations<br/>[ChatInterface.jsx]"]
  node_resourceui["Resource list<br/>[ResourceList.jsx]"]
  node_navbar["Model and session controls<br/>[Navbar.jsx]"]
  node_settingsui["Model settings<br/>[SettingsModal.jsx]"]
end

subgraph group_api["API and orchestration"]
  node_apiapp["FastAPI routes<br/>[app.py]"]
  node_config["Runtime settings<br/>[config.py]"]
end

subgraph group_ingestion["Ingestion and extraction"]
  node_youtube["YouTube transcript<br/>[youtube.py]"]
  node_web["Web article scraper<br/>[web_scraper.py]"]
  node_pdf["PDF extraction<br/>[pdf_loader.py]"]
  node_notes["Text notes<br/>[app.py]"]
end

subgraph group_rag["Index and retrieval"]
  node_rag["RAG engine<br/>[rag_engine.py]"]
  node_vectorstore[("FAISS index<br/>[rag_engine.py]")]
  node_metadata[("Resource metadata<br/>[rag_engine.py]")]
end

subgraph group_inference["Local inference"]
  node_ollama["Ollama Gemma"]
end

node_user(("User"))

node_user -->|"uses"| node_appui
node_appui -->|"renders"| node_ingestui
node_appui -->|"renders"| node_resourceui
node_appui -->|"renders"| node_chatui
node_appui -->|"renders"| node_navbar
node_appui -->|"renders"| node_settingsui
node_ingestui -->|"submits sources"| node_apiapp
node_chatui -->|"streams questions"| node_apiapp
node_appui -->|"manages resources"| node_apiapp
node_navbar -->|"triggers controls"| node_appui
node_settingsui -->|"updates settings"| node_apiapp
node_apiapp -->|"reads settings"| node_config
node_apiapp -->|"fetches transcript"| node_youtube
node_apiapp -->|"scrapes article"| node_web
node_apiapp -->|"extracts pages"| node_pdf
node_apiapp -->|"accepts text"| node_notes
node_youtube -->|"supplies documents"| node_rag
node_web -->|"supplies documents"| node_rag
node_pdf -->|"supplies documents"| node_rag
node_notes -->|"supplies documents"| node_rag
node_apiapp -->|"ingests and queries"| node_rag
node_rag -->|"indexes and searches"| node_vectorstore
node_rag -->|"tracks resources"| node_metadata
node_rag -->|"embeds and generates"| node_ollama
node_vectorstore -->|"returns matches"| node_rag
node_rag -->|"streams answer and sources"| node_apiapp
node_apiapp -->|"sends stream events"| node_chatui
node_apiapp -->|"returns resource records"| node_resourceui

click node_appui "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/App.jsx"
click node_ingestui "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ResourceIngestion.jsx"
click node_chatui "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ChatInterface.jsx"
click node_resourceui "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ResourceList.jsx"
click node_navbar "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/Navbar.jsx"
click node_settingsui "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/SettingsModal.jsx"
click node_apiapp "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/app.py"
click node_config "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/config.py"
click node_youtube "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/youtube.py"
click node_web "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/web_scraper.py"
click node_pdf "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/pdf_loader.py"
click node_notes "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/app.py"
click node_rag "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py"
click node_vectorstore "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py"
click node_metadata "https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.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_appui,node_ingestui,node_chatui,node_resourceui,node_navbar,node_settingsui,node_user toneBlue
class node_apiapp,node_config toneAmber
class node_youtube,node_web,node_pdf,node_notes toneMint
class node_rag,node_vectorstore,node_metadata toneRose
class node_ollama toneIndigo
```

## Components

### Assistant UI

- [App and sessions](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Resource ingestion](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ResourceIngestion.jsx): `frontend/src/components/ResourceIngestion.jsx`
- [Chat and citations](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ChatInterface.jsx): `frontend/src/components/ChatInterface.jsx`
- [Resource list](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/ResourceList.jsx): `frontend/src/components/ResourceList.jsx`
- [Model and session controls](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/Navbar.jsx): `frontend/src/components/Navbar.jsx`
- [Model settings](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/frontend/src/components/SettingsModal.jsx): `frontend/src/components/SettingsModal.jsx`

### API and orchestration

- [FastAPI routes](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/app.py): `backend/app.py`
- [Runtime settings](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/config.py): `backend/config.py`

### Ingestion and extraction

- [YouTube transcript](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/youtube.py): `backend/scrapers/youtube.py`
- [Web article scraper](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/web_scraper.py): `backend/scrapers/web_scraper.py`
- [PDF extraction](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/scrapers/pdf_loader.py): `backend/scrapers/pdf_loader.py`
- [Text notes](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/app.py): `backend/app.py`

### Index and retrieval

- [RAG engine](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py): `backend/rag_engine.py`
- [FAISS index](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py): `backend/rag_engine.py`
- [Resource metadata](https://github.com/prajjwal2051/ai-based-summarizer/blob/main/backend/rag_engine.py): `backend/rag_engine.py`

### Local inference

- **Ollama Gemma**

### Other components

- **User**

## Connections

- User → App and sessions: uses (evidence: `README.md`)
- App and sessions → Resource ingestion: renders (evidence: `frontend/src/App.jsx`)
- App and sessions → Resource list: renders (evidence: `frontend/src/App.jsx`)
- App and sessions → Chat and citations: renders (evidence: `frontend/src/App.jsx`)
- App and sessions → Model and session controls: renders (evidence: `frontend/src/App.jsx`)
- App and sessions → Model settings: renders (evidence: `frontend/src/App.jsx`)
- Resource ingestion → FastAPI routes: submits sources (evidence: `README.md`)
- Chat and citations → FastAPI routes: streams questions (evidence: `README.md`)
- App and sessions → FastAPI routes: manages resources (evidence: `frontend/src/App.jsx`)
- Model and session controls → App and sessions: triggers controls (evidence: `frontend/src/App.jsx`)
- Model settings → FastAPI routes: updates settings (evidence: `README.md`)
- FastAPI routes → Runtime settings: reads settings (evidence: `backend/app.py`)
- FastAPI routes → YouTube transcript: fetches transcript (evidence: `backend/app.py`)
- FastAPI routes → Web article scraper: scrapes article (evidence: `backend/app.py`)
- FastAPI routes → PDF extraction: extracts pages (evidence: `backend/app.py`)
- FastAPI routes → Text notes: accepts text (evidence: `backend/app.py`)
- YouTube transcript → RAG engine: supplies documents (evidence: `README.md`)
- Web article scraper → RAG engine: supplies documents (evidence: `README.md`)
- PDF extraction → RAG engine: supplies documents (evidence: `README.md`)
- Text notes → RAG engine: supplies documents (evidence: `README.md`)
- FastAPI routes → RAG engine: ingests and queries (evidence: `backend/app.py`)
- RAG engine → FAISS index: indexes and searches (evidence: `README.md`)
- RAG engine → Resource metadata: tracks resources (evidence: `README.md`)
- RAG engine → Ollama Gemma: embeds and generates (evidence: `README.md`)
- FAISS index → RAG engine: returns matches (evidence: `README.md`)
- RAG engine → FastAPI routes: streams answer and sources (evidence: `backend/app.py`)
- FastAPI routes → Chat and citations: sends stream events (evidence: `README.md`)
- FastAPI routes → Resource list: returns resource records (evidence: `README.md`)
