ishaq101's picture
fix/ check (#12)
b9dfc76
Raw
History Blame
3.79 kB
"""Main application entry point."""
from contextlib import asynccontextmanager
from fastapi import FastAPI
from src.middlewares.logging import configure_logging, get_logger
from src.middlewares.cors import add_cors_middleware
from src.middlewares.rate_limit import limiter, _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
# --- pr/5 Phase 1: unwire non-AI routers (Go owns these now). ---
# Routers below are commented out, NOT deleted. The router files stay alive;
# they're just not mounted, so they also disappear from Swagger.
# from src.api.v1.document import router as document_router # unwired: Go handles documents
# from src.api.v1.room import router as room_router # unwired: replaced by analysis_id
# from src.api.v1.users import router as users_router # unwired: login moved off Python
# from src.api.v1.db_client import router as db_client_router # unwired: Go registers DB client
# from src.api.v1.data_catalog import router as data_catalog_router # unwired: Go handles the catalog
# NOTE: src.api.v1.analysis was DELETED (Go owns analysis + its data_sources binding).
# from src.api.v1.chat import router as chat_router # unwired: replaced by /api/v2/chat/stream
# NOTE: src.api.v1.chat module still imported by v2 chat + /tools/help — keep the file.
from src.api.v1.report import router as report_router
from src.api.v1.tools import router as tools_router
from src.api.v1.help import router as help_router # pr/5 Phase 2: dedicated /tools/help
from src.api.v1.traceability import router as traceability_router # KM-691
from src.api.v2.chat import router as chat_v2_router # pr/5 Phase 2: v2 chat pilot (analysis_id)
from src.db.postgres.init_db import init_db
from src.config.settings import settings
import uvicorn
# Configure logging
configure_logging()
logger = get_logger("main")
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info("Starting application...")
if not settings.skip_init_db:
await init_db()
logger.info("Database initialized")
else:
logger.info("Skipping database initialization (SKIP_INIT_DB=true)")
yield
# Create FastAPI app
app = FastAPI(
title="DataEyond Agentic Service",
description="Multi-agent AI backend with RAG capabilities",
version="0.1.0",
lifespan=lifespan,
)
# Add middleware
add_cors_middleware(app)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
# Include routers
# --- pr/5 Phase 1: AI-only surface. Non-AI routers unwired (Go owns them). ---
# app.include_router(users_router) # unwired: login moved off Python
# app.include_router(document_router) # unwired: Go handles documents
# app.include_router(room_router) # unwired: replaced by analysis_id
# app.include_router(db_client_router) # unwired: Go registers DB client
# app.include_router(data_catalog_router) # unwired: Go handles the catalog
# app.include_router(chat_router) # unwired: v2 chat replaces it (drops v1 cache ops routes)
app.include_router(report_router)
app.include_router(tools_router)
app.include_router(help_router)
app.include_router(traceability_router) # KM-691: GET /api/v1/traceability
app.include_router(chat_v2_router) # pr/5 Phase 2: POST /api/v2/chat/stream (analysis_id)
@app.get("/")
async def root():
"""Root endpoint."""
return {
"status": "ok",
"service": "DataEyond Agentic Service",
"version": "0.1.0"
}
@app.get("/health")
async def health_check():
"""Health check endpoint."""
return {"status": "healthy"}
if __name__ == "__main__":
uvicorn.run(
"main:app",
host="0.0.0.0",
port=7860,
reload=True
)