feat(solaris): moving to service system to support multi-chat
This commit is contained in:
@@ -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(),
|
||||
)
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
from .solaris import SolarisClientProvider
|
||||
from .gemini import GeminiClientProvider
|
||||
from .solaris import SolarisProvider
|
||||
|
||||
13
src/dependencies/providers/gemini.py
Normal file
13
src/dependencies/providers/gemini.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user