from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from sqlalchemy import text from app.core.config import settings from app.db.session import Base, engine from app.models import KnowledgeItem # noqa: F401 from app.api.routes import health, chat, knowledge @asynccontextmanager async def lifespan(app: FastAPI): # Convenience for local bootstrap. Use Alembic migrations before production. with engine.begin() as connection: connection.execute(text("CREATE EXTENSION IF NOT EXISTS vector")) Base.metadata.create_all(bind=engine) yield app = FastAPI(title=settings.app_name, version="0.1.0", lifespan=lifespan) app.add_middleware(CORSMiddleware, allow_origins=settings.cors_origin_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"]) app.include_router(health.router, prefix=settings.api_prefix) app.include_router(chat.router, prefix=settings.api_prefix) app.include_router(knowledge.router, prefix=settings.api_prefix) @app.get("/") def root(): return {"message": "Nalati Tourism QA API", "docs": "/docs"}