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="/")