# fakruddinbabadudekula/askyourdocs architecture

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

- Interactive diagram: https://gitdiagram.com/fakruddinbabadudekula/askyourdocs
- Repository: https://github.com/fakruddinbabadudekula/askyourdocs

## Overview

Notebook RAG Backend is a FastAPI service for accounts, notebooks, PDF ingestion, and document-grounded chat. The main workflow is client request → API route → application use case: uploads are stored, parsed and chunked, then indexed with user/notebook metadata; chat retrieves relevant chunks and generates a cited answer. Authentication and notebook/message persistence are separate capabilities. The graph follows the documented ports-and-adapters design. Several implementation files were not sampled, so documented relationships are included where explicit; uncertain links are omitted.

Main entry points: [`app/main.py`](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/main.py) (FastAPI app), [`app/application/file_ingestion_service.py`](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/file_ingestion_service.py) (File ingestion), [`app/application/chat_service.py`](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/chat_service.py) (Chat service), [`app/application/auth_service.py`](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/auth_service.py) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_http["HTTP interface"]
  node_api["FastAPI app<br/>[main.py]"]
  node_auth_routes["Auth routes<br/>[auth.py]"]
  node_register_route["Registration route<br/>[register.py]"]
  node_upload_route["Upload route<br/>[upload.py]"]
  node_chat_route["Chat route<br/>[chat.py]"]
end

subgraph group_application["Application use cases"]
  node_auth_service["Authentication<br/>[auth_service.py]"]
  node_ingestion["File ingestion"]
  node_chat_service["Chat service<br/>[chat_service.py]"]
  node_security["Token security<br/>[security.py]"]
end

subgraph group_rag["Document RAG"]
  node_doc_processor["Document processing<br/>[doc_processor.py]"]
  node_vector_service["Vector operations"]
  node_workflow["RAG workflow<br/>[workflow.py]"]
  node_llm_adapter["LLM client<br/>[llm_client.py]"]
  node_pdf_loader["PDF loader<br/>[loaders.py]"]
  node_text_splitter["Text splitter<br/>[splitter.py]"]
end

subgraph group_infrastructure["Infrastructure adapters"]
  node_faiss[("FAISS store")]
  node_file_storage["Local file storage"]
  node_uow["Unit of work<br/>[unit_of_work.py]"]
  node_sql_repositories["SQL repositories"]
  node_composition["Dependency composition<br/>[root.py]"]
end

node_client(("Client"))
node_database[("PostgreSQL")]
node_chat_model(("Chat model API"))

node_client -->|"sends requests"| node_api
node_api -->|"registers routes"| node_auth_routes
node_api -->|"registers routes"| node_register_route
node_api -->|"registers routes"| node_upload_route
node_api -->|"registers routes"| node_chat_route
node_auth_routes -->|"calls"| node_auth_service
node_register_route -->|"delegates registration"| node_auth_service
node_upload_route -->|"delegates upload"| node_ingestion
node_chat_route -->|"delegates chat"| node_chat_service
node_auth_service -->|"uses token services"| node_security
node_auth_service -->|"uses repositories"| node_uow
node_ingestion -->|"saves upload"| node_file_storage
node_ingestion -->|"persists metadata"| node_uow
node_ingestion -->|"loads and splits"| node_doc_processor
node_ingestion -->|"indexes chunks"| node_vector_service
node_doc_processor -->|"loads PDFs"| node_pdf_loader
node_doc_processor -->|"splits text"| node_text_splitter
node_chat_service -->|"runs workflow"| node_workflow
node_chat_service -->|"persists messages"| node_uow
node_chat_service -->|"retrieves context"| node_vector_service
node_workflow -->|"retrieves chunks"| node_faiss
node_workflow -->|"generates answer"| node_llm_adapter
node_llm_adapter -->|"invokes model"| node_chat_model
node_vector_service -->|"accesses vectors"| node_faiss
node_uow -->|"coordinates repositories"| node_sql_repositories
node_sql_repositories -->|"persists records"| node_database
node_api -->|"creates container"| node_composition
node_composition -->|"constructs service"| node_ingestion
node_composition -->|"constructs service"| node_chat_service
node_composition -->|"constructs service"| node_auth_service

