from fastapi import FastAPI from routes import base, data, nlp from motor.motor_asyncio import AsyncIOMotorClient #to call database name/url from helpers.config import get_settings from stores.LLM.LLMProviderFActory import LLMProviderfactory #import provider factory from stores.vectordb.VectorDBProviderFactory import VectorDBProviderFactory from stores.LLM.templates.template_parser import TemplateParser from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.asyncio import AsyncSession # import metrics from utils import setup_metrics app = FastAPI() # setup metrics setup_metrics(app) @app.on_event("startup") async def startup_span(): settings = get_settings() # create conniction postgres_conn = f"postgresql+asyncpg://{settings.POSTGRES_USERNAME}:{settings.POSTGRES_PASSWORD}@{settings.POSTGRES_HOST}:{settings.POSTGRES_PORT}/{settings.POSTGRES_MAIN_DATABASE}" app.db_engine = create_async_engine(postgres_conn) app.db_client = sessionmaker( bind=app.db_engine, class_ = AsyncSession,expire_on_commit=False ) llm_provider_factory = LLMProviderfactory(settings) vectordb_provider_factory = VectorDBProviderFactory(config=settings,db_client=app.db_client) #generate client app.generation_client = llm_provider_factory.create(provider=settings.GENERATION_BACKEND) app.generation_client.set_generation_model(model_id=settings.GENERATION_MODEL_ID) # embedding client app.embedding_client = llm_provider_factory.create(provider=settings.EMBEDDING_BACKEND) app.embedding_client.set_embedding_model(model_id=settings.EMBEDDING_MODEL_ID, embedding_size=settings.EMBEDDING_MODEL_SIZE) # vectordb client app.vectordb_client = vectordb_provider_factory.create( provider=settings.VECTOR_DB_BACKEND ) await app.vectordb_client.connect() app.template_parser = TemplateParser( lnaguage = settings.PRIMARY_LANG,default_language=settings.DEFAULT_LANG ) @app.on_event("shutdown") async def shutdown_span(): app.db_engine.dispose() await app.vectordb_client.disconnect() app.include_router(base.base_router) app.include_router(data.data_router) app.include_router(nlp.nlp_router)