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:
mirivlad 2026-02-25 14:39:57 +08:00
parent d34c722471
commit a13db1490b
2 changed files with 48 additions and 0 deletions

View File

@ -479,3 +479,50 @@ async def menu_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
# Сбрасываем историю чата в состоянии # Сбрасываем историю чата в состоянии
state.ai_chat_history = [] 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")
)

View File

@ -186,6 +186,7 @@ def init_menus(menu_builder: MenuBuilder):
MenuItem("📋 Мой профиль", "memory_profile", icon="📋"), MenuItem("📋 Мой профиль", "memory_profile", icon="📋"),
MenuItem("📊 Статистика", "memory_stats", icon="📊"), MenuItem("📊 Статистика", "memory_stats", icon="📊"),
MenuItem("🗑️ Очистить историю", "memory_clear", icon="🗑️"), MenuItem("🗑️ Очистить историю", "memory_clear", icon="🗑️"),
MenuItem("🔄 Компактификация", "memory_compact", icon="🔄"),
MenuItem("⬅️ Назад", "settings", icon="⬅️"), MenuItem("⬅️ Назад", "settings", icon="⬅️"),
] ]
menu_builder.add_menu("memory", memory_menu) menu_builder.add_menu("memory", memory_menu)