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 = []
|
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_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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue