""" ASGI entry point for the Icelandic LLM Leaderboard API. """ import os import logging import logging.config from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware from app.api.router import router from app.core.fastapi_cache import setup_cache from app.config import hf_config # Configure logging LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": True, "formatters": { "default": { "format": "%(name)s - %(levelname)s - %(message)s", } }, "handlers": { "default": { "formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stdout", } }, "loggers": { "uvicorn": { "handlers": ["default"], "level": "WARNING", "propagate": False, }, "uvicorn.error": { "level": "WARNING", "handlers": ["default"], "propagate": False, }, "uvicorn.access": { "handlers": ["default"], "level": "WARNING", "propagate": False, }, "app": { "handlers": ["default"], "level": "INFO", "propagate": False, } }, "root": { "handlers": ["default"], "level": "INFO", } } # Apply logging configuration logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("app") # Create FastAPI application app = FastAPI( title="Icelandic LLM Leaderboard", version="1.0.0", docs_url="/docs", ) # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Add GZIP compression app.add_middleware(GZipMiddleware, minimum_size=500) # Include API router app.include_router(router, prefix="/api") @app.on_event("startup") async def startup_event(): """Initialize services on startup""" logger.info("🇮🇸 ICELANDIC LLM LEADERBOARD STARTING UP") # Log HF configuration logger.info(f"Organization: {hf_config.HF_ORGANIZATION}") logger.info(f"Token Status: {'Present' if hf_config.HF_TOKEN else 'Missing'}") logger.info(f"Using repositories:") logger.info(f" - Queue: {hf_config.QUEUE_REPO}") logger.info(f" - Results: {hf_config.RESULTS_REPO}") # Setup cache setup_cache() logger.info("FastAPI Cache initialized") logger.info("🚀 Icelandic LLM Leaderboard ready!") @app.get("/") async def root(): """Root endpoint""" return {"message": "Icelandic LLM Leaderboard API", "status": "running"} @app.get("/health") async def health_check(): """Health check endpoint""" return {"status": "healthy"}