Spaces:
Running
Running
| from contextlib import asynccontextmanager | |
| from fastapi import FastAPI | |
| from app.agent.graph import run_agent | |
| from app.config import get_settings | |
| from app.db.postgres import close_pool, open_pool | |
| from app.db.neo4j import verify_connectivity, close_driver | |
| from app.schemas.request import ChatRequest | |
| from app.schemas.response import ChatResponse | |
| from app.memory.redis_checkpointer import get_checkpointer, close_checkpointer | |
| from app.agent.graph import build_agent | |
| settings = get_settings() | |
| async def lifespan(app: FastAPI): | |
| await open_pool() | |
| await verify_connectivity() | |
| checkpointer = await get_checkpointer() | |
| build_agent(checkpointer) | |
| yield | |
| await close_pool() | |
| await close_driver() | |
| await close_checkpointer() | |
| app = FastAPI(title="chat-service", version="0.1.0", lifespan=lifespan) | |
| def health() -> dict: | |
| return {"status": "ok"} | |
| async def chat(payload: ChatRequest) -> ChatResponse: | |
| """ | |
| Milestone 2: routes through the LangGraph ReAct agent, which can call | |
| sql_query_tool to answer questions grounded in the analyzed-articles DB. | |
| """ | |
| result = await run_agent( | |
| message=payload.message, | |
| session_id=payload.session_id, | |
| user_id=payload.user_id, | |
| ) | |
| return ChatResponse( | |
| session_id=payload.session_id, | |
| answer=result["answer"], | |
| sources=result["sources"], | |
| ) | |