File size: 2,137 Bytes
027123c
 
6bff5d9
 
027123c
 
 
 
 
 
 
 
 
2ba0613
6bff5d9
027123c
19bd037
027123c
 
 
 
 
 
6bff5d9
 
 
 
19bd037
 
 
 
 
6bff5d9
 
 
027123c
 
 
 
6bff5d9
 
027123c
 
 
 
 
 
 
 
 
 
 
 
2ba0613
6bff5d9
027123c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"""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
from src.api.v1.document import router as document_router
from src.api.v1.chat import router as chat_router
from src.api.v1.room import router as room_router
from src.api.v1.users import router as users_router
from src.api.v1.db_client import router as db_client_router
from src.api.v1.data_catalog import router as data_catalog_router
from src.db.postgres.init_db import init_db
import os
import uvicorn

# Configure logging
configure_logging()
logger = get_logger("main")


@asynccontextmanager
async def lifespan(app: FastAPI):
    logger.info("Starting application...")
    if os.getenv("SKIP_INIT_DB", "false").lower() != "true":
        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
app.include_router(users_router)
app.include_router(document_router)
app.include_router(room_router)
app.include_router(chat_router)
app.include_router(db_client_router)
app.include_router(data_catalog_router)


@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
    )