click node_api "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/main.py"
click node_auth_routes "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/auth.py"
click node_register_route "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/register.py"
click node_upload_route "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/upload.py"
click node_chat_route "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/chat.py"
click node_auth_service "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/auth_service.py"
click node_ingestion "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/file_ingestion_service.py"
click node_chat_service "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/chat_service.py"
click node_security "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/security.py"
click node_doc_processor "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/doc_processor.py"
click node_vector_service "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/vector_store_service.py"
click node_workflow "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/workflow.py"
click node_llm_adapter "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/llm_client.py"
click node_pdf_loader "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/loaders.py"
click node_text_splitter "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/splitter.py"
click node_faiss "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/vector_store/faiss_vector_store.py"
click node_file_storage "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/file_storage_repository.py"
click node_uow "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/unit_of_work.py"
click node_sql_repositories "https://github.com/fakruddinbabadudekula/askyourdocs/tree/main/app/infrastructure/sqlalchemy_repositories"
click node_composition "https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/root.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_api,node_auth_routes,node_register_route,node_upload_route,node_chat_route,node_client toneBlue
class node_auth_service,node_ingestion,node_chat_service,node_security,node_database toneAmber
class node_doc_processor,node_vector_service,node_workflow,node_llm_adapter,node_pdf_loader,node_text_splitter,node_chat_model toneMint
class node_faiss,node_file_storage,node_uow,node_sql_repositories,node_composition toneRose
```

## Components

### HTTP interface

- [FastAPI app](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/main.py): `app/main.py`
- [Auth routes](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/auth.py): `app/interface/api/routes/auth.py`
- [Registration route](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/register.py): `app/interface/api/routes/register.py`
- [Upload route](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/upload.py): `app/interface/api/routes/upload.py`
- [Chat route](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/interface/api/routes/chat.py): `app/interface/api/routes/chat.py`

### Application use cases

- [Authentication](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/auth_service.py): `app/application/auth_service.py`
- [File ingestion](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/file_ingestion_service.py): `app/application/file_ingestion_service.py`
- [Chat service](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/chat_service.py): `app/application/chat_service.py`
- [Token security](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/security.py): `app/application/security.py`

### Document RAG

- [Document processing](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/doc_processor.py): `app/application/doc_processor.py`
- [Vector operations](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/vector_store_service.py): `app/application/vector_store_service.py`
- [RAG workflow](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/application/workflow.py): `app/application/workflow.py`
- [LLM client](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/llm_client.py): `app/infrastructure/rag/llm_client.py`
- [PDF loader](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/loaders.py): `app/infrastructure/rag/loaders.py`
- [Text splitter](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/splitter.py): `app/infrastructure/rag/splitter.py`

### Infrastructure adapters

- [FAISS store](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/rag/vector_store/faiss_vector_store.py): `app/infrastructure/rag/vector_store/faiss_vector_store.py`
- [Local file storage](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/file_storage_repository.py): `app/infrastructure/file_storage_repository.py`
- [Unit of work](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/infrastructure/unit_of_work.py): `app/infrastructure/unit_of_work.py`
- [SQL repositories](https://github.com/fakruddinbabadudekula/askyourdocs/tree/main/app/infrastructure/sqlalchemy_repositories): `app/infrastructure/sqlalchemy_repositories`
- [Dependency composition](https://github.com/fakruddinbabadudekula/askyourdocs/blob/main/app/root.py): `app/root.py`

### Other components

- **Client**
- **PostgreSQL**
- **Chat model API**

## Connections

- Client → FastAPI app: sends requests
- FastAPI app → Auth routes: registers routes (evidence: `app/main.py`)
- FastAPI app → Registration route: registers routes (evidence: `app/main.py`)
- FastAPI app → Upload route: registers routes (evidence: `app/main.py`)
- FastAPI app → Chat route: registers routes (evidence: `app/main.py`)
- Auth routes → Authentication: calls (evidence: `app/interface/api/routes/auth.py`)
- Registration route → Authentication: delegates registration
- Upload route → File ingestion: delegates upload
- Chat route → Chat service: delegates chat
- Authentication → Token security: uses token services (evidence: `app/application/auth_service.py`)
- Authentication → Unit of work: uses repositories (evidence: `app/application/auth_service.py`)
- File ingestion → Local file storage: saves upload (evidence: `app/application/file_ingestion_service.py`)
- File ingestion → Unit of work: persists metadata (evidence: `app/application/file_ingestion_service.py`)
- File ingestion → Document processing: loads and splits (evidence: `app/application/file_ingestion_service.py`)
- File ingestion → Vector operations: indexes chunks (evidence: `app/application/file_ingestion_service.py`)
- Document processing → PDF loader: loads PDFs
- Document processing → Text splitter: splits text
- Chat service → RAG workflow: runs workflow (evidence: `app/application/chat_service.py`)
- Chat service → Unit of work: persists messages (evidence: `app/application/chat_service.py`)
- Chat service → Vector operations: retrieves context (evidence: `app/application/chat_service.py`)
- RAG workflow → FAISS store: retrieves chunks
- RAG workflow → LLM client: generates answer
- LLM client → Chat model API: invokes model (evidence: `app/infrastructure/rag/llm_client.py`)
- Vector operations → FAISS store: accesses vectors
- Unit of work → SQL repositories: coordinates repositories
- SQL repositories → PostgreSQL: persists records
- FastAPI app → Dependency composition: creates container (evidence: `app/main.py`)
- Dependency composition → File ingestion: constructs service (evidence: `app/root.py`)
- Dependency composition → Chat service: constructs service (evidence: `app/root.py`)
- Dependency composition → Authentication: constructs service (evidence: `app/root.py`)
