Spaces:
Runtime error
MediGuard AI REST API Documentation
Overview
MediGuard AI provides a comprehensive RESTful API for integrating biomarker analysis and medical Q&A into applications, web services, and dashboards.
Base URL
Development: http://localhost:8000
Production: https://api.mediguard-ai.com
Quick Start
Start the API server:
uvicorn src.main:app --reloadAPI will be available at:
- Interactive docs: http://localhost:8000/docs
- OpenAPI schema: http://localhost:8000/openapi.json
- ReDoc: http://localhost:8000/redoc
Authentication
Currently no authentication required for development. Production will include:
- API keys
- JWT tokens
- Rate limiting
Authorization: Bearer YOUR_API_KEY
API Endpoints
Health Check
Check if the API is running and healthy.
GET /health
Response:
{
"status": "healthy",
"version": "2.0.0",
"timestamp": "2024-03-15T10:30:00Z"
}
Detailed Health Check
Get detailed health status of all services.
GET /health/detailed
Response:
{
"status": "healthy",
"version": "2.0.0",
"services": {
"opensearch": "connected",
"redis": "connected",
"llm": "connected"
}
}
Biomarker Analysis
Structured Analysis
Analyze biomarkers using structured input.
POST /analyze/structured
Request Body:
{
"biomarkers": {
"Glucose": 140,
"HbA1c": 10.0,
"Hemoglobin": 11.5,
"MCV": 75
},
"patient_context": {
"age": 45,
"gender": "male",
"symptoms": ["fatigue", "thirst"]
}
}
Response:
{
"status": "success",
"analysis": {
"primary_findings": [
{
"condition": "Diabetes",
"confidence": 0.95,
"evidence": {
"glucose": 140,
"hba1c": 10.0
}
}
],
"critical_alerts": [
{
"type": "hyperglycemia",
"severity": "high",
"message": "Very high glucose levels detected"
}
],
"recommendations": [
{
"action": "Seek immediate medical attention",
"priority": "urgent"
}
],
"biomarker_flags": [
{
"name": "Glucose",
"value": 140,
"status": "high",
"reference_range": "70-100 mg/dL"
}
]
},
"metadata": {
"timestamp": "2024-03-15T10:30:00Z",
"model_version": "2.0.0",
"processing_time": 1.2
}
}
Natural Language Analysis
Analyze biomarkers from natural language input.
POST /analyze/natural
Request Body:
{
"text": "My recent blood test shows glucose of 140 and HbA1c of 10. I'm a 45-year-old male feeling very tired lately.",
"extract_biomarkers": true
}
Response:
{
"status": "success",
"extracted_data": {
"biomarkers": {
"Glucose": 140,
"HbA1c": 10.0
},
"patient_context": {
"age": 45,
"gender": "male",
"symptoms": ["tired"]
}
},
"analysis": {
// Same structure as structured analysis
}
}
Medical Q&A
Ask Question
Ask medical questions with RAG-powered answers.
POST /ask
Request Body:
{
"question": "What are the symptoms of diabetes?",
"context": {
"patient_age": 45,
"gender": "male"
}
}
Response:
{
"status": "success",
"answer": {
"content": "Common symptoms of diabetes include increased thirst, frequent urination, fatigue, and blurred vision...",
"sources": [
{
"title": "Diabetes Mellitus - Clinical Guidelines",
"snippet": "Patients often present with polyuria, polydipsia, and unexplained weight loss...",
"confidence": 0.92
}
],
"related_questions": [
"How is diabetes diagnosed?",
"What are the treatment options for diabetes?"
]
},
"metadata": {
"timestamp": "2024-03-15T10:30:00Z",
"model": "llama-3.3-70b",
"retrieval_count": 5
}
}
Streaming Ask
Get streaming responses for real-time chat.
POST /ask/stream
Request Body:
{
"question": "Explain what HbA1c means",
"stream": true
}
Response (Server-Sent Events):
data: {"type": "start", "id": "msg_123"}
data: {"type": "token", "content": "HbA1c is a "}
data: {"type": "token", "content": "blood test that "}
data: {"type": "token", "content": "measures your "}
...
data: {"type": "end", "id": "msg_123"}
Knowledge Base Search
Search Documents
Search the medical knowledge base.
POST /search
Request Body:
{
"query": "diabetes management guidelines",
"top_k": 5,
"filters": {
"document_type": ["guideline", "research"],
"date_range": {
"start": "2020-01-01",
"end": "2024-12-31"
}
}
}
Response:
{
"status": "success",
"results": [
{
"id": "doc_123",
"title": "ADA Standards of Medical Care in Diabetes",
"snippet": "The ADA recommends HbA1c testing every 3 months for patients with diabetes...",
"score": 0.95,
"metadata": {
"document_type": "guideline",
"publication_date": "2024-01-15",
"authors": ["American Diabetes Association"]
}
}
],
"total_found": 1247,
"search_time": 0.15
}
Error Handling
Error Response Format
All errors return a consistent format:
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid biomarker values",
"details": [
{
"field": "biomarkers.Glucose",
"issue": "Value must be between 0 and 1000"
}
]
},
"request_id": "req_789"
}
Common Error Codes
| Code | Description |
|---|---|
| VALIDATION_ERROR | Invalid input data |
| PROCESSING_ERROR | Error during analysis |
| RATE_LIMIT_EXCEEDED | Too many requests |
| SERVICE_UNAVAILABLE | Required service is down |
| AUTHENTICATION_ERROR | Invalid API key |
SDK Examples
Python
import httpx
client = httpx.Client(base_url="http://localhost:8000")
# Analyze biomarkers
response = client.post("/analyze/structured", json={
"biomarkers": {"Glucose": 140, "HbA1c": 10.0}
})
analysis = response.json()
# Ask question
response = client.post("/ask", json={
"question": "What causes diabetes?"
})
answer = response.json()
JavaScript
const client = http.createClient({
baseURL: 'http://localhost:8000'
});
// Analyze biomarkers
const analysis = await client.post('/analyze/structured', {
biomarkers: { Glucose: 140, HbA1c: 10.0 }
});
// Stream response
const stream = await client.post('/ask/stream', {
question: 'Explain diabetes',
stream: true
});
for await (const chunk of stream) {
if (chunk.type === 'token') {
process.stdout.write(chunk.content);
}
}
cURL
# Analyze biomarkers
curl -X POST http://localhost:8000/analyze/structured \
-H "Content-Type: application/json" \
-d '{
"biomarkers": {"Glucose": 140, "HbA1c": 10.0}
}'
# Ask question
curl -X POST http://localhost:8000/ask \
-H "Content-Type: application/json" \
-d '{
"question": "What are the symptoms of diabetes?"
}'
Rate Limiting
- Development: No limits
- Production: 1000 requests per hour per API key
Rate limit headers are included in responses:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1642790400
Data Models
Biomarker Analysis Request
interface BiomarkerAnalysisRequest {
biomarkers: Record<string, number>;
patient_context?: {
age?: number;
gender?: "male" | "female" | "other";
symptoms?: string[];
medications?: string[];
medical_history?: string[];
};
}
Biomarker Analysis Response
interface BiomarkerAnalysisResponse {
status: "success" | "error";
analysis?: {
primary_findings: Finding[];
critical_alerts: Alert[];
recommendations: Recommendation[];
biomarker_flags: BiomarkerFlag[];
};
metadata?: {
timestamp: string;
model_version: string;
processing_time: number;
};
}
API Changelog
v2.0.0 (Current)
- Added multi-agent workflow
- Improved confidence scoring
- Added streaming responses
- Enhanced error handling
v1.5.0
- Added natural language analysis
- Improved biomarker normalization
- Added batch processing
v1.0.0
- Initial release
- Basic biomarker analysis
- Medical Q&A
Support
For API support:
- Documentation: https://docs.mediguard-ai.com
- Email: api-support@mediguard-ai.com
- GitHub Issues: https://github.com/yourusername/Agentic-RagBot/issues