File size: 2,463 Bytes
102dd4f 87c0663 102dd4f 1cd53ba 102dd4f 87c0663 102dd4f 1cd53ba 102dd4f 87c0663 0445c27 87c0663 102dd4f 87c0663 102dd4f 87c0663 102dd4f 1cd53ba 4ce08fd 1cd53ba 102dd4f 1cd53ba 102dd4f | 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 58 59 60 61 62 63 64 65 66 67 68 | from dataclasses import dataclass
from app.ai.router import LiteLLMOrchestration
from app.config import Settings
from app.database.supabase import SupabaseRepository, create_supabase_client
from app.services.admin_service import AdminService
from app.services.conversation_service import ConversationService
from app.services.embedding_service import JinaEmbeddingService
from app.services.group_message_service import GroupMessageService
from app.whatsapp.client import WhatsAppClient
@dataclass(slots=True)
class ServiceContainer:
settings: Settings
repository: SupabaseRepository
embeddings: JinaEmbeddingService
whatsapp: WhatsAppClient
ai: LiteLLMOrchestration
conversation: ConversationService
group_message: GroupMessageService
admin: AdminService
@classmethod
async def from_settings(cls, settings: Settings) -> "ServiceContainer":
supabase_client = await create_supabase_client(settings)
repository = SupabaseRepository(supabase_client)
embeddings = JinaEmbeddingService(settings)
whatsapp = WhatsAppClient(settings)
ai = LiteLLMOrchestration(
groq_api_key=settings.groq_api_key,
groq_model=settings.groq_model,
groq_api_key_2=settings.groq_api_key_2,
groq_model_2=settings.groq_model_2,
google_ai_api_key=settings.google_ai_api_key,
google_ai_model=settings.google_ai_model,
openrouter_api_key=settings.openrouter_api_key,
openrouter_model=settings.openrouter_model,
max_tool_iterations=settings.ai_max_tool_iterations,
temperature=settings.ai_temperature,
)
conversation = ConversationService(
repository=repository,
embeddings=embeddings,
whatsapp=whatsapp,
ai=ai,
settings=settings,
)
group_message = GroupMessageService(
repository=repository,
embeddings=embeddings,
ai=ai,
settings=settings,
)
admin = AdminService(repository=repository, embeddings=embeddings, settings=settings)
return cls(
settings=settings,
repository=repository,
embeddings=embeddings,
whatsapp=whatsapp,
ai=ai,
conversation=conversation,
group_message=group_message,
admin=admin,
)
|