Spaces:
Runtime error
Runtime error
File size: 4,348 Bytes
ce323cf c089adf c21d29c 8ec2c5a ce323cf c21d29c c089adf c6a2a56 9fd6e20 c6a2a56 c5fe6f5 9fd6e20 c6a2a56 92e41ba c21d29c c6a2a56 ce323cf c089adf ce323cf c6a2a56 92e41ba c21d29c c6a2a56 9fd6e20 c6a2a56 9fd6e20 c6a2a56 c21d29c c089adf c5fe6f5 c089adf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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 MongoVectorizedChunkRepository
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.vector_database_service import VectorDatabaseService
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):
settings = Singleton(Settings)
event_brokerage_service = Singleton(EventBrokerageService)
schedule_service = Resource(ScheduleServiceResource, settings=settings)
mongo_db = Resource(MongoDBResource, settings=settings) # TODO: generalize to any database.
vectorized_chunk_repository = Singleton(MongoVectorizedChunkRepository, mongo_db=mongo_db)
vector_database_service = Singleton(VectorDatabaseService, 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, vector_database_service=vector_database_service, vectorization_service=vectorization_service)
context_retrieval_service = Singleton(ContextRetrievalService, settings=settings, vectorization_service=vectorization_service, vector_database_service=vector_database_service)
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(AsyncApp, token=settings.provided.SLACK_BOT_TOKEN().get_secret_value())
slack_service = Resource(SlackServiceResource, event_brokerage_service=event_brokerage_service, slack_bolt_app=slack_bolt_app)
socket_mode_handler = Singleton(lambda _, app, app_token: AsyncSocketModeHandler(app, app_token), slack_service, slack_bolt_app, settings.provided.SLACK_APP_TOKEN().get_secret_value())
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)
|