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