feat: добавить команду /compact в меню памяти ИИ
- Добавлена кнопка '🔄 Компактификация' в меню memory_menu
- Реализован callback handler для memory_compact
- Компактификация запускается из меню с отображением прогресса
- Исправление: команда /compact теперь доступна через меню
Version: 0.5.3
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
d34c722471
commit
a13db1490b
|
|
@ -479,3 +479,50 @@ async def menu_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||
# Сбрасываем историю чата в состоянии
|
||||
state.ai_chat_history = []
|
||||
|
||||
elif callback == "memory_compact":
|
||||
# Вызываем команду /compact через send_message
|
||||
await query.edit_message_text(
|
||||
"🔄 **Запуск компактификации истории...**\n\n"
|
||||
"_Сжатие старой истории в структурированный summary._\n"
|
||||
"_Это может занять несколько секунд._",
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
|
||||
# Получаем compactor и выполняем компактификацию
|
||||
from bot.compaction import get_compactor
|
||||
try:
|
||||
compactor = get_compactor()
|
||||
result = await compactor.compact()
|
||||
|
||||
if result.success:
|
||||
if result.messages_compressed > 0:
|
||||
await query.edit_message_text(
|
||||
f"✅ **Компактификация завершена!**\n\n"
|
||||
f"📊 Сжато сообщений: `{result.messages_compressed}`\n"
|
||||
f"📝 Длина summary: `{result.summary_length}` символов\n"
|
||||
f"💾 Экономия токенов: ~`{result.tokens_saved}`\n\n"
|
||||
f"_Summary автоматически используется в контексте диалога._",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=menu_builder.get_keyboard("memory")
|
||||
)
|
||||
else:
|
||||
await query.edit_message_text(
|
||||
"ℹ️ **Компактификация не требуется**\n\n"
|
||||
"_Недостаточно сообщений для сжатия или summary уже актуален._",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=menu_builder.get_keyboard("memory")
|
||||
)
|
||||
else:
|
||||
await query.edit_message_text(
|
||||
f"⚠️ **Ошибка компактификации:**\n`{result.error}`",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=menu_builder.get_keyboard("memory")
|
||||
)
|
||||
except Exception as e:
|
||||
logger.exception(f"Ошибка в memory_compact: {e}")
|
||||
await query.edit_message_text(
|
||||
f"⚠️ **Ошибка компактификации:**\n`{e}`",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=menu_builder.get_keyboard("memory")
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@ def init_menus(menu_builder: MenuBuilder):
|
|||
MenuItem("📋 Мой профиль", "memory_profile", icon="📋"),
|
||||
MenuItem("📊 Статистика", "memory_stats", icon="📊"),
|
||||
MenuItem("🗑️ Очистить историю", "memory_clear", icon="🗑️"),
|
||||
MenuItem("🔄 Компактификация", "memory_compact", icon="🔄"),
|
||||
MenuItem("⬅️ Назад", "settings", icon="⬅️"),
|
||||
]
|
||||
menu_builder.add_menu("memory", memory_menu)
|
||||
|
|
|
|||
Loading…
Reference in New Issue