"""FastAPI lifespan и DI: загрузка модели один раз при старте.""" from __future__ import annotations from contextlib import asynccontextmanager from fastapi import FastAPI from src.config import settings from src.data.schema import SchemaRetriever from src.models.inference import InferenceEngine class AppState: engine: InferenceEngine | None = None schema_retriever: SchemaRetriever | None = None state = AppState() @asynccontextmanager async def lifespan(app: FastAPI): """Грузим модель при старте, освобождаем при остановке.""" state.engine = InferenceEngine() state.engine.load() state.schema_retriever = SchemaRetriever(settings.databases_dir) yield state.engine = None state.schema_retriever = None def get_engine() -> InferenceEngine: if state.engine is None: raise RuntimeError("Inference engine not initialized") return state.engine def get_schema_retriever() -> SchemaRetriever: if state.schema_retriever is None: raise RuntimeError("SchemaRetriever not initialized") return state.schema_retriever