feat(solaris): moving to service system to support multi-chat

This commit is contained in:
h
2025-07-05 01:13:12 +03:00
parent fd84210a65
commit 41927a1e07
16 changed files with 143 additions and 74 deletions

View File

@@ -1,7 +1,10 @@
from dishka import make_async_container
from dishka.integrations.aiogram import AiogramProvider
from .providers import SolarisClientProvider
from .providers import GeminiClientProvider, SolarisProvider
container = make_async_container(
SolarisClientProvider(),
AiogramProvider(),
SolarisProvider(),
GeminiClientProvider(),
)

View File

@@ -1 +1,2 @@
from .solaris import SolarisClientProvider
from .gemini import GeminiClientProvider
from .solaris import SolarisProvider

View File

@@ -0,0 +1,13 @@
from typing import AsyncIterable
from dishka import Provider, Scope, provide
from google import genai
from utils.env import env
class GeminiClientProvider(Provider):
@provide(scope=Scope.APP)
async def get_client(self) -> AsyncIterable[genai.client.AsyncClient]:
client = genai.Client(api_key=env.google.api_key.get_secret_value()).aio
yield client

View File

@@ -1,13 +1,27 @@
from typing import AsyncIterable
import aiogram.types
from dishka import Provider, Scope, provide
from dishka.integrations.aiogram import AiogramMiddlewareData
from google.genai.client import AsyncClient
from bot.modules.solaris.client import SolarisClient
from utils.env import env
from bot.modules.solaris.services.respond import RespondService
class SolarisClientProvider(Provider):
class SolarisProvider(Provider):
@provide(scope=Scope.APP)
async def get_client(self) -> AsyncIterable[SolarisClient]:
client = SolarisClient(env.google.api_key.get_secret_value())
async def get_solaris_client(
self, client: AsyncClient
) -> AsyncIterable[SolarisClient]:
client = SolarisClient(gemini_client=client)
yield client
@provide(scope=Scope.REQUEST)
async def get_respond_service(
self, client: AsyncClient, middleware_data: AiogramMiddlewareData
) -> AsyncIterable[RespondService]:
chat: aiogram.types.Chat = middleware_data["event_chat"]
service = RespondService(client=client, chat_id=chat.id)
await service.spawn_agent()
yield service