File size: 1,181 Bytes
59b46a2
 
50231a8
 
 
 
 
59b46a2
 
 
 
50231a8
 
 
 
 
 
 
 
 
59b46a2
 
 
 
 
 
 
 
 
50231a8
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import logging

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

from app.api.router import api_router
from app.core.config import settings
from app.core.exceptions import ClassificationError
from app.services.classifier_service import classifier_service

logger = logging.getLogger(__name__)

settings.static_dir.mkdir(parents=True, exist_ok=True)
settings.upload_dir.mkdir(parents=True, exist_ok=True)

app = FastAPI(title=settings.app_name, debug=settings.debug)
app.mount("/static", StaticFiles(directory=str(settings.static_dir)), name="static")
app.include_router(api_router)


@app.on_event("startup")
def preload_classifier_model() -> None:
    try:
        classifier_service.warmup()
        logger.info("Classifier model preloaded on startup")
    except ClassificationError:
        logger.exception("Classifier model warmup failed")


@app.get("/endpoint/")
def list_endpoints() -> list[dict]:
    endpoints = []
    for route in app.routes:
        methods = sorted((route.methods or set()) & {"GET", "POST", "PUT", "DELETE"})
        if methods:
            endpoints.append({"endpoint": route.path, "methods": methods})
    return endpoints