bshepp
fix: add retry logic, error handling, and startup diagnostics for deployed pipeline
28e85d4
"""
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",
)
# CORS for frontend
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Routes
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."""
# Log configuration (mask secrets)
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!")