plain-rag/app/main.py

46 lines
1.1 KiB
Python

from contextlib import asynccontextmanager
from dotenv import load_dotenv
from fastapi import FastAPI
from structlog import get_logger
from app.api import endpoints
from app.services.config_service import ConfigService
from app.services.rag_service import RAGService
from app.services.vector_stores import PGVectorStore
logger = get_logger()
load_dotenv()
app_state = {}
@asynccontextmanager
async def lifespan(app: FastAPI): # noqa: ARG001
config_service = ConfigService()
await config_service.initialize_models()
app_state["config_service"] = config_service
logger.info("Application starting up...")
embedding_model = config_service.get_current_embedding_model()
reranker = config_service.get_current_reranker_model()
if embedding_model is None:
raise RuntimeError("Embedding model failed to initialize")
app_state["rag_service"] = RAGService(
embedding_model=embedding_model,
vector_db=PGVectorStore(),
reranker=reranker,
)
yield
app = FastAPI(lifespan=lifespan)
app.include_router(endpoints.router)
@app.get("/")
def read_root():
return {"message": "Welcome to the Custom RAG API"}