import logging import os from logging.handlers import RotatingFileHandler from pathlib import Path from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.routers import ingest, query, documents, prompts from app.core.config import get_settings from app.core.sqlite_db import ( get_prompts_db, get_history_db, init_prompts_db, init_history_db, seed_default_profiles, ) # Configure logging before app initialization LOG_DIR = Path(__file__).parent / "log" LOG_DIR.mkdir(exist_ok=True) LOG_FILE = LOG_DIR / "backend.log" LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" # Root logger configuration logging.basicConfig( level=logging.INFO, format=LOG_FORMAT, handlers=[ RotatingFileHandler( LOG_FILE, maxBytes=10 * 1024 * 1024, # 10MB per file backupCount=5, # Keep 5 backup files encoding="utf-8", ), logging.StreamHandler(), # Also keep console output ], ) settings = get_settings() app = FastAPI(title="RAG Video Q&A", version="1.0.0") app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(ingest.router, prefix="/api/v1") app.include_router(query.router, prefix="/api/v1") app.include_router(documents.router, prefix="/api/v1") app.include_router(prompts.router) _prompts_conn = get_prompts_db() init_prompts_db(_prompts_conn) seed_default_profiles(_prompts_conn) _prompts_conn.close() _history_conn = get_history_db() init_history_db(_history_conn) _history_conn.close() @app.get("/health") def health_check(): return {"status": "ok"}