from contextlib import asynccontextmanager import os from fastapi import FastAPI from services.database import create_db_and_tables from services.redis_service import close_arq_pool from utils.get_env import get_app_data_directory_env from utils.model_availability import ( check_llm_and_image_provider_api_or_model_availability, ) @asynccontextmanager async def app_lifespan(_: FastAPI): """ Lifespan context manager for FastAPI application. Initializes the application data directory and checks LLM model availability. """ os.makedirs(get_app_data_directory_env(), exist_ok=True) await create_db_and_tables() # Load persisted settings from database into os.environ try: from services.database import async_session_maker from services.settings_service import load_settings async with async_session_maker() as session: await load_settings(session) print("[Lifespan] Loaded persisted settings from database") except Exception as e: print(f"[Lifespan] Could not load persisted settings (non-fatal): {e}") await check_llm_and_image_provider_api_or_model_availability() yield await close_arq_pool()