You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.6 KiB

"""
main.py — FastAPI application entry point for the RAG API.
"""
from __future__ import annotations
import logging
import sys
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from core.database import create_pool, close_pool
from core.settings import Settings
from routers import search, chat, documents, index, meta, capture
# Global settings instance (imported by routers via dependency)
app_settings = Settings()
def setup_logging(level: str) -> None:
logging.basicConfig(
level=getattr(logging, level.upper(), logging.INFO),
format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S',
stream=sys.stdout,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
setup_logging(app_settings.log_level)
logging.getLogger('rag-api').info('Starting RAG API v%s', app_settings.app_version)
await create_pool(app_settings)
yield
await close_pool()
app = FastAPI(
title=app_settings.app_title,
version=app_settings.app_version,
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=app_settings.cors_origins_list,
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)
# Register routers
app.include_router(search.router, prefix='/api/v1')
app.include_router(chat.router, prefix='/api/v1')
app.include_router(documents.router, prefix='/api/v1')
app.include_router(index.router, prefix='/api/v1')
app.include_router(meta.router, prefix='/api/v1')
app.include_router(capture.router, prefix='/api/v1')

Powered by TurnKey Linux.