Fix reaction handling.
This commit is contained in:
parent
73d9b9184d
commit
1bff1c9719
@ -248,7 +248,7 @@ class AIResponder(AIResponderBase):
|
||||
async def fix(self, answer: str) -> str:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def memory_rewrite(self, memory: str, user: str, question: str, answer: str) -> str:
|
||||
async def memory_rewrite(self, memory: str, message_user: str, answer_user: str, question: str, answer: str) -> str:
|
||||
raise NotImplementedError()
|
||||
|
||||
async def translate(self, text: str, language: str = "english") -> str:
|
||||
@ -292,13 +292,14 @@ class AIResponder(AIResponderBase):
|
||||
response["picture"] = await self.translate(response["picture"])
|
||||
return True
|
||||
|
||||
async def memoize(self, user: str, message: str, answer: str) -> None:
|
||||
self.memory = await self.memory_rewrite(self.memory, user, message, answer)
|
||||
async def memoize(self, message_user: str, answer_user: str, message: str, answer: str) -> None:
|
||||
self.memory = await self.memory_rewrite(self.memory, message_user, answer_user, message, answer)
|
||||
self.update_memory(self.memory)
|
||||
|
||||
async def memoize_reaction(self, message_user: str, reaction_user: str, operation: str, reaction: str, message: str) -> None:
|
||||
quoted_message = message.replace('\n', '\n> ')
|
||||
await self.memoize(reaction_user, f'{message_user}:\n> {quoted_message}',
|
||||
await self.memoize(message_user, reaction_user,
|
||||
f'> {quoted_message}',
|
||||
f'User {reaction_user} has {operation} this raction: {reaction}')
|
||||
|
||||
async def send(self, message: AIMessage) -> AIResponse:
|
||||
@ -352,7 +353,7 @@ class AIResponder(AIResponderBase):
|
||||
|
||||
# Update memory
|
||||
if answer_message.answer is not None:
|
||||
await self.memoize(message.user, message.message, answer_message.answer)
|
||||
await self.memoize(message.user, 'assistant', message.message, answer_message.answer)
|
||||
|
||||
# Return the updated answer message
|
||||
return answer_message
|
||||
|
||||
@ -32,6 +32,7 @@ class FjerkroaBot(commands.Bot):
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
intents.members = True
|
||||
intents.reactions = True
|
||||
self._re_user = re.compile(r"[<][@][!]?\s*([0-9]+)[>]")
|
||||
|
||||
self.init_observer()
|
||||
@ -108,21 +109,21 @@ class FjerkroaBot(commands.Bot):
|
||||
return
|
||||
await self.handle_message_through_responder(message)
|
||||
|
||||
async def on_reaction_add(self, reaction, user):
|
||||
if user.bot:
|
||||
return
|
||||
async def on_reaction_operation(self, reaction, user, operation):
|
||||
logging.info(f'{operation} reaction {reaction} by {user}.')
|
||||
airesponder = self.get_ai_responder(self.get_channel_name(reaction.message.channel))
|
||||
message = str(reaction.message.content) if reaction.message.content else ''
|
||||
if len(message) > 1:
|
||||
await airesponder.memoize_reaction(reaction.message.user.name, user.name, 'adding', str(reaction.emoji), message)
|
||||
await airesponder.memoize_reaction(reaction.message.author.name, user.name, operation, str(reaction.emoji), message)
|
||||
|
||||
async def on_reaction_add(self, reaction, user):
|
||||
await self.on_reaction_operation(reaction, user, 'adding')
|
||||
|
||||
async def on_reaction_remove(self, reaction, user):
|
||||
if user.bot:
|
||||
return
|
||||
airesponder = self.get_ai_responder(self.get_channel_name(reaction.message.channel))
|
||||
message = str(reaction.message.content) if reaction.message.content else ''
|
||||
if len(message) > 1:
|
||||
await airesponder.memoize_reaction(reaction.message.user.name, user.name, 'removing', str(reaction.emoji), message)
|
||||
await self.on_reaction_operation(reaction, user, 'removing')
|
||||
|
||||
async def on_reaction_clear(self, reaction, user):
|
||||
await self.on_reaction_operation(reaction, user, 'clearing')
|
||||
|
||||
def on_config_file_modified(self, event):
|
||||
if event.src_path == self.config_file:
|
||||
|
||||
@ -111,15 +111,16 @@ class OpenAIResponder(AIResponder, LeonardoAIDrawMixIn):
|
||||
logging.warning(f"failed to translate the text: {repr(err)}")
|
||||
return text
|
||||
|
||||
async def memory_rewrite(self, memory: str, user: str, question: str, answer: str) -> str:
|
||||
async def memory_rewrite(self, memory: str, message_user: str, answer_user: str, question: str, answer: str) -> str:
|
||||
if 'memory-model' not in self.config:
|
||||
return memory
|
||||
messages = [{'role': 'system', 'content': self.config.get('memory-system', 'You are an memory assistant.')},
|
||||
{'role': 'user', 'content': f'Here is my previous memory:\n```\n{memory}\n```\n\n'
|
||||
f'Here is my conversanion:\n```\n{user}: {question}\n\nassistant: {answer}\n```\n\n'
|
||||
f'Here is my conversanion:\n```\n{message_user}: {question}\n\n{answer_user}: {answer}\n```\n\n'
|
||||
f'Please rewrite the memory in a way, that it contain the content mentioned in conversation. '
|
||||
f'The whole memory should not be too long, summarize if required. '
|
||||
f'Write just new memory data without any comments.'}]
|
||||
logging.info(f'Rewrite memory:\n{pp(messages)}')
|
||||
try:
|
||||
# logging.info(f'send this memory request:\n{pp(messages)}')
|
||||
result = await openai_chat(self.client,
|
||||
|
||||
BIN
openai_chat.dat
BIN
openai_chat.dat
Binary file not shown.
Loading…
Reference in New Issue
Block a user