| import logging | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from app.config import APP_NAME, API_PREFIX, ensure_directories | |
| from app.routes.denoise_routes import router as denoise_router | |
| logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s") | |
| app = FastAPI(title=APP_NAME, version="1.0.0") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| expose_headers=[ | |
| "X-Inference-Time-Ms", | |
| "X-Processing-Device", | |
| "X-Quality-Score", | |
| "X-Input-Size-Bytes", | |
| "X-Output-Size-Bytes", | |
| "X-Inference-Mode", | |
| "X-Model-Used", | |
| "X-Brightness-In", | |
| "X-Contrast-In", | |
| "X-Contrast-Out", | |
| "X-Lap-Var-In", | |
| "X-Lap-Var-Out", | |
| "X-Color-Distortion", | |
| "x-inference-time-ms", | |
| "x-processing-device", | |
| "x-quality-score", | |
| "x-input-size-bytes", | |
| "x-output-size-bytes", | |
| "x-inference-mode", | |
| "x-model-used", | |
| "x-brightness-in", | |
| "x-contrast-in", | |
| "x-contrast-out", | |
| "x-lap-var-in", | |
| "x-lap-var-out", | |
| "x-color-distortion" | |
| ] | |
| ) | |
| def startup_event() -> None: | |
| """Create required backend folders on startup.""" | |
| ensure_directories() | |
| # Pre-load NAFNet model at startup if mock mode is disabled | |
| from app.config import USE_MOCK_INFERENCE | |
| if not USE_MOCK_INFERENCE: | |
| try: | |
| from app.services.model_registry import get_default_model | |
| from app.services.nafnet_service import nafnet_service | |
| logger = logging.getLogger("app.main") | |
| logger.info("Pre-loading NAFNet model on startup...") | |
| model_config = get_default_model() | |
| nafnet_service._load_model(model_config) | |
| logger.info("NAFNet model pre-loaded successfully.") | |
| except Exception as e: | |
| logger = logging.getLogger("app.main") | |
| logger.error(f"Failed to pre-load NAFNet model at startup: {e}") | |
| app.include_router(denoise_router, prefix=API_PREFIX) | |
| app.include_router(denoise_router) | |