Agentic-RagBot / api /ARCHITECTURE.md
Nikhil Pravin Pise
docs: update all documentation to reflect current codebase state
aefac4f
# RagBot API - Architecture Diagrams
## System Architecture
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ RagBot API Server β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Cloud LLM API │◄────────────── FastAPI Server β”‚ β”‚
β”‚ β”‚ (Groq/Gemini) β”‚ LLM Calls β”‚ Port: 8000 β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Models: β”‚ β”‚ Endpoints: β”‚ β”‚
β”‚ β”‚ - LLaMA 3.3-70Bβ”‚ β”‚ - /api/v1/health β”‚ β”‚
β”‚ β”‚ - Gemini Flash β”‚ β”‚ - /api/v1/biomarkers β”‚ β”‚
β”‚ β”‚ (or Ollama) β”‚ β”‚ - /api/v1/analyze/* β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ RagBot Core System β”‚ β”‚
β”‚ β”‚ (Imported Package) β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ - 6 Specialist Agents β”‚ β”‚
β”‚ β”‚ - LangGraph Workflow β”‚ β”‚
β”‚ β”‚ - FAISS Vector Store β”‚ β”‚
β”‚ β”‚ - 2,609 medical chunks β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β–²
β”‚
HTTP Requests (JSON)
β”‚
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Backend Server β”‚
β”‚ (Node.js/Python/etc) β”‚
β”‚ Port: 3000 β”‚
β”‚ β”‚
β”‚ - Receives frontend β”‚
β”‚ requests β”‚
β”‚ - Calls RagBot API β”‚
β”‚ - Returns results β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Frontend β”‚
β”‚ (React/Vue/etc) β”‚
β”‚ β”‚
β”‚ - User inputs data β”‚
β”‚ - Displays results β”‚
β”‚ - Shows analysis β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## πŸ“‘ Request Flow
### Natural Language Analysis Flow
```
User Types:
"My glucose is 185 and HbA1c is 8.2"
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Frontend (React) β”‚
β”‚ User Interface β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ POST /api/analyze
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Backend β”‚
β”‚ (Express/Flask) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ POST /api/v1/analyze/natural
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ RagBot API (FastAPI) β”‚
β”‚ β”‚
β”‚ 1. Receive request β”‚
β”‚ {"message": "glucose 185..."} β”‚
β”‚ β”‚
β”‚ 2. Extract biomarkers β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Extraction β”‚ β”‚
β”‚ β”‚ Service β”‚ β”‚
β”‚ β”‚ (LLM: llama3.1) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β–Ό β”‚
β”‚ {"Glucose": 185, "HbA1c": 8.2} β”‚
β”‚ β”‚
β”‚ 3. Predict disease β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Rule-based β”‚ β”‚
β”‚ β”‚ Predictor β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β–Ό β”‚
β”‚ {"disease": "Diabetes", ...} β”‚
β”‚ β”‚
β”‚ 4. Run RAG Workflow β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ RagBot Service β”‚ β”‚
β”‚ β”‚ (6 agents) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β–Ό β”‚
β”‚ Full analysis response β”‚
β”‚ β”‚
β”‚ 5. Format response β”‚
β”‚ - Biomarker flags β”‚
β”‚ - Safety alerts β”‚
β”‚ - Recommendations β”‚
β”‚ - Disease explanation β”‚
β”‚ - Conversational summary β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ JSON Response
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Backend β”‚
β”‚ Processes data β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ JSON Response
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Frontend β”‚
β”‚ Displays results β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## πŸ”„ Component Interaction
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ FastAPI Application β”‚
β”‚ (app/main.py) β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Route Handlers β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ /health /biomarkers /analyze/* β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β–Ό β–Ό β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Health β”‚ β”‚Biomarkerβ”‚ β”‚ Analyze β”‚ β”‚
β”‚ β”‚ Route β”‚ β”‚ Route β”‚ β”‚ Route β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Services Layer β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ Extraction β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Service β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚ β”‚ β”‚ RagBot β”‚ β”‚ β”‚
β”‚ β”‚ β”‚ Service β”‚ β”‚ β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ RagBot Core System β”‚
β”‚ (src/workflow.py) β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 6 Agent Workflow β”‚ β”‚
β”‚ β”‚ (LangGraph) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Vector Store β”‚ β”‚
β”‚ β”‚ (FAISS) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## πŸ“Š Data Flow
### Request β†’ Response Journey
```
1. INPUT (from user)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ "My glucose is 185 and HbA1c β”‚
β”‚ is 8.2, I'm 52 years old" β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
2. EXTRACTION (LLM Processing)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Biomarkers: β”‚
β”‚ - Glucose: 185.0 β”‚
β”‚ - HbA1c: 8.2 β”‚
β”‚ Context: β”‚
β”‚ - age: 52 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
3. PREDICTION (Rule-based)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Disease: Diabetes β”‚
β”‚ Confidence: 0.87 (87%) β”‚
β”‚ Probabilities: β”‚
β”‚ - Diabetes: 87% β”‚
β”‚ - Heart Disease: 8% β”‚
β”‚ - Others: 5% β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
4. WORKFLOW (6 Agents Execute)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 1: Biomarker Analyzer β”‚
β”‚ βœ“ Validates 2 biomarkers β”‚
β”‚ βœ“ Flags: 2 out of range β”‚
β”‚ βœ“ Alerts: 2 critical β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 2: Disease Explainer (RAG)β”‚
β”‚ βœ“ Retrieved 5 medical docs β”‚
β”‚ βœ“ Citations: 5 sources β”‚
β”‚ βœ“ Pathophysiology explained β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 3: Biomarker Linker (RAG) β”‚
β”‚ βœ“ Linked 2 key drivers β”‚
β”‚ βœ“ Evidence from literature β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 4: Guidelines (RAG) β”‚
β”‚ βœ“ Retrieved 3 guidelines β”‚
β”‚ βœ“ Recommendations: 5 actions β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 5: Confidence Assessor β”‚
β”‚ βœ“ Reliability: MODERATE β”‚
β”‚ βœ“ Evidence: STRONG β”‚
β”‚ βœ“ Limitations: 2 noted β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Agent 6: Response Synthesizer β”‚
β”‚ βœ“ Compiled all findings β”‚
β”‚ βœ“ Structured output β”‚
β”‚ βœ“ Conversational summary β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
5. OUTPUT (to user)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Full JSON Response: β”‚
β”‚ β”‚
β”‚ - prediction β”‚
β”‚ - biomarker_flags β”‚
β”‚ - safety_alerts β”‚
β”‚ - key_drivers β”‚
β”‚ - disease_explanation β”‚
β”‚ - recommendations β”‚
β”‚ - confidence_assessment β”‚
β”‚ - agent_outputs β”‚
β”‚ - conversational_summary β”‚
β”‚ β”‚
β”‚ Processing time: 3.5 seconds β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## 🎯 API Endpoint Map
```
RagBot API Root: http://localhost:8000
β”‚
β”œβ”€β”€ / GET API info
β”‚
β”œβ”€β”€ /docs GET Swagger UI
β”‚
β”œβ”€β”€ /redoc GET ReDoc
β”‚
└── /api/v1/
β”‚
β”œβ”€β”€ /health GET System status
β”‚ Returns: {
β”‚ status: "healthy",
β”‚ ollama_status: "connected",
β”‚ vector_store_loaded: true
β”‚ }
β”‚
β”œβ”€β”€ /biomarkers GET List all biomarkers
β”‚ Returns: {
β”‚ biomarkers: [...],
β”‚ total_count: 24
β”‚ }
β”‚
└── /analyze/
β”‚
β”œβ”€β”€ /natural POST Natural language
β”‚ Input: {
β”‚ message: "glucose 185...",
β”‚ patient_context: {...}
β”‚ }
β”‚ Output: Full analysis
β”‚
β”œβ”€β”€ /structured POST Direct biomarkers
β”‚ Input: {
β”‚ biomarkers: {...},
β”‚ patient_context: {...}
β”‚ }
β”‚ Output: Full analysis
β”‚
└── /example GET Demo case
Output: Full analysis
```
---
## πŸ”Œ Integration Points
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Application Stack β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ Frontend (React/Vue/Angular) β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ User inputs: "glucose 185, HbA1c 8.2" β”‚ β”‚
β”‚ β”‚ Button click: "Analyze" β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ HTTP POST β”‚
β”‚ β–Ό β”‚
β”‚ Backend (Node.js/Python/Java) β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Endpoint: POST /api/analyze β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ Code: β”‚ β”‚
β”‚ β”‚ const result = await fetch( β”‚ β”‚
β”‚ β”‚ 'http://localhost:8000/api/v1/ β”‚ β”‚
β”‚ β”‚ analyze/natural', β”‚ β”‚
β”‚ β”‚ {body: {message: userInput}} β”‚ β”‚
β”‚ β”‚ ); β”‚ β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ return result.data; β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ HTTP POST β”‚
β”‚ β–Ό β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ RagBot API (localhost:8000) │◄─┼─ This is what we built!
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ - Extracts biomarkers β”‚ β”‚
β”‚ β”‚ - Runs analysis β”‚ β”‚
β”‚ β”‚ - Returns JSON β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ JSON Response β”‚
β”‚ β–Ό β”‚
β”‚ Backend processes and returns to frontend β”‚
β”‚ β”‚ β”‚
β”‚ β–Ό β”‚
β”‚ Frontend displays results to user β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
---
## πŸ’Ύ File Structure
```
api/
β”‚
β”œβ”€β”€ app/ # Application code
β”‚ β”œβ”€β”€ __init__.py
β”‚ β”œβ”€β”€ main.py # FastAPI app (entry point)
β”‚ β”‚
β”‚ β”œβ”€β”€ models/ # Data schemas
β”‚ β”‚ β”œβ”€β”€ __init__.py
β”‚ β”‚ └── schemas.py # Pydantic models
β”‚ β”‚
β”‚ β”œβ”€β”€ routes/ # API endpoints
β”‚ β”‚ β”œβ”€β”€ __init__.py
β”‚ β”‚ β”œβ”€β”€ health.py # Health check
β”‚ β”‚ β”œβ”€β”€ biomarkers.py # List biomarkers
β”‚ β”‚ └── analyze.py # Analysis endpoints
β”‚ β”‚
β”‚ └── services/ # Business logic
β”‚ β”œβ”€β”€ __init__.py
β”‚ β”œβ”€β”€ extraction.py # Natural language extraction
β”‚ └── ragbot.py # Workflow orchestration
β”‚
β”œβ”€β”€ .env # Configuration
β”œβ”€β”€ .env.example # Template
β”œβ”€β”€ .gitignore # Git ignore rules
β”œβ”€β”€ requirements.txt # Python dependencies
β”œβ”€β”€ Dockerfile # Container image
β”œβ”€β”€ docker-compose.yml # Deployment config
β”‚
└── Documentation/
β”œβ”€β”€ README.md # Complete guide
β”œβ”€β”€ GETTING_STARTED.md # Quick start
β”œβ”€β”€ QUICK_REFERENCE.md # Cheat sheet
└── ARCHITECTURE.md # This file
```
---
**Created:** November 23, 2025
**Purpose:** Visual guide to RagBot API architecture
**For:** Understanding system design and integration points