|
|
""" |
|
|
Clinical Decision Support Agent — FastAPI Backend |
|
|
""" |
|
|
import logging |
|
|
|
|
|
from fastapi import FastAPI |
|
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
|
|
|
from app.api import cases, health, ws |
|
|
from app.config import settings |
|
|
|
|
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(name)s %(levelname)s %(message)s") |
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
app = FastAPI( |
|
|
title="Clinical Decision Support Agent", |
|
|
description="Agentic clinical decision support powered by MedGemma (HAI-DEF)", |
|
|
version="0.1.0", |
|
|
) |
|
|
|
|
|
|
|
|
app.add_middleware( |
|
|
CORSMiddleware, |
|
|
allow_origins=settings.cors_origins, |
|
|
allow_credentials=True, |
|
|
allow_methods=["*"], |
|
|
allow_headers=["*"], |
|
|
) |
|
|
|
|
|
|
|
|
app.include_router(health.router, tags=["health"]) |
|
|
app.include_router(cases.router, prefix="/api/cases", tags=["cases"]) |
|
|
app.include_router(ws.router, prefix="/ws", tags=["websocket"]) |
|
|
|
|
|
|
|
|
@app.on_event("startup") |
|
|
async def startup(): |
|
|
"""Initialize services on startup.""" |
|
|
|
|
|
def _mask(val: str) -> str: |
|
|
if not val: |
|
|
return "(empty)" |
|
|
if len(val) <= 8: |
|
|
return "***" |
|
|
return val[:4] + "..." + val[-4:] |
|
|
|
|
|
logger.info("=== CDS Agent Backend Starting ===") |
|
|
logger.info(f" medgemma_base_url : {settings.medgemma_base_url or '(empty)'}") |
|
|
logger.info(f" medgemma_model_id : {settings.medgemma_model_id}") |
|
|
logger.info(f" medgemma_api_key : {_mask(settings.medgemma_api_key)}") |
|
|
logger.info(f" hf_token : {_mask(settings.hf_token)}") |
|
|
logger.info(f" medgemma_max_tokens: {settings.medgemma_max_tokens}") |
|
|
logger.info(f" cors_origins : {settings.cors_origins}") |
|
|
logger.info(f" chroma_persist_dir: {settings.chroma_persist_dir}") |
|
|
|
|
|
if not settings.medgemma_base_url: |
|
|
logger.warning("MEDGEMMA_BASE_URL is empty -- MedGemma API calls will fail!") |
|
|
if not settings.medgemma_api_key: |
|
|
logger.warning("MEDGEMMA_API_KEY is empty -- MedGemma API calls will fail!") |
|
|
|