| 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, |
| ) |
|
|