# praveen-devarakota/campusgpt-backend architecture

> Architecture diagram of the GitHub repository praveen-devarakota/campusgpt-backend, 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/praveen-devarakota/campusgpt-backend
- Repository: https://github.com/praveen-devarakota/campusgpt-backend

## Overview

CampusGPT is a Flask backend for answering questions about college documents and student attendance. Its main workflow routes chat requests to either attendance lookup or document retrieval, then returns an answer with source details. Document indexing is a separate preparation path that loads PDFs, chunks and annotates their text, and stores embeddings in ChromaDB. The graph follows the sampled source and README; the indexing entry point and some internal implementations were not sampled, so their wiring is not inferred.

Main entry points: [`rag/vectorstore.py`](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/vectorstore.py) (Index builder), [`app.py`](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/app.py) (Flask chat API), [`rag/retriever.py`](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/retriever.py) (Semantic retriever), [`rag/llm.py`](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/llm.py) (Answer generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Chat API"]
  node_app["Flask chat API<br/>[app.py]"]
end

subgraph group_rag["Document RAG"]
  node_embedding_model["Embedding model<br/>[embeddings.py]"]
  node_chroma[("Chroma collection")]
  node_retriever["Semantic retriever<br/>[retriever.py]"]
  node_llm["Answer generation<br/>[llm.py]"]
  node_metadata_search["Metadata search<br/>[metadata_search.py]"]
  node_metadata_file["Document metadata<br/>[metadata.json]"]
end

subgraph group_index["Document Indexing"]
  node_question_papers["Question-paper PDFs"]
  node_loader["PDF OCR loader<br/>[loader.py]"]
  node_chunker["Document chunker<br/>[chunker.py]"]
  node_metadata_extractor["Source metadata"]
  node_vectorstore["Index builder<br/>[vectorstore.py]"]
end

subgraph group_attendance["Attendance"]
  node_attendance_pdf["Attendance PDF<br/>[attendance.pdf]"]
  node_attendance_query["Attendance query"]
  node_attendance_parser["Attendance OCR parser"]
end

node_user(("Campus user"))
node_groq["Groq API"]

node_user -->|"submits query"| node_app
node_app -->|"returns answer"| node_user
node_app -->|"checks attendance"| node_attendance_query
node_attendance_query -->|"looks up record"| node_attendance_parser
node_attendance_parser -->|"OCR reads"| node_attendance_pdf
node_app -->|"retrieves documents"| node_retriever
node_retriever -->|"embeds query"| node_embedding_model
node_retriever -->|"searches"| node_chroma
node_app -->|"generates answer"| node_llm
node_llm -->|"requests completion"| node_groq
node_vectorstore -->|"loads PDFs"| node_loader
node_loader -->|"OCR reads"| node_question_papers
node_vectorstore -->|"chunks documents"| node_chunker
node_vectorstore -->|"embeds chunks"| node_embedding_model
node_vectorstore -->|"extracts metadata"| node_metadata_extractor
node_vectorstore -->|"stores vectors"| node_chroma
node_metadata_search -->|"searches"| node_metadata_file

click node_app "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/app.py"
click node_question_papers "https://github.com/praveen-devarakota/campusgpt-backend/tree/main/data/question_papers"
click node_attendance_pdf "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/data/attendance/attendance.pdf"
click node_loader "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/loader.py"
click node_chunker "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/chunker.py"
click node_metadata_extractor "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/metadata_extractor.py"
click node_vectorstore "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/vectorstore.py"
click node_embedding_model "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/embeddings.py"
click node_chroma "https://github.com/praveen-devarakota/campusgpt-backend/tree/main/chroma_db"
click node_retriever "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/retriever.py"
click node_llm "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/llm.py"
click node_attendance_query "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/attendance_query.py"
click node_attendance_parser "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/attendance_parser.py"
click node_metadata_search "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/metadata_search.py"
click node_metadata_file "https://github.com/praveen-devarakota/campusgpt-backend/blob/main/metadata/metadata.json"

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_user toneBlue
class node_embedding_model,node_chroma,node_retriever,node_llm,node_metadata_search,node_metadata_file toneAmber
class node_question_papers,node_loader,node_chunker,node_metadata_extractor,node_vectorstore,node_groq toneMint
class node_attendance_pdf,node_attendance_query,node_attendance_parser toneRose
```

## Components

### Chat API

- [Flask chat API](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/app.py): `app.py`

### Document RAG

- [Embedding model](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/embeddings.py): `rag/embeddings.py`
- [Chroma collection](https://github.com/praveen-devarakota/campusgpt-backend/tree/main/chroma_db): `chroma_db`
- [Semantic retriever](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/retriever.py): `rag/retriever.py`
- [Answer generation](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/llm.py): `rag/llm.py`
- [Metadata search](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/metadata_search.py): `utils/metadata_search.py`
- [Document metadata](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/metadata/metadata.json): `metadata/metadata.json`

### Document Indexing

- [Question-paper PDFs](https://github.com/praveen-devarakota/campusgpt-backend/tree/main/data/question_papers): `data/question_papers`
- [PDF OCR loader](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/loader.py): `rag/loader.py`
- [Document chunker](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/chunker.py): `rag/chunker.py`
- [Source metadata](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/metadata_extractor.py): `rag/metadata_extractor.py`
- [Index builder](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/rag/vectorstore.py): `rag/vectorstore.py`

### Attendance

- [Attendance PDF](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/data/attendance/attendance.pdf): `data/attendance/attendance.pdf`
- [Attendance query](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/attendance_query.py): `utils/attendance_query.py`
- [Attendance OCR parser](https://github.com/praveen-devarakota/campusgpt-backend/blob/main/utils/attendance_parser.py): `utils/attendance_parser.py`

### Other components

- **Campus user**
- **Groq API**

## Connections

- Campus user → Flask chat API: submits query
- Flask chat API → Campus user: returns answer
- Flask chat API → Attendance query: checks attendance
- Attendance query → Attendance OCR parser: looks up record
- Attendance OCR parser → Attendance PDF: OCR reads
- Flask chat API → Semantic retriever: retrieves documents
- Semantic retriever → Embedding model: embeds query
- Semantic retriever → Chroma collection: searches
- Flask chat API → Answer generation: generates answer
- Answer generation → Groq API: requests completion
- Index builder → PDF OCR loader: loads PDFs
- PDF OCR loader → Question-paper PDFs: OCR reads
- Index builder → Document chunker: chunks documents
- Index builder → Embedding model: embeds chunks
- Index builder → Source metadata: extracts metadata
- Index builder → Chroma collection: stores vectors
- Metadata search → Document metadata: searches
