moazx's picture
Enhance API security and functionality by adding authentication middleware and session management. Updated app.py to include the new auth router and integrated authentication checks for protected endpoints. Modified requirements.txt to include necessary libraries for session handling. Updated .env.example to include authentication credentials. Improved retrieval functions with query expansion for better medical term matching and enriched context in responses.
ddc9c77
raw
history blame
3.4 kB
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI, HTTPException
from fastapi.exceptions import RequestValidationError
from starlette.exceptions import HTTPException as StarletteHTTPException
# Import routers
from api.routers import medical, health, export, auth
from api.middleware import (
ProcessTimeMiddleware,
LoggingMiddleware,
RateLimitMiddleware,
AuthenticationMiddleware,
get_cors_middleware_config
)
from fastapi.middleware.cors import CORSMiddleware
from api.exceptions import (
http_exception_handler,
validation_exception_handler,
general_exception_handler,
starlette_exception_handler
)
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan management with background initialization"""
# Startup
logger.info("Starting Medical RAG AI Advisor API...")
# Start background initialization of heavy components
try:
from core.background_init import start_background_initialization
logger.info("πŸš€ Starting background initialization of components...")
start_background_initialization()
logger.info("API started successfully (components loading in background)")
except Exception as e:
logger.error(f"Failed to start background initialization: {e}")
logger.info("API started with lazy loading fallback")
yield
# Shutdown
logger.info("Shutting down Medical RAG AI Advisor API...")
# Create FastAPI application
app = FastAPI(
title="Medical RAG AI Advisor API",
description="Professional API for medical information retrieval and advisory services",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc",
lifespan=lifespan
)
# Add middleware
app.add_middleware(CORSMiddleware, **get_cors_middleware_config())
app.add_middleware(ProcessTimeMiddleware)
app.add_middleware(LoggingMiddleware)
app.add_middleware(RateLimitMiddleware, calls_per_minute=100) # Adjust as needed
app.add_middleware(AuthenticationMiddleware) # Protect API endpoints
# Add exception handlers
app.add_exception_handler(HTTPException, http_exception_handler)
app.add_exception_handler(RequestValidationError, validation_exception_handler)
app.add_exception_handler(StarletteHTTPException, starlette_exception_handler)
app.add_exception_handler(Exception, general_exception_handler)
# Include routers
app.include_router(auth.router)
app.include_router(health.router)
app.include_router(medical.router)
app.include_router(export.router)
# Root endpoint
@app.get("/")
async def root():
"""Root endpoint with API information"""
return {
"name": "Medical RAG AI Advisor API",
"version": "1.0.0",
"description": "Professional API for medical information retrieval and advisory services",
"docs": "/docs",
"health": "/health",
"endpoints": {
"ask": "/ask",
"ask_stream": "/ask/stream",
"initialization_status": "/health/initialization",
"export": "/export/{format}?session_id={session_id}"
}
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"api.app:app",
host="127.0.0.1",
port=8000,
reload=True,
log_level="info"
)