LiKenun's picture
Convert more service methods to async; drop `VectorDatabaseService` intermediary and use the repository classes directly
f7e11c1
raw
history blame
5.86 kB
from dependency_injector.containers import DeclarativeContainer
from dependency_injector.providers import Callable, Resource, Singleton
from importlib import import_module
from pathlib import Path
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
from slack_bolt.async_app import AsyncApp
from ctp_slack_bot.core.config import Settings
from ctp_slack_bot.db.mongo_db import MongoDBResource
from ctp_slack_bot.db.repositories.mongo_db_vectorized_chunk_repository import MongoVectorizedChunkRepositoryResource
from ctp_slack_bot.mime_type_handlers.base import MimeTypeHandlerMeta
from ctp_slack_bot.services.answer_retrieval_service import AnswerRetrievalService
from ctp_slack_bot.services.content_ingestion_service import ContentIngestionService
from ctp_slack_bot.services.context_retrieval_service import ContextRetrievalService
from ctp_slack_bot.services.embeddings_model_service import EmbeddingsModelService
from ctp_slack_bot.services.event_brokerage_service import EventBrokerageService
from ctp_slack_bot.services.google_drive_service import GoogleDriveService
from ctp_slack_bot.services.language_model_service import LanguageModelService
from ctp_slack_bot.services.question_dispatch_service import QuestionDispatchService
from ctp_slack_bot.services.schedule_service import ScheduleServiceResource
from ctp_slack_bot.services.slack_service import SlackServiceResource
from ctp_slack_bot.services.vectorization_service import VectorizationService
def __load_plugins(plugin_dir) -> None:
for path in Path(plugin_dir).glob("*.py"):
if path.stem == "__init__":
continue # Skip __init__.py files
module_name = f"{plugin_dir.replace('/', '.')}.{path.stem}"
import_module(module_name)
__load_plugins("ctp_slack_bot/mime_type_handlers")
class Container(DeclarativeContainer): # TODO: audit for potential async-related bugs.
settings = Singleton(Settings)
event_brokerage_service = Singleton(EventBrokerageService)
schedule_service = Resource (ScheduleServiceResource,
settings=settings)
mongo_db = Resource (MongoDBResource, # TODO: generalize to any database.
settings=settings)
vectorized_chunk_repository = Resource (MongoVectorizedChunkRepositoryResource,
settings=settings,
mongo_db=mongo_db)
embeddings_model_service = Singleton(EmbeddingsModelService,
settings=settings)
vectorization_service = Singleton(VectorizationService,
settings=settings,
embeddings_model_service=embeddings_model_service)
content_ingestion_service = Singleton(ContentIngestionService,
settings=settings,
event_brokerage_service=event_brokerage_service,
vectorized_chunk_repository=vectorized_chunk_repository,
vectorization_service=vectorization_service)
context_retrieval_service = Singleton(ContextRetrievalService,
settings=settings,
vectorization_service=vectorization_service,
vectorized_chunk_repository=vectorized_chunk_repository)
language_model_service = Singleton(LanguageModelService,
settings=settings)
answer_retrieval_service = Singleton(AnswerRetrievalService,
settings=settings,
event_brokerage_service=event_brokerage_service,
language_model_service=language_model_service)
question_dispatch_service = Singleton(QuestionDispatchService,
settings=settings,
event_brokerage_service=event_brokerage_service,
content_ingestion_service=content_ingestion_service,
context_retrieval_service=context_retrieval_service,
answer_retrieval_service=answer_retrieval_service)
slack_bolt_app = Singleton(lambda settings: AsyncApp(token=settings.SLACK_BOT_TOKEN.get_secret_value()),
settings)
slack_service = Resource (SlackServiceResource,
event_brokerage_service=event_brokerage_service,
slack_bolt_app=slack_bolt_app)
socket_mode_handler = Singleton(lambda _, app, settings: AsyncSocketModeHandler(app, settings.SLACK_APP_TOKEN.get_secret_value()),
slack_service,
slack_bolt_app,
settings)
mime_type_handler_factory = Callable (lambda mime_type: MimeTypeHandlerMeta._registry[mime_type]())
google_drive_service = Singleton(GoogleDriveService,
settings=settings)
# file_monitor_service = Singleton(FileMonitorService,
# settings=settings,
# google_drive_service=google_drive_service,
# mime_type_handler_factory=mime_type_handler_factory)