# princebansal21/chatbot architecture

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

- Interactive diagram: https://gitdiagram.com/princebansal21/chatbot
- Repository: https://github.com/princebansal21/chatbot

## Overview

This is a cloud-agnostic document ingestion and retrieval-augmented generation service. Its main workflow accepts an indexing payload, resolves document and strategy configuration, converts and processes the source, chunks and embeds its content, then indexes vectors; optional image and graph-knowledge-base processing enriches that path. Retrieval strategies and model adapters provide separate capabilities. The graph emphasizes relationships visible in the excerpts or SOURCE INDEX; the README is empty, and several subsystem implementations were not sampled, so uncertain links are omitted.

Main entry points: [`app.py`](https://github.com/princebansal21/chatbot/blob/main/app.py) (Pipeline entry), [`services/document/document_processor.py`](https://github.com/princebansal21/chatbot/blob/main/services/document/document_processor.py) (Document processor), [`services/indexing/indexing_orchestrator.py`](https://github.com/princebansal21/chatbot/blob/main/services/indexing/indexing_orchestrator.py) (Index orchestration), [`services/graph_service.py`](https://github.com/princebansal21/chatbot/blob/main/services/graph_service.py) (Graph knowledge service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Ingestion"]
  node_app["Pipeline entry<br/>[app.py]"]
end

subgraph group_content["Content Processing"]
  node_fetch["Document fetch"]
  node_process["Document processor"]
  node_markdown["Markdown conversion<br/>[markdown.py]"]
  node_image["Image processing<br/>[image_extractor.py]"]
  node_imagechunks["Image chunk generation"]
  node_imageembed["Markdown image embedding"]
  node_markdownstorage["Markdown repository"]
end

subgraph group_index["Indexing"]
  node_indexflow["Index orchestration"]
  node_chunking["Chunking<br/>[chunking.py]"]
  node_embedding["Embedding<br/>[embedding.py]"]
  node_vector["Vector indexing"]
end

subgraph group_rag["RAG Capabilities"]
  node_graphsvc["Graph knowledge service<br/>[graph_service.py]"]
  node_entity["Entity extraction<br/>[__init__.py]"]
  node_resolver["Entity resolution<br/>[entity_resolver.py]"]
  node_graphstore["Graph storage adapter<br/>[__init__.py]"]
  node_retriever["Retrieval strategies"]
  node_hybrid["Hybrid retrieval"]
  node_hierarchical["Hierarchical retrieval"]
  node_graphretrieval["Graph retrieval<br/>[graph_retriever.py]"]
end

subgraph group_platform["Configuration and Adapters"]
  node_config["Strategy resolution"]
  node_fileconfig["File type config"]
  node_factory["Adapter factory<br/>[factory.py]"]
end

node_caller(("Ingestion caller"))
node_vectorstore[("Vector database")]
node_cloud[("Cloud services")]

node_caller -->|"submits payload"| node_app
node_app -->|"resolves strategies"| node_config
node_app -->|"processes document"| node_process
node_app -->|"indexes content"| node_indexflow
node_app -->|"uses graph service"| node_graphsvc
node_config -->|"resolves file type"| node_fileconfig
node_config -->|"selects adapters"| node_factory
node_process -->|"fetches source"| node_fetch
node_process -->|"converts content"| node_markdown
node_process -->|"uses image services"| node_image
node_process -.->|"stores markdown"| node_markdownstorage
node_indexflow -->|"creates chunks"| node_chunking
node_indexflow -->|"creates embeddings"| node_embedding
node_indexflow -->|"indexes chunks"| node_vector
node_indexflow -->|"uses image chunks"| node_imagechunks
node_embedding -->|"creates embedder"| node_factory
node_vector -.->|"writes vectors"| node_vectorstore
node_image -.->|"supports extraction"| node_imagechunks
node_imageembed -.->|"enriches images"| node_imagechunks
node_graphsvc -->|"extracts entities"| node_entity
node_graphsvc -->|"resolves entities"| node_resolver
node_graphsvc -->|"stores graph data"| node_graphstore
node_retriever -.->|"retrieves chunks"| node_vectorstore
node_hybrid -.->|"searches vectors"| node_vectorstore
node_hierarchical -.->|"fetches parents"| node_vectorstore
node_graphretrieval -.->|"queries graph"| node_graphstore
node_factory -.->|"configures providers"| node_cloud

click node_app "https://github.com/princebansal21/chatbot/blob/main/app.py"
click node_fetch "https://github.com/princebansal21/chatbot/blob/main/services/document/document_fetcher.py"
click node_process "https://github.com/princebansal21/chatbot/blob/main/services/document/document_processor.py"
click node_markdown "https://github.com/princebansal21/chatbot/blob/main/services/document/markdown.py"
click node_config "https://github.com/princebansal21/chatbot/blob/main/services/config/strategy_resolver.py"
click node_fileconfig "https://github.com/princebansal21/chatbot/blob/main/services/config/file_type_config_resolver.py"
click node_factory "https://github.com/princebansal21/chatbot/blob/main/rag_lib/factory.py"
click node_indexflow "https://github.com/princebansal21/chatbot/blob/main/services/indexing/indexing_orchestrator.py"
click node_chunking "https://github.com/princebansal21/chatbot/blob/main/services/indexing/chunking.py"
click node_embedding "https://github.com/princebansal21/chatbot/blob/main/services/indexing/embedding.py"
click node_vector "https://github.com/princebansal21/chatbot/blob/main/services/indexing/vectordb_indexer.py"
click node_image "https://github.com/princebansal21/chatbot/blob/main/services/image/image_extractor.py"
click node_imagechunks "https://github.com/princebansal21/chatbot/blob/main/services/image/image_chunk_generator.py"
click node_imageembed "https://github.com/princebansal21/chatbot/blob/main/services/image/markdown_image_embedder.py"
click node_graphsvc "https://github.com/princebansal21/chatbot/blob/main/services/graph_service.py"
click node_entity "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/entity_extraction/__init__.py"
click node_resolver "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/entity_extraction/entity_resolver.py"
click node_graphstore "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/graph/__init__.py"
click node_retriever "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/standard_retriever.py"
click node_hybrid "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/hybrid_retriever.py"
click node_hierarchical "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/hierarchical_retriever.py"
click node_graphretrieval "https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/graph_retriever.py"
click node_markdownstorage "https://github.com/princebansal21/chatbot/blob/main/services/document/document_processor.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 toneBlue
class node_fetch,node_process,node_markdown,node_image,node_imagechunks,node_imageembed,node_markdownstorage,node_vectorstore,node_cloud toneAmber
class node_indexflow,node_chunking,node_embedding,node_vector toneMint
class node_graphsvc,node_entity,node_resolver,node_graphstore,node_retriever,node_hybrid,node_hierarchical,node_graphretrieval toneRose
class node_config,node_fileconfig,node_factory,node_caller toneIndigo
```

## Components

### Ingestion

- [Pipeline entry](https://github.com/princebansal21/chatbot/blob/main/app.py): `app.py`

### Content Processing

- [Document fetch](https://github.com/princebansal21/chatbot/blob/main/services/document/document_fetcher.py): `services/document/document_fetcher.py`
- [Document processor](https://github.com/princebansal21/chatbot/blob/main/services/document/document_processor.py): `services/document/document_processor.py`
- [Markdown conversion](https://github.com/princebansal21/chatbot/blob/main/services/document/markdown.py): `services/document/markdown.py`
- [Image processing](https://github.com/princebansal21/chatbot/blob/main/services/image/image_extractor.py): `services/image/image_extractor.py`
- [Image chunk generation](https://github.com/princebansal21/chatbot/blob/main/services/image/image_chunk_generator.py): `services/image/image_chunk_generator.py`
- [Markdown image embedding](https://github.com/princebansal21/chatbot/blob/main/services/image/markdown_image_embedder.py): `services/image/markdown_image_embedder.py`
- [Markdown repository](https://github.com/princebansal21/chatbot/blob/main/services/document/document_processor.py): `services/document/document_processor.py`

### Indexing

- [Index orchestration](https://github.com/princebansal21/chatbot/blob/main/services/indexing/indexing_orchestrator.py): `services/indexing/indexing_orchestrator.py`
- [Chunking](https://github.com/princebansal21/chatbot/blob/main/services/indexing/chunking.py): `services/indexing/chunking.py`
- [Embedding](https://github.com/princebansal21/chatbot/blob/main/services/indexing/embedding.py): `services/indexing/embedding.py`
- [Vector indexing](https://github.com/princebansal21/chatbot/blob/main/services/indexing/vectordb_indexer.py): `services/indexing/vectordb_indexer.py`

### RAG Capabilities

- [Graph knowledge service](https://github.com/princebansal21/chatbot/blob/main/services/graph_service.py): `services/graph_service.py`
- [Entity extraction](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/entity_extraction/__init__.py): `rag_lib/adapters/entity_extraction/__init__.py`
- [Entity resolution](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/entity_extraction/entity_resolver.py): `rag_lib/adapters/entity_extraction/entity_resolver.py`
- [Graph storage adapter](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/graph/__init__.py): `rag_lib/adapters/graph/__init__.py`
- [Retrieval strategies](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/standard_retriever.py): `rag_lib/adapters/retriever/standard_retriever.py`
- [Hybrid retrieval](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/hybrid_retriever.py): `rag_lib/adapters/retriever/hybrid_retriever.py`
- [Hierarchical retrieval](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/hierarchical_retriever.py): `rag_lib/adapters/retriever/hierarchical_retriever.py`
- [Graph retrieval](https://github.com/princebansal21/chatbot/blob/main/rag_lib/adapters/retriever/graph_retriever.py): `rag_lib/adapters/retriever/graph_retriever.py`

### Configuration and Adapters

- [Strategy resolution](https://github.com/princebansal21/chatbot/blob/main/services/config/strategy_resolver.py): `services/config/strategy_resolver.py`
- [File type config](https://github.com/princebansal21/chatbot/blob/main/services/config/file_type_config_resolver.py): `services/config/file_type_config_resolver.py`
- [Adapter factory](https://github.com/princebansal21/chatbot/blob/main/rag_lib/factory.py): `rag_lib/factory.py`

### Other components

- **Ingestion caller**
- **Vector database**
- **Cloud services**

## Connections

- Ingestion caller → Pipeline entry: submits payload
- Pipeline entry → Strategy resolution: resolves strategies (evidence: `app.py`)
- Pipeline entry → Document processor: processes document (evidence: `app.py`)
- Pipeline entry → Index orchestration: indexes content (evidence: `app.py`)
- Pipeline entry → Graph knowledge service: uses graph service (evidence: `app.py`)
- Strategy resolution → File type config: resolves file type (evidence: `services/config/strategy_resolver.py`)
- Strategy resolution → Adapter factory: selects adapters (evidence: `services/config/strategy_resolver.py`)
- Document processor → Document fetch: fetches source (evidence: `services/document/document_processor.py`)
- Document processor → Markdown conversion: converts content (evidence: `services/document/document_processor.py`)
- Document processor → Image processing: uses image services (evidence: `services/document/document_processor.py`)
- Document processor → Markdown repository: stores markdown (evidence: `services/document/document_processor.py`)
- Index orchestration → Chunking: creates chunks (evidence: `services/indexing/indexing_orchestrator.py`)
- Index orchestration → Embedding: creates embeddings (evidence: `services/indexing/indexing_orchestrator.py`)
- Index orchestration → Vector indexing: indexes chunks (evidence: `services/indexing/indexing_orchestrator.py`)
- Index orchestration → Image chunk generation: uses image chunks (evidence: `services/indexing/indexing_orchestrator.py`)
- Embedding → Adapter factory: creates embedder (evidence: `services/indexing/embedding.py`)
- Vector indexing → Vector database: writes vectors
- Image processing → Image chunk generation: supports extraction
- Markdown image embedding → Image chunk generation: enriches images
- Graph knowledge service → Entity extraction: extracts entities (evidence: `services/graph_service.py`)
- Graph knowledge service → Entity resolution: resolves entities (evidence: `services/graph_service.py`)
- Graph knowledge service → Graph storage adapter: stores graph data (evidence: `services/graph_service.py`)
- Retrieval strategies → Vector database: retrieves chunks
- Hybrid retrieval → Vector database: searches vectors
- Hierarchical retrieval → Vector database: fetches parents
- Graph retrieval → Graph storage adapter: queries graph
- Adapter factory → Cloud services: configures providers
