import logging from contextlib import asynccontextmanager from fastapi.middleware.cors import CORSMiddleware from fastapi import FastAPI from db_setup import lifespan as db_lifespan from inbox.app import router as inbox_router from users.app import router as users_router from role.app import router as role_router from forget_password.app import router as forget_password_router from job.app import router as candidate_router from notifications.app import router as confirmation_router logging.basicConfig(level=logging.INFO,format="%(levelname)-8s %(name)s: %(message)s") logger=logging.getLogger("main") @asynccontextmanager async def lifespan(app): async with db_lifespan(app): broker_ready=False cv_broker_ready=False llm_ready=False agent_ready=False close_llm=None close_agent=None broker=None cv_broker=None try: from taskiq_management.broker_setup import broker as _broker broker=_broker await broker.startup() broker_ready=True except Exception as exc: logger.warning("taskiq broker startup skipped: %s",exc) try: from taskiq_management.cv_broker_setup import cv_broker as _cv_broker cv_broker=_cv_broker await cv_broker.startup() cv_broker_ready=True except Exception as exc: logger.warning("taskiq cv broker startup skipped: %s",exc) try: from llm_setup import init_llm,close_llm as _close_llm from agent.agent_setup import init_agent,close_agent as _close_agent close_llm=_close_llm close_agent=_close_agent await init_llm() llm_ready=True await init_agent() agent_ready=True except Exception as exc: logger.warning("llm/agent startup skipped: %s",exc) try: yield finally: if agent_ready and close_agent is not None: await close_agent() if llm_ready and close_llm is not None: await close_llm() if cv_broker_ready and cv_broker is not None: await cv_broker.shutdown() if broker_ready and broker is not None: await broker.shutdown() app=FastAPI(lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(inbox_router) app.include_router(users_router) app.include_router(role_router) app.include_router(forget_password_router) app.include_router(confirmation_router) app.include_router(candidate_router)