121 lines
3.9 KiB
Python
121 lines
3.9 KiB
Python
import json
|
|
import os
|
|
|
|
from dependency_injector import providers, containers
|
|
from firebase_admin import credentials
|
|
from openai import AsyncOpenAI
|
|
from httpx import AsyncClient as HTTPClient
|
|
from google.cloud.firestore_v1 import AsyncClient as FirestoreClient
|
|
from dotenv import load_dotenv
|
|
from sentence_transformers import SentenceTransformer
|
|
|
|
from app.repositories.impl import *
|
|
from app.services.impl import *
|
|
from app.controllers.impl import *
|
|
|
|
load_dotenv()
|
|
|
|
|
|
def config_di(
|
|
*, polly_client: any, http_client: HTTPClient, whisper_model: any
|
|
) -> None:
|
|
"""
|
|
Loads up all the common configs of all the environments
|
|
and then calls the specific env configs
|
|
"""
|
|
# Firebase token
|
|
cred = credentials.Certificate(os.getenv("GOOGLE_APPLICATION_CREDENTIALS"))
|
|
firebase_token = cred.get_access_token().access_token
|
|
|
|
container = containers.DynamicContainer()
|
|
|
|
openai_client = providers.Singleton(AsyncOpenAI)
|
|
polly_client = providers.Object(polly_client)
|
|
http_client = providers.Object(http_client)
|
|
firestore_client = providers.Singleton(FirestoreClient)
|
|
whisper_model = providers.Object(whisper_model)
|
|
|
|
llm = providers.Factory(OpenAI, client=openai_client)
|
|
stt = providers.Factory(OpenAIWhisper, model=whisper_model)
|
|
tts = providers.Factory(AWSPolly, client=polly_client)
|
|
vid_gen = providers.Factory(Heygen, client=http_client, heygen_token=os.getenv("HEY_GEN_TOKEN"))
|
|
ai_detector = providers.Factory(GPTZero, client=http_client, gpt_zero_key=os.getenv("GPT_ZERO_API_KEY"))
|
|
|
|
firebase_instance = providers.Factory(
|
|
FirebaseStorage, client=http_client, token=firebase_token, bucket=os.getenv("FIREBASE_BUCKET")
|
|
)
|
|
|
|
firestore = providers.Factory(Firestore, client=firestore_client)
|
|
|
|
# Services
|
|
|
|
listening_service = providers.Factory(
|
|
ListeningService, llm=llm, tts=tts, file_storage=firebase_instance, document_store=firestore
|
|
)
|
|
reading_service = providers.Factory(ReadingService, llm=llm)
|
|
|
|
speaking_service = providers.Factory(
|
|
SpeakingService, llm=llm, vid_gen=vid_gen,
|
|
file_storage=firebase_instance, document_store=firestore,
|
|
stt=stt
|
|
)
|
|
|
|
writing_service = providers.Factory(WritingService, llm=llm, ai_detector=ai_detector)
|
|
|
|
with open('app/services/impl/level/mc_variants.json', 'r') as file:
|
|
mc_variants = json.load(file)
|
|
|
|
level_service = providers.Factory(
|
|
LevelService, llm=llm, document_store=firestore, mc_variants=mc_variants, reading_service=reading_service,
|
|
writing_service=writing_service, speaking_service=speaking_service, listening_service=listening_service
|
|
)
|
|
|
|
grade_service = providers.Factory(
|
|
GradeService, llm=llm
|
|
)
|
|
|
|
embeddings = SentenceTransformer('all-MiniLM-L6-v2')
|
|
|
|
training_kb = providers.Factory(
|
|
TrainingContentKnowledgeBase, embeddings=embeddings
|
|
)
|
|
|
|
training_service = providers.Factory(
|
|
TrainingService, llm=llm, firestore=firestore, training_kb=training_kb
|
|
)
|
|
|
|
# Controllers
|
|
|
|
container.grade_controller = providers.Factory(
|
|
GradeController, grade_service=grade_service, speaking_service=speaking_service, writing_service=writing_service
|
|
)
|
|
|
|
container.training_controller = providers.Factory(
|
|
TrainingController, training_service=training_service
|
|
)
|
|
|
|
container.level_controller = providers.Factory(
|
|
LevelController, level_service=level_service
|
|
)
|
|
container.listening_controller = providers.Factory(
|
|
ListeningController, listening_service=listening_service
|
|
)
|
|
|
|
container.reading_controller = providers.Factory(
|
|
ReadingController, reading_service=reading_service
|
|
)
|
|
|
|
container.speaking_controller = providers.Factory(
|
|
SpeakingController, speaking_service=speaking_service
|
|
)
|
|
|
|
container.writing_controller = providers.Factory(
|
|
WritingController, writing_service=writing_service
|
|
)
|
|
|
|
container.llm = llm
|
|
|
|
container.wire(
|
|
packages=["app"]
|
|
)
|