"""Point d'entrée FastAPI — `uv run uvicorn intent_service.main:app` (voir le Dockerfile et le README de ce service). Le chargement des modèles spaCy de base (`PipelineRegistry.preload_all`) se fait dans le handler `lifespan` ci-dessous, *avant* qu'uvicorn n'accepte de requêtes — `GET /health` ne répond donc `200` qu'une fois ce coût payé, jamais pendant un chargement encore en cours (uvicorn ne sert aucune requête tant que le `lifespan` de démarrage n'est pas terminé). """ from contextlib import asynccontextmanager from fastapi import FastAPI from .pipeline_registry import registry from .routes import health, process, train @asynccontextmanager async def lifespan(app: FastAPI): registry.preload_all() yield app = FastAPI(title="tech-step-intent-service", lifespan=lifespan) app.include_router(health.router) app.include_router(train.router) app.include_router(process.router)