# prshntkrr/rag_pipe architecture

> Architecture diagram of the GitHub repository prshntkrr/rag_pipe, 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/prshntkrr/rag_pipe
- Repository: https://github.com/prshntkrr/rag_pipe

## Overview

This repository is a FastAPI document-ingestion and retrieval-augmented generation (RAG) API. Its main workflows accept documents for ingestion into a vector store, then embed user questions, retrieve relevant chunks, generate answers, return source references, and log query outcomes. Collection management and query analytics are additional product areas visible in the tree. The ingestion and query paths are grounded in sampled source; several collection, analytics, and provider-factory internals are represented by their exact tree paths, but their detailed wiring was not sampled.

Main entry points: [`app/services/ingestion_service.py`](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/ingestion_service.py) (Ingestion service), [`app/services/query_service.py`](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/query_service.py) (Query service), [`app/main.py`](https://github.com/prshntkrr/rag_pipe/blob/main/app/main.py) (FastAPI app), [`app/api/collection.py`](https://github.com/prshntkrr/rag_pipe/blob/main/app/api/collection.py) (Collection API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry points"]
  node_main["FastAPI app<br/>[main.py]"]
  node_document_api["Document API<br/>[document.py]"]
  node_query_api["Query API<br/>[query.py]"]
  node_collection_api["Collection API<br/>[collection.py]"]
  node_collection_service["Collection services"]
  node_document_collection_service["Document collection service"]
end

subgraph group_ingest["Document ingestion"]
  node_ingestion["Ingestion service"]
  node_loaders["Document loaders<br/>[loader_factory.py]"]
  node_splitter["Chunk splitter<br/>[splitter.py]"]
  node_embedding_factory["Embedding factory"]
  node_embedding_provider["Embedding providers"]
end

subgraph group_rag["Retrieval and answers"]
  node_query_service["Query service<br/>[query_service.py]"]
  node_retriever["Retriever<br/>[retriever.py]"]
  node_prompt_builder["Prompt builder<br/>[prompt_builder.py]"]
  node_llm_service["OpenAI service<br/>[openai_service.py]"]
  node_retrieval_service["Retrieval service"]
end

subgraph group_state["Persistence and integrations"]
  node_s3_service["S3 service<br/>[s3_service.py]"]
  node_vectordb_factory["Vector DB factory"]
  node_chroma[("Chroma vector store<br/>[chroma_service.py]")]
  node_query_repository["Query log repository"]
  node_query_log["Query log model<br/>[rag_query_log.py]"]
  node_collection_repository["Collection repository"]
  node_collection_document_repository["Collection-document repository"]
  node_analytics["Query analytics"]
end

node_user(("API client"))
node_s3[("Amazon S3")]
node_openai{{"OpenAI API"}}
node_sql_db[("SQL database")]

node_user -->|"sends requests"| node_main
node_main -->|"registers router"| node_document_api
node_main -->|"registers router"| node_query_api
node_main -->|"registers router"| node_collection_api
node_query_api -->|"calls ask"| node_query_service
node_query_service -->|"retrieves matches"| node_retriever
node_query_service -->|"builds prompt"| node_prompt_builder
node_query_service -->|"generates answer"| node_llm_service
node_query_service -->|"writes query log"| node_query_repository
node_retriever -->|"embeds question"| node_embedding_factory
node_retriever -->|"searches vectors"| node_vectordb_factory
node_llm_service -->|"invokes model"| node_openai
node_query_repository -->|"commits and queries"| node_sql_db
node_ingestion -->|"downloads file"| node_s3_service
node_s3_service -.-> node_s3
node_ingestion -->|"loads document"| node_loaders
node_ingestion -->|"splits pages"| node_splitter
node_ingestion -->|"embeds chunks"| node_embedding_factory
node_ingestion -->|"stores vectors"| node_vectordb_factory
node_collection_api -.-> node_collection_service
node_collection_api -.-> node_document_collection_service
node_collection_service -.-> node_collection_repository
node_document_collection_service -.-> node_collection_document_repository
node_analytics -.-> node_query_repository

click node_main "https://github.com/prshntkrr/rag_pipe/blob/main/app/main.py"
click node_document_api "https://github.com/prshntkrr/rag_pipe/blob/main/app/api/document.py"
click node_query_api "https://github.com/prshntkrr/rag_pipe/blob/main/app/api/query.py"
click node_collection_api "https://github.com/prshntkrr/rag_pipe/blob/main/app/api/collection.py"
click node_ingestion "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/ingestion_service.py"
click node_loaders "https://github.com/prshntkrr/rag_pipe/blob/main/app/loaders/loader_factory.py"
click node_splitter "https://github.com/prshntkrr/rag_pipe/blob/main/app/chunking/splitter.py"
click node_embedding_factory "https://github.com/prshntkrr/rag_pipe/blob/main/app/embeddings/embedding_factory.py"
click node_embedding_provider "https://github.com/prshntkrr/rag_pipe/blob/main/app/embeddings/openai_embedding.py"
click node_s3_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/s3_service.py"
click node_vectordb_factory "https://github.com/prshntkrr/rag_pipe/blob/main/app/vectordb/vectordb_factory.py"
click node_chroma "https://github.com/prshntkrr/rag_pipe/blob/main/app/vectordb/chroma_service.py"
click node_query_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/query_service.py"
click node_retriever "https://github.com/prshntkrr/rag_pipe/blob/main/app/retrieval/retriever.py"
click node_prompt_builder "https://github.com/prshntkrr/rag_pipe/blob/main/app/prompts/prompt_builder.py"
click node_llm_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/llm/openai_service.py"
click node_query_repository "https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/rag_query_repository.py"
click node_query_log "https://github.com/prshntkrr/rag_pipe/blob/main/app/models/rag_query_log.py"
click node_collection_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/collection_service.py"
click node_document_collection_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/collection_document_service.py"
click node_collection_repository "https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/collection_repository.py"
click node_collection_document_repository "https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/collection_document_repository.py"
click node_analytics "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/analytics_service.py"
click node_retrieval_service "https://github.com/prshntkrr/rag_pipe/blob/main/app/services/retrieval_service.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_main,node_document_api,node_query_api,node_collection_api,node_collection_service,node_document_collection_service,node_user toneBlue
class node_ingestion,node_loaders,node_splitter,node_embedding_factory,node_embedding_provider,node_s3,node_sql_db toneAmber
class node_query_service,node_retriever,node_prompt_builder,node_llm_service,node_retrieval_service,node_openai toneMint
class node_s3_service,node_vectordb_factory,node_chroma,node_query_repository,node_query_log,node_collection_repository,node_collection_document_repository,node_analytics toneRose
```

## Components

### API entry points

- [FastAPI app](https://github.com/prshntkrr/rag_pipe/blob/main/app/main.py): `app/main.py`
- [Document API](https://github.com/prshntkrr/rag_pipe/blob/main/app/api/document.py): `app/api/document.py`
- [Query API](https://github.com/prshntkrr/rag_pipe/blob/main/app/api/query.py): `app/api/query.py`
- [Collection API](https://github.com/prshntkrr/rag_pipe/blob/main/app/api/collection.py): `app/api/collection.py`
- [Collection services](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/collection_service.py): `app/services/collection_service.py`
- [Document collection service](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/collection_document_service.py): `app/services/collection_document_service.py`

### Document ingestion

- [Ingestion service](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/ingestion_service.py): `app/services/ingestion_service.py`
- [Document loaders](https://github.com/prshntkrr/rag_pipe/blob/main/app/loaders/loader_factory.py): `app/loaders/loader_factory.py`
- [Chunk splitter](https://github.com/prshntkrr/rag_pipe/blob/main/app/chunking/splitter.py): `app/chunking/splitter.py`
- [Embedding factory](https://github.com/prshntkrr/rag_pipe/blob/main/app/embeddings/embedding_factory.py): `app/embeddings/embedding_factory.py`
- [Embedding providers](https://github.com/prshntkrr/rag_pipe/blob/main/app/embeddings/openai_embedding.py): `app/embeddings/openai_embedding.py`

### Retrieval and answers

- [Query service](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/query_service.py): `app/services/query_service.py`
- [Retriever](https://github.com/prshntkrr/rag_pipe/blob/main/app/retrieval/retriever.py): `app/retrieval/retriever.py`
- [Prompt builder](https://github.com/prshntkrr/rag_pipe/blob/main/app/prompts/prompt_builder.py): `app/prompts/prompt_builder.py`
- [OpenAI service](https://github.com/prshntkrr/rag_pipe/blob/main/app/llm/openai_service.py): `app/llm/openai_service.py`
- [Retrieval service](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/retrieval_service.py): `app/services/retrieval_service.py`

### Persistence and integrations

- [S3 service](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/s3_service.py): `app/services/s3_service.py`
- [Vector DB factory](https://github.com/prshntkrr/rag_pipe/blob/main/app/vectordb/vectordb_factory.py): `app/vectordb/vectordb_factory.py`
- [Chroma vector store](https://github.com/prshntkrr/rag_pipe/blob/main/app/vectordb/chroma_service.py): `app/vectordb/chroma_service.py`
- [Query log repository](https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/rag_query_repository.py): `app/repositories/rag_query_repository.py`
- [Query log model](https://github.com/prshntkrr/rag_pipe/blob/main/app/models/rag_query_log.py): `app/models/rag_query_log.py`
- [Collection repository](https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/collection_repository.py): `app/repositories/collection_repository.py`
- [Collection-document repository](https://github.com/prshntkrr/rag_pipe/blob/main/app/repositories/collection_document_repository.py): `app/repositories/collection_document_repository.py`
- [Query analytics](https://github.com/prshntkrr/rag_pipe/blob/main/app/services/analytics_service.py): `app/services/analytics_service.py`

### Other components

- **API client**
- **Amazon S3**
- **OpenAI API**
- **SQL database**

## Connections

- API client → FastAPI app: sends requests
- FastAPI app → Document API: registers router
- FastAPI app → Query API: registers router
- FastAPI app → Collection API: registers router
- Query API → Query service: calls ask
- Query service → Retriever: retrieves matches
- Query service → Prompt builder: builds prompt
- Query service → OpenAI service: generates answer
- Query service → Query log repository: writes query log
- Retriever → Embedding factory: embeds question
- Retriever → Vector DB factory: searches vectors
- OpenAI service → OpenAI API: invokes model
- Query log repository → SQL database: commits and queries
- Ingestion service → S3 service: downloads file
- S3 service → Amazon S3
- Ingestion service → Document loaders: loads document
- Ingestion service → Chunk splitter: splits pages
- Ingestion service → Embedding factory: embeds chunks
- Ingestion service → Vector DB factory: stores vectors
- Collection API → Collection services
- Collection API → Document collection service
- Collection services → Collection repository
- Document collection service → Collection-document repository
- Query analytics → Query log repository
