Agentic-RagBot / docs /API.md
Nikhil Pravin Pise
refactor: major repository cleanup and bug fixes
6dc9d46
|
raw
history blame
7.98 kB
# RagBot REST API Documentation
## Overview
RagBot provides a RESTful API for integrating biomarker analysis into applications, web services, and dashboards.
## Base URL
```
http://localhost:8000
```
## Quick Start
1. **Start the API server:**
```powershell
cd api
python -m uvicorn app.main:app --reload
```
2. **API will be available at:**
- Interactive docs: http://localhost:8000/docs
- OpenAPI schema: http://localhost:8000/openapi.json
## Authentication
Currently no authentication required. For production deployment, add:
- API keys
- JWT tokens
- Rate limiting
- CORS restrictions
## Endpoints
### 1. Health Check
**Request:**
```http
GET /health
```
**Response:**
```json
{
"status": "healthy",
"timestamp": "2026-02-07T01:30:00Z",
"version": "1.0.0"
}
```
---
### 2. Analyze Biomarkers
**Request:**
```http
POST /api/v1/analyze
Content-Type: application/json
{
"biomarkers": {
"Glucose": 140,
"HbA1c": 10.0,
"LDL Cholesterol": 150
},
"patient_context": {
"age": 45,
"gender": "M",
"bmi": 28.5
}
}
```
**Response:**
```json
{
"prediction": {
"disease": "Diabetes",
"confidence": 0.85,
"probabilities": {
"Diabetes": 0.85,
"Heart Disease": 0.10,
"Other": 0.05
}
},
"analysis": {
"biomarker_analysis": {
"Glucose": {
"value": 140,
"status": "critical",
"reference_range": "70-100",
"alert": "Hyperglycemia - diabetes risk"
},
"HbA1c": {
"value": 10.0,
"status": "critical",
"reference_range": "4.0-6.4%",
"alert": "Diabetes (≥6.5%)"
}
},
"disease_explanation": {
"pathophysiology": "...",
"citations": ["source1", "source2"]
},
"key_drivers": [
"Glucose levels indicate hyperglycemia",
"HbA1c shows chronic elevated blood sugar"
],
"clinical_guidelines": [
"Consult healthcare professional for diabetes testing",
"Consider medication if not already prescribed",
"Implement lifestyle modifications"
],
"confidence_assessment": {
"prediction_reliability": "MODERATE",
"evidence_strength": "MODERATE",
"limitations": ["Limited biomarker set"]
}
},
"recommendations": {
"immediate_actions": [
"Seek immediate medical attention for critical glucose values",
"Schedule comprehensive diabetes screening"
],
"lifestyle_changes": [
"Increase physical activity to 150 min/week",
"Reduce refined carbohydrate intake",
"Achieve 5-10% weight loss if overweight"
],
"monitoring": [
"Check fasting glucose monthly",
"Recheck HbA1c every 3 months",
"Monitor weight weekly"
]
},
"safety_alerts": [
{
"biomarker": "Glucose",
"level": "CRITICAL",
"message": "Glucose 140 mg/dL is critical"
},
{
"biomarker": "HbA1c",
"level": "CRITICAL",
"message": "HbA1c 10% indicates diabetes"
}
],
"timestamp": "2026-02-07T01:35:00Z",
"processing_time_ms": 18500
}
```
**Request Parameters:**
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `biomarkers` | Object | Yes | Blood test values (key-value pairs) |
| `patient_context` | Object | No | Age, gender, BMI for context |
**Biomarker Names** (normalized):
Glucose, HbA1c, Triglycerides, Total Cholesterol, LDL Cholesterol, HDL Cholesterol, and 20+ more supported.
See `config/biomarker_references.json` for full list.
---
### 3. Biomarker Validation
**Request:**
```http
POST /api/v1/validate
Content-Type: application/json
{
"biomarkers": {
"Glucose": 140,
"HbA1c": 10.0
}
}
```
**Response:**
```json
{
"valid_biomarkers": {
"Glucose": {
"value": 140,
"reference_range": "70-100",
"status": "out-of-range",
"severity": "high"
},
"HbA1c": {
"value": 10.0,
"reference_range": "4.0-6.4%",
"status": "out-of-range",
"severity": "high"
}
},
"invalid_biomarkers": [],
"alerts": [...]
}
```
---
### 4. Get Biomarker Reference Ranges
**Request:**
```http
GET /api/v1/biomarkers/reference-ranges
```
**Response:**
```json
{
"biomarkers": {
"Glucose": {
"min": 70,
"max": 100,
"unit": "mg/dL",
"condition": "fasting"
},
"HbA1c": {
"min": 4.0,
"max": 6.4,
"unit": "%",
"condition": "normal"
},
...
},
"last_updated": "2026-02-07"
}
```
---
### 5. Get Analysis History
**Request:**
```http
GET /api/v1/history?limit=10
```
**Response:**
```json
{
"analyses": [
{
"id": "report_Diabetes_20260207_012151",
"disease": "Diabetes",
"confidence": 0.85,
"timestamp": "2026-02-07T01:21:51Z",
"biomarker_count": 2
},
...
],
"total": 12,
"limit": 10
}
```
---
## Error Handling
### Invalid Biomarker Name
**Request:**
```http
POST /api/v1/analyze
{
"biomarkers": {
"InvalidBiomarker": 100
}
}
```
**Response:** `400 Bad Request`
```json
{
"error": "Invalid biomarker",
"detail": "InvalidBiomarker is not a recognized biomarker",
"suggestions": ["Glucose", "HbA1c", "Triglycerides"]
}
```
### Missing Required Fields
**Response:** `422 Unprocessable Entity`
```json
{
"detail": [
{
"loc": ["body", "biomarkers"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
```
### Server Error
**Response:** `500 Internal Server Error`
```json
{
"error": "Internal server error",
"detail": "Error processing analysis",
"timestamp": "2026-02-07T01:35:00Z"
}
```
---
## Usage Examples
### Python
```python
import requests
import json
API_URL = "http://localhost:8000/api/v1"
biomarkers = {
"Glucose": 140,
"HbA1c": 10.0,
"Triglycerides": 200
}
response = requests.post(
f"{API_URL}/analyze",
json={"biomarkers": biomarkers}
)
result = response.json()
print(f"Disease: {result['prediction']['disease']}")
print(f"Confidence: {result['prediction']['confidence']}")
print(f"Recommendations: {result['recommendations']['immediate_actions']}")
```
### JavaScript/Node.js
```javascript
const biomarkers = {
Glucose: 140,
HbA1c: 10.0,
Triglycerides: 200
};
fetch('http://localhost:8000/api/v1/analyze', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({biomarkers})
})
.then(r => r.json())
.then(data => {
console.log(`Disease: ${data.prediction.disease}`);
console.log(`Confidence: ${data.prediction.confidence}`);
});
```
### cURL
```bash
curl -X POST http://localhost:8000/api/v1/analyze \
-H "Content-Type: application/json" \
-d '{
"biomarkers": {
"Glucose": 140,
"HbA1c": 10.0
}
}'
```
---
## Rate Limiting (Recommended for Production)
- **Default**: 100 requests/minute per IP
- **Burst**: 10 concurrent requests
- **Headers**: Include `X-RateLimit-Remaining` in responses
---
## CORS Configuration
For web-based integrations, configure CORS in `api/app/main.py`:
```python
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["https://yourdomain.com"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
```
---
## Response Time SLA
- **95th percentile**: < 25 seconds
- **99th percentile**: < 40 seconds
(Times include all agent processing and RAG retrieval)
---
## Deployment
### Docker
See [api/Dockerfile](../api/Dockerfile) for containerized deployment.
### Production Checklist
- [ ] Enable authentication (API keys/JWT)
- [ ] Add rate limiting
- [ ] Configure CORS for your domain
- [ ] Set up error logging
- [ ] Enable request/response logging
- [ ] Configure health check monitoring
- [ ] Use HTTP/2 or HTTP/3
- [ ] Set up API documentation access control
---
For more information, see [ARCHITECTURE.md](ARCHITECTURE.md) and [DEVELOPMENT.md](DEVELOPMENT.md).