Files
llm/backend/ai/services/AiInstance.py
wea_ondara 41474d474c added backend which maintains ai instances;
added frontend as control panel
2024-04-24 19:40:03 +02:00

69 lines
1.8 KiB
Python

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