diff --git a/fjerkroa_bot/ai_responder.py b/fjerkroa_bot/ai_responder.py index cd3743b..84815ca 100644 --- a/fjerkroa_bot/ai_responder.py +++ b/fjerkroa_bot/ai_responder.py @@ -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 diff --git a/fjerkroa_bot/discord_bot.py b/fjerkroa_bot/discord_bot.py index c0a88dd..98a19cd 100644 --- a/fjerkroa_bot/discord_bot.py +++ b/fjerkroa_bot/discord_bot.py @@ -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: diff --git a/fjerkroa_bot/openai_responder.py b/fjerkroa_bot/openai_responder.py index e048e5e..4496ad9 100644 --- a/fjerkroa_bot/openai_responder.py +++ b/fjerkroa_bot/openai_responder.py @@ -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, diff --git a/openai_chat.dat b/openai_chat.dat index 9c0b6f9..3a0f5f4 100644 Binary files a/openai_chat.dat and b/openai_chat.dat differ