diff --git a/bot/handlers/callbacks.py b/bot/handlers/callbacks.py index 407daf7..bee81c8 100644 --- a/bot/handlers/callbacks.py +++ b/bot/handlers/callbacks.py @@ -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") + ) + diff --git a/bot/keyboards/menus.py b/bot/keyboards/menus.py index 61f1911..210117a 100644 --- a/bot/keyboards/menus.py +++ b/bot/keyboards/menus.py @@ -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)