|
""" |
|
Main application entry point. |
|
""" |
|
|
|
import logging |
|
import os |
|
from fastapi import FastAPI |
|
import uvicorn |
|
from dotenv import load_dotenv |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
from config import get_logging_config |
|
import logging.config |
|
logging.config.dictConfig(get_logging_config()) |
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
app = FastAPI( |
|
title="RAG API System", |
|
description="API for RAG-based question answering", |
|
version="1.0.0" |
|
) |
|
|
|
|
|
def initialize_components(): |
|
"""Initialize all system components.""" |
|
logger.info("Initializing system components") |
|
|
|
|
|
from embedding.model import create_embedding_model |
|
embedding_model = create_embedding_model() |
|
logger.info(f"Embedding model initialized with dimension {embedding_model.dimension}") |
|
|
|
|
|
from storage.vector_db import create_vector_database |
|
vector_db = create_vector_database(dimension=embedding_model.dimension) |
|
logger.info("Vector database initialized") |
|
|
|
|
|
from rag.engine import create_rag_engine |
|
rag_engine = create_rag_engine( |
|
embedder=embedding_model, |
|
vector_db=vector_db |
|
) |
|
logger.info("RAG engine initialized") |
|
|
|
return rag_engine |
|
|
|
|
|
def register_api_routes(app, rag_engine): |
|
"""Register API routes.""" |
|
from api.routes import RAGAPIRouter |
|
router = RAGAPIRouter(app, rag_engine) |
|
logger.info("API routes registered") |
|
|
|
|
|
@app.get("/", tags=["Root"]) |
|
async def root(): |
|
"""Root endpoint returning basic system information.""" |
|
return { |
|
"name": "RAG API System", |
|
"version": "1.0.0", |
|
"status": "running" |
|
} |
|
|
|
|
|
def main(): |
|
"""Main application entry point.""" |
|
logger.info("Starting RAG API system") |
|
|
|
|
|
rag_engine = initialize_components() |
|
|
|
|
|
register_api_routes(app, rag_engine) |
|
|
|
|
|
if __name__ == "__main__": |
|
host = os.getenv("API_HOST", "0.0.0.0") |
|
port = int(os.getenv("API_PORT", "8000")) |
|
|
|
logger.info(f"Starting server on http://{host}:{port}") |
|
uvicorn.run(app, host=host, port=port) |
|
|
|
return app |
|
|
|
|
|
app = main() |
|
|