File size: 2,568 Bytes
ce323cf
c6a2a56
 
ce323cf
 
c6a2a56
 
 
 
 
 
 
 
 
 
ce323cf
 
 
 
c6a2a56
ce323cf
c6a2a56
ce323cf
 
 
 
 
 
 
c6a2a56
 
 
 
 
 
 
 
 
 
 
 
 
ce323cf
c6a2a56
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
from dependency_injector.containers import DeclarativeContainer
from dependency_injector.providers import Factory, Singleton
from openai import OpenAI

from ctp_slack_bot.core.config import Settings
from ctp_slack_bot.db.mongo_db import MongoDB
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.event_brokerage_service import EventBrokerageService
from ctp_slack_bot.services.question_dispatch_service import QuestionDispatchService
from ctp_slack_bot.services.slack_service import SlackService
from ctp_slack_bot.services.vector_database_service import VectorDatabaseService
from ctp_slack_bot.services.vectorization_service import VectorizationService


class Container(DeclarativeContainer):
    settings = Singleton(Settings)

    event_brokerage_service = Singleton(EventBrokerageService)

    mongo_db = Singleton(MongoDB, settings=settings)

    # Repositories
    # transcript_repository = Factory(
    #     # Your transcript repository class
    #     db=db
    # )

    open_ai_client = Factory(OpenAI, api_key=settings.provided.OPENAI_API_KEY) # TODO: poor practice to do it this way; create a LanguageModelService that creates an OpenAI client.

    vector_database_service = Singleton(VectorDatabaseService, settings=settings, mongo_db=mongo_db)

    vectorization_service = Singleton(VectorizationService, settings=settings, client=open_ai_client)

    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)

    answer_retrieval_service = Singleton(AnswerRetrievalService, settings=settings, event_brokerage_service=event_brokerage_service, client=open_ai_client)

    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_service = Singleton(SlackService, settings=settings, event_brokerage_service=event_brokerage_service)