from typing import AnyStr from .DcClient import DcClient from ..ais.AiBase import AiBase from ..ais.QwenAi import QwenAi from ..models import AiConfig class DiscordStatus: _instance: any _client: DcClient online: bool = False react_to_chat: bool = False def __init__(self, instance): self._instance = instance self._client = DcClient(instance) def set_online(self, online: bool): if online and not self.online: self._client.connect() elif not online and self.online: self._client.disconnect() else: return self.online = online def set_react_to_chat(self, react_to_chat: bool): self.react_to_chat = react_to_chat def __del__(self): self.set_online(False) class AiInstance: _bot: AiBase | None = None configuration: AiConfig discord: DiscordStatus messages = [] def __init__(self, configuration: AiConfig): print('Initializing AiInstance ' + configuration.name) self.configuration = configuration self.discord = DiscordStatus(self) def endure_loaded(self): if self._bot is None: self._bot = QwenAi(self.configuration.model_id_or_path) def endure_unloaded(self): if self._bot is not None: del self._bot self._bot = None def chat_text(self, user: AnyStr, text: AnyStr): self.endure_loaded() self.messages.append({'role': 'user', 'name': user, 'content': text}) self.messages = self._bot.generate(self.messages) return self.messages[-1] def chat_conversation(self, conversation): self.endure_loaded() return self._bot.generate(conversation) def __del__(self): print('Destructing AiInstance ' + self.configuration.name) del self._bot del self.discord