pdf / app.py
navid72m's picture
Upload 9 files
43efcb9 verified
"""
Main application entry point.
"""
import logging
import os
from fastapi import FastAPI
import uvicorn
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Configure logging
from config import get_logging_config
import logging.config
logging.config.dictConfig(get_logging_config())
logger = logging.getLogger(__name__)
# Create FastAPI app
app = FastAPI(
title="RAG API System",
description="API for RAG-based question answering",
version="1.0.0"
)
# Initialize components
def initialize_components():
"""Initialize all system components."""
logger.info("Initializing system components")
# Create embedding model
from embedding.model import create_embedding_model
embedding_model = create_embedding_model()
logger.info(f"Embedding model initialized with dimension {embedding_model.dimension}")
# Create vector database
from storage.vector_db import create_vector_database
vector_db = create_vector_database(dimension=embedding_model.dimension)
logger.info("Vector database initialized")
# Create RAG engine
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
# Register API routes
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")
# Add health check route
@app.get("/", tags=["Root"])
async def root():
"""Root endpoint returning basic system information."""
return {
"name": "RAG API System",
"version": "1.0.0",
"status": "running"
}
# Main entry point
def main():
"""Main application entry point."""
logger.info("Starting RAG API system")
# Initialize components
rag_engine = initialize_components()
# Register API routes
register_api_routes(app, rag_engine)
# Run server if executed directly
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
# Create and run application
app = main()