# adityajakkula7/askiiita architecture

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

- Interactive diagram: https://gitdiagram.com/adityajakkula7/askiiita
- Repository: https://github.com/adityajakkula7/askiiita

## Overview

AskIIITA is a campus-information RAG chatbot with a Streamlit interface and Flask API endpoints. Users sign in, ask questions, and receive answers grounded in retrieved institutional documents; admins can inspect query audit logs. Separately, ingestion loads and chunks PDF/TXT documents, adds access levels, embeds them, and stores them for retrieval. Authentication and role-based access span the chat and API paths. The README documents the overall RAG stack; app.py excerpts are partial, so some chat-side service links rely on that documentation rather than inspected call sites.

Main entry points: [`api/query.py`](https://github.com/adityajakkula7/askiiita/blob/main/api/query.py) (Query Endpoint), [`auth.py`](https://github.com/adityajakkula7/askiiita/blob/main/auth.py) (Auth Helpers), [`app.py`](https://github.com/adityajakkula7/askiiita/blob/main/app.py) (Chat RAG), [`api/audit_logs.py`](https://github.com/adityajakkula7/askiiita/blob/main/api/audit_logs.py) (Audit Endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Chat Experience"]
  node_chat["Streamlit Chat<br/>[app.py]"]
  node_chat_rag["Chat RAG<br/>[app.py]"]
end

subgraph group_api["API Services"]
  node_api_login["Login Endpoint<br/>[login.py]"]
  node_api_register["Registration Endpoint<br/>[register.py]"]
  node_api_query["Query Endpoint<br/>[query.py]"]
  node_api_audit["Audit Endpoint<br/>[audit_logs.py]"]
end

subgraph group_knowledge["Knowledge Pipeline"]
  node_documents["Campus Documents"]
  node_ingest["Document Ingestion<br/>[ingest.py]"]
  node_local_search["Local Vector Search<br/>[local_vector.py]"]
  node_atlas[("Atlas Vector Store")]
  node_gemini_embed["Gemini Embeddings"]
  node_gemini_llm["Gemini LLM"]
end

subgraph group_identity["Identity and Audit"]
  node_auth["Auth Helpers<br/>[auth.py]"]
  node_audit_store[("Audit Records<br/>[query.py]")]
  node_user_store[("User Records<br/>[auth.py]")]
end

node_user(("User"))
node_admin(("Admin"))

node_user -->|"asks questions"| node_chat
node_chat -->|"submits queries"| node_chat_rag
node_chat -->|"authenticates"| node_auth
node_chat_rag -.->|"retrieves chunks"| node_atlas
node_chat_rag -.->|"embeds query"| node_gemini_embed
node_chat_rag -.->|"generates answer"| node_gemini_llm
node_user -->|"signs in"| node_api_login
node_user -->|"registers account"| node_api_register
node_user -->|"submits query"| node_api_query
node_admin -->|"requests logs"| node_api_audit
node_api_login -->|"verifies credentials"| node_auth
node_api_register -->|"creates user"| node_auth
node_api_query -->|"verifies token"| node_auth
node_api_audit -->|"verifies token"| node_auth
node_auth -->|"reads and writes"| node_user_store
node_documents -->|"loads files"| node_ingest
node_ingest -->|"embeds chunks"| node_gemini_embed
node_ingest -->|"stores chunks"| node_atlas
node_api_query -->|"retrieves chunks"| node_atlas
node_api_query -->|"falls back to search"| node_local_search
node_local_search -->|"embeds query"| node_gemini_embed
node_local_search -->|"loads source files"| node_documents
node_api_query -->|"generates answer"| node_gemini_llm
node_api_query -->|"writes query log"| node_audit_store
node_api_audit -->|"reads recent logs"| node_audit_store

click node_chat "https://github.com/adityajakkula7/askiiita/blob/main/app.py"
click node_chat_rag "https://github.com/adityajakkula7/askiiita/blob/main/app.py"
click node_api_login "https://github.com/adityajakkula7/askiiita/blob/main/api/login.py"
click node_api_register "https://github.com/adityajakkula7/askiiita/blob/main/api/register.py"
click node_api_query "https://github.com/adityajakkula7/askiiita/blob/main/api/query.py"
click node_api_audit "https://github.com/adityajakkula7/askiiita/blob/main/api/audit_logs.py"
click node_auth "https://github.com/adityajakkula7/askiiita/blob/main/auth.py"
click node_audit_store "https://github.com/adityajakkula7/askiiita/blob/main/api/query.py"
click node_documents "https://github.com/adityajakkula7/askiiita/tree/main/data"
click node_ingest "https://github.com/adityajakkula7/askiiita/blob/main/ingest.py"
click node_local_search "https://github.com/adityajakkula7/askiiita/blob/main/local_vector.py"
click node_user_store "https://github.com/adityajakkula7/askiiita/blob/main/auth.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_chat,node_chat_rag,node_user toneBlue
class node_api_login,node_api_register,node_api_query,node_api_audit toneAmber
class node_documents,node_ingest,node_local_search,node_atlas,node_gemini_embed,node_gemini_llm toneMint
class node_auth,node_audit_store,node_user_store toneRose
class node_admin toneIndigo
```

## Components

### Chat Experience

- [Streamlit Chat](https://github.com/adityajakkula7/askiiita/blob/main/app.py): `app.py`
- [Chat RAG](https://github.com/adityajakkula7/askiiita/blob/main/app.py): `app.py`

### API Services

- [Login Endpoint](https://github.com/adityajakkula7/askiiita/blob/main/api/login.py): `api/login.py`
- [Registration Endpoint](https://github.com/adityajakkula7/askiiita/blob/main/api/register.py): `api/register.py`
- [Query Endpoint](https://github.com/adityajakkula7/askiiita/blob/main/api/query.py): `api/query.py`
- [Audit Endpoint](https://github.com/adityajakkula7/askiiita/blob/main/api/audit_logs.py): `api/audit_logs.py`

### Knowledge Pipeline

- [Campus Documents](https://github.com/adityajakkula7/askiiita/tree/main/data): `data`
- [Document Ingestion](https://github.com/adityajakkula7/askiiita/blob/main/ingest.py): `ingest.py`
- [Local Vector Search](https://github.com/adityajakkula7/askiiita/blob/main/local_vector.py): `local_vector.py`
- **Atlas Vector Store**
- **Gemini Embeddings**
- **Gemini LLM**

### Identity and Audit

- [Auth Helpers](https://github.com/adityajakkula7/askiiita/blob/main/auth.py): `auth.py`
- [Audit Records](https://github.com/adityajakkula7/askiiita/blob/main/api/query.py): `api/query.py`
- [User Records](https://github.com/adityajakkula7/askiiita/blob/main/auth.py): `auth.py`

### Other components

- **User**
- **Admin**

## Connections

- User → Streamlit Chat: asks questions (evidence: `README.md`)
- Streamlit Chat → Chat RAG: submits queries (evidence: `app.py`)
- Streamlit Chat → Auth Helpers: authenticates (evidence: `app.py`)
- Chat RAG → Atlas Vector Store: retrieves chunks (evidence: `README.md`)
- Chat RAG → Gemini Embeddings: embeds query (evidence: `README.md`)
- Chat RAG → Gemini LLM: generates answer (evidence: `README.md`)
- User → Login Endpoint: signs in (evidence: `api/login.py`)
- User → Registration Endpoint: registers account (evidence: `api/register.py`)
- User → Query Endpoint: submits query (evidence: `api/query.py`)
- Admin → Audit Endpoint: requests logs (evidence: `api/audit_logs.py`)
- Login Endpoint → Auth Helpers: verifies credentials (evidence: `api/login.py`)
- Registration Endpoint → Auth Helpers: creates user (evidence: `api/register.py`)
- Query Endpoint → Auth Helpers: verifies token (evidence: `api/query.py`)
- Audit Endpoint → Auth Helpers: verifies token (evidence: `api/audit_logs.py`)
- Auth Helpers → User Records: reads and writes (evidence: `auth.py`)
- Campus Documents → Document Ingestion: loads files (evidence: `ingest.py`)
- Document Ingestion → Gemini Embeddings: embeds chunks (evidence: `ingest.py`)
- Document Ingestion → Atlas Vector Store: stores chunks (evidence: `ingest.py`)
- Query Endpoint → Atlas Vector Store: retrieves chunks (evidence: `api/query.py`)
- Query Endpoint → Local Vector Search: falls back to search (evidence: `api/query.py`)
- Local Vector Search → Gemini Embeddings: embeds query (evidence: `local_vector.py`)
- Local Vector Search → Campus Documents: loads source files (evidence: `local_vector.py`)
- Query Endpoint → Gemini LLM: generates answer (evidence: `api/query.py`)
- Query Endpoint → Audit Records: writes query log (evidence: `api/query.py`)
- Audit Endpoint → Audit Records: reads recent logs (evidence: `api/audit_logs.py`)
