Spaces:
Runtime error
Runtime error
"""FastAPI app creation, logger configuration and main API routes.""" | |
import logging | |
from fastapi import Depends, FastAPI, Request | |
from fastapi.middleware.cors import CORSMiddleware | |
from injector import Injector | |
from llama_index.core.callbacks import CallbackManager | |
from llama_index.core.callbacks.global_handlers import create_global_handler | |
from llama_index.core.settings import Settings as LlamaIndexSettings | |
from private_gpt.server.chat.chat_router import chat_router | |
from private_gpt.server.chunks.chunks_router import chunks_router | |
from private_gpt.server.completions.completions_router import completions_router | |
from private_gpt.server.embeddings.embeddings_router import embeddings_router | |
from private_gpt.server.health.health_router import health_router | |
from private_gpt.server.ingest.ingest_router import ingest_router | |
from private_gpt.settings.settings import Settings | |
logger = logging.getLogger(__name__) | |
def create_app(root_injector: Injector) -> FastAPI: | |
# Start the API | |
async def bind_injector_to_request(request: Request) -> None: | |
request.state.injector = root_injector | |
app = FastAPI(dependencies=[Depends(bind_injector_to_request)]) | |
app.include_router(completions_router) | |
app.include_router(chat_router) | |
app.include_router(chunks_router) | |
app.include_router(ingest_router) | |
app.include_router(embeddings_router) | |
app.include_router(health_router) | |
# Add LlamaIndex simple observability | |
global_handler = create_global_handler("simple") | |
LlamaIndexSettings.callback_manager = CallbackManager([global_handler]) | |
settings = root_injector.get(Settings) | |
if settings.server.cors.enabled: | |
logger.debug("Setting up CORS middleware") | |
app.add_middleware( | |
CORSMiddleware, | |
allow_credentials=settings.server.cors.allow_credentials, | |
allow_origins=settings.server.cors.allow_origins, | |
allow_origin_regex=settings.server.cors.allow_origin_regex, | |
allow_methods=settings.server.cors.allow_methods, | |
allow_headers=settings.server.cors.allow_headers, | |
) | |
if settings.ui.enabled: | |
logger.debug("Importing the UI module") | |
try: | |
from private_gpt.ui.ui import PrivateGptUi | |
except ImportError as e: | |
raise ImportError( | |
"UI dependencies not found, install with `poetry install --extras ui`" | |
) from e | |
ui = root_injector.get(PrivateGptUi) | |
ui.mount_in_app(app, settings.ui.path) | |
return app | |