Добавлена пересылка оригинального сообщения при ответе на сообщение бота, которое не является последним в контексте.
This commit is contained in:
parent
66fdbc3360
commit
6088606810
4 changed files with 40 additions and 12 deletions
|
|
@ -109,6 +109,9 @@ class AiAgent:
|
||||||
print(f"Ошибка выполнения запроса к ИИ: {e}")
|
print(f"Ошибка выполнения запроса к ИИ: {e}")
|
||||||
return f"Извините, при обработке запроса произошла ошибка.", False
|
return f"Извините, при обработке запроса произошла ошибка.", False
|
||||||
|
|
||||||
|
def get_last_assistant_message_id(self, chat_id: int):
|
||||||
|
return self.db.context_get_last_assistant_message_id(chat_id)
|
||||||
|
|
||||||
def set_last_response_id(self, chat_id: int, message_id: int):
|
def set_last_response_id(self, chat_id: int, message_id: int):
|
||||||
self.db.context_set_last_message_id(chat_id, message_id)
|
self.db.context_set_last_message_id(chat_id, message_id)
|
||||||
|
|
||||||
|
|
|
||||||
26
database.py
26
database.py
|
|
@ -118,25 +118,27 @@ class BasicDatabase:
|
||||||
self.cursor.execute("SELECT COUNT(*) FROM contexts WHERE chat_id = ?", chat_id)
|
self.cursor.execute("SELECT COUNT(*) FROM contexts WHERE chat_id = ?", chat_id)
|
||||||
return self.cursor.fetchval()
|
return self.cursor.fetchval()
|
||||||
|
|
||||||
|
def context_get_last_assistant_message_id(self, chat_id: int) -> Optional[int]:
|
||||||
|
return self.cursor.execute("""
|
||||||
|
SELECT message_id FROM contexts
|
||||||
|
WHERE chat_id = ? AND role = 'assistant' AND message_id IS NOT NULL
|
||||||
|
ORDER BY message_id DESC
|
||||||
|
LIMIT 1
|
||||||
|
""", chat_id).fetchval()
|
||||||
|
|
||||||
def context_add_message(self, chat_id: int, role: str, content: str, message_id: Optional[int], max_messages: int):
|
def context_add_message(self, chat_id: int, role: str, content: str, message_id: Optional[int], max_messages: int):
|
||||||
self._context_trim(chat_id, max_messages)
|
self._context_trim(chat_id, max_messages)
|
||||||
|
|
||||||
if message_id is not None:
|
if message_id is not None:
|
||||||
self.cursor.execute("""
|
self.cursor.execute("INSERT INTO contexts (chat_id, message_id, role, content) VALUES (?, ?, ?, ?)",
|
||||||
INSERT INTO contexts (chat_id, message_id, role, content)
|
chat_id, message_id, role, content)
|
||||||
VALUES (?, ?, ?, ?)
|
|
||||||
""", chat_id, message_id, role, content)
|
|
||||||
else:
|
else:
|
||||||
self.cursor.execute("""
|
self.cursor.execute("INSERT INTO contexts (chat_id, role, content) VALUES (?, ?, ?)",
|
||||||
INSERT INTO contexts (chat_id, role, content)
|
chat_id, role, content)
|
||||||
VALUES (?, ?, ?)
|
|
||||||
""", chat_id, role, content)
|
|
||||||
|
|
||||||
def context_set_last_message_id(self, chat_id: int, message_id: int):
|
def context_set_last_message_id(self, chat_id: int, message_id: int):
|
||||||
self.cursor.execute("""
|
self.cursor.execute("UPDATE contexts SET message_id = ? WHERE chat_id = ? AND message_id IS NULL",
|
||||||
UPDATE contexts SET message_id = ?
|
message_id, chat_id)
|
||||||
WHERE chat_id = ? AND message_id IS NULL
|
|
||||||
""", message_id, chat_id)
|
|
||||||
|
|
||||||
def _context_trim(self, chat_id: int, max_messages: int):
|
def _context_trim(self, chat_id: int, max_messages: int):
|
||||||
current_count = self.context_get_count(chat_id)
|
current_count = self.context_get_count(chat_id)
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,17 @@ async def any_message_handler(message: Message):
|
||||||
else:
|
else:
|
||||||
await message.reply(MESSAGE_NOT_TEXT)
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
last_id = ai_agent.agent.get_last_assistant_message_id(chat_id)
|
||||||
|
if message.reply_to_message.message_id != last_id:
|
||||||
|
# Оригинального сообщения нет в контексте, или оно не последнее
|
||||||
|
if message.content_type == ContentType.TEXT:
|
||||||
|
ai_fwd_messages = [
|
||||||
|
ai_agent.Message(user_name=await get_user_name_for_ai(message.reply_to_message.from_user),
|
||||||
|
text=message.reply_to_message.text)]
|
||||||
|
else:
|
||||||
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,18 @@ async def any_message_handler(message: Message):
|
||||||
else:
|
else:
|
||||||
await message.reply(MESSAGE_NOT_TEXT)
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
last_id = ai_agent.agent.get_last_assistant_message_id(chat_id)
|
||||||
|
if message.reply_message.message_id != last_id:
|
||||||
|
# Оригинального сообщения нет в контексте, или оно не последнее
|
||||||
|
if len(message.reply_message.text) > 0:
|
||||||
|
ai_fwd_messages = [
|
||||||
|
ai_agent.Message(user_name=await get_user_name_for_ai(message.ctx_api,
|
||||||
|
message.reply_message.from_id),
|
||||||
|
text=message.reply_message.text)]
|
||||||
|
else:
|
||||||
|
await message.reply(MESSAGE_NOT_TEXT)
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue