import os from fastapi import FastAPI from naliiabot.bot.agent.agent import AgentConfig from naliiabot.bot.factories.llm_factory import LLMFactory from naliiabot.bot.prompts.load_prompt import get_prompt_template from naliiabot.bot.tools.naliia_tools import NaliiaTools from naliiabotapi.api.v1.endpoints.chat import router as chat_router from naliiabotapi.api.v1.webhooks.chat_hook import router as chat_hook_router import naliiabotapi.api.dependencies as deps from contextlib import asynccontextmanager from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver @asynccontextmanager async def lifespan(app: FastAPI): deps.db_pool = deps.get_async_connection_pool() await deps.db_pool.open() async with deps.db_pool.connection() as conn: checkpointer = AsyncPostgresSaver(conn) await checkpointer.setup() model_name = os.getenv("LLM_MODEL", "anthropic") model = LLMFactory(model_name).get_model() naliia_prompt = get_prompt_template("NALIIA_PROMPT") naliia_tools = NaliiaTools().get_tools() config = AgentConfig(system_prompt=naliia_prompt) deps.agent_instance = deps.Agent( model=model, config=config, checkpointer=checkpointer, tools=naliia_tools ) yield await deps.db_pool.close() app = FastAPI( title="NaliiaBot API", description=( "API for NaliiaBot, a chatbot that provides " "customer service and related topics."), version="1.0.0", lifespan=lifespan ) app.include_router(chat_router) app.include_router(chat_hook_router) @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/health") def health_check(): return {"status": "ok"}