replace python django backend with nodejs backend
This commit is contained in:
83
backend_old/ai/services/AiInstance.py
Normal file
83
backend_old/ai/services/AiInstance.py
Normal file
@@ -0,0 +1,83 @@
|
||||
import threading
|
||||
from typing import AnyStr
|
||||
|
||||
from .DcClient import DcClient
|
||||
from ..ais.AiBase import AiBase
|
||||
from ..ais.QwenAi import QwenAi
|
||||
from ..events import chat_text_signal, discord_online_signal, discord_react_to_chat_signal
|
||||
from ..models import AiConfig
|
||||
|
||||
|
||||
class DiscordStatus:
|
||||
def __init__(self, instance):
|
||||
self._instance = instance
|
||||
self._client = DcClient(instance)
|
||||
self.online = False
|
||||
self.react_to_chat = False
|
||||
|
||||
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
|
||||
discord_online_signal.send(sender=self.__class__, ai_name=self._instance.configuration.name, status=self.online)
|
||||
|
||||
def set_react_to_chat(self, react_to_chat: bool):
|
||||
self.react_to_chat = react_to_chat
|
||||
discord_react_to_chat_signal.send(sender=self.__class__, ai_name=self._instance.configuration.name,
|
||||
status=self.react_to_chat)
|
||||
|
||||
def __del__(self):
|
||||
self.set_online(False)
|
||||
|
||||
|
||||
class AiInstance:
|
||||
def __init__(self, configuration: AiConfig):
|
||||
print('Initializing AiInstance ' + configuration.name)
|
||||
self._bot: AiBase | None = None
|
||||
self._botLock = threading.Lock()
|
||||
self.configuration = configuration
|
||||
self.discord = DiscordStatus(self)
|
||||
self.messages = []
|
||||
self._messagesLock = threading.Lock()
|
||||
|
||||
def endure_loaded(self):
|
||||
self._botLock.acquire()
|
||||
try:
|
||||
if self._bot is None:
|
||||
self._bot = QwenAi(self.configuration.model_id_or_path)
|
||||
finally:
|
||||
self._botLock.release()
|
||||
|
||||
def endure_unloaded(self):
|
||||
self._botLock.acquire()
|
||||
try:
|
||||
if self._bot is not None:
|
||||
del self._bot
|
||||
self._bot = None
|
||||
finally:
|
||||
self._botLock.release()
|
||||
|
||||
def chat_text(self, user: AnyStr, text: AnyStr):
|
||||
self.endure_loaded()
|
||||
self._messagesLock.acquire()
|
||||
try:
|
||||
self.messages.append({'role': 'user', 'name': user, 'content': text})
|
||||
chat_text_signal.send(sender=self.__class__, ai_name=self.configuration.name, message=self.messages[-1])
|
||||
self.messages = self._bot.generate(self.messages)
|
||||
chat_text_signal.send(sender=self.__class__, ai_name=self.configuration.name, message=self.messages[-1])
|
||||
return self.messages[-1]
|
||||
finally:
|
||||
self._messagesLock.release()
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user