Spaces:
Sleeping
Sleeping
File size: 1,788 Bytes
a34068e b014e33 a34068e b014e33 | 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 | import logging
from contextlib import asynccontextmanager
import gradio as gr
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse
from app.api.routes import health, ingest, query
from app.config import get_settings, setup_logging
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
setup_logging()
logger.info("RagCore starting up...")
settings = get_settings()
# Initialize services that need warm-up
try:
from app.core.embedder import get_embedder
get_embedder()
logger.info("Embedder loaded")
except Exception as e:
logger.warning(f"Embedder initialization deferred: {e}")
try:
from app.core.vectorstore import get_vectorstore
from app.core.bm25 import get_bm25
vs = get_vectorstore()
bm25 = get_bm25()
bm25.rebuild_from_vectorstore(vs)
logger.info(f"BM25 index ready: {bm25.doc_count} documents")
except Exception as e:
logger.warning(f"Vectorstore/BM25 initialization deferred: {e}")
logger.info("RagCore ready!")
yield
logger.info("RagCore shutting down...")
app = FastAPI(
title="RagCore",
description="RAG system with hybrid search and metadata filtering",
version="0.1.0",
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(health.router)
app.include_router(ingest.router)
app.include_router(query.router)
# Mount Gradio UI at root
from app.ui.gradio_app import create_gradio_app
gradio_app = create_gradio_app()
app = gr.mount_gradio_app(app, gradio_app, path="/")
|