import logging from aiogram import Router, types, F from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from database import db from handlers.commands import get_main_menu logger = logging.getLogger(__name__) router = Router() @router.callback_query(F.data == "regenerate") async def cb_regenerate(callback: types.CallbackQuery) -> None: """Помечает последнее сообщение пользователя для регенерации.""" await callback.answer("🔄 Регенерация...") # Удаляем последний ответ ассистента, чтобы chat handler перегенерировал user_id = callback.from_user.id # Получаем последнее сообщение пользователя history = await db.get_messages(user_id, limit=2) if len(history) >= 1 and history[-1]["role"] == "user": await callback.message.answer( "🔄 Регенерирую ответ...", parse_mode="HTML", ) else: await callback.message.answer( "❌ Нет сообщения для регенерации.", parse_mode="HTML", ) @router.callback_query(F.data == "clear_memory") async def cb_clear_memory(callback: types.CallbackQuery) -> None: user_id = callback.from_user.id count = await db.clear_history(user_id) await callback.answer("🗑 Память очищена!") await callback.message.answer( f"🗑 Память очищена.\nУдалено сообщений: {count}.", parse_mode="HTML", reply_markup=get_main_menu(), ) @router.callback_query(F.data == "show_stats") async def cb_show_stats(callback: types.CallbackQuery) -> None: stats = await db.get_stats(callback.from_user.id) await callback.answer() await callback.message.answer( f"📊 Статистика:\n\n" f"💬 Ваших сообщений: {stats['user_messages']}\n" f"📝 Суммаризировано: {stats['summarized_messages']}\n" f"🔢 Токенов: {stats['total_tokens_used']}\n" f"⏱ Средняя задержка: {stats['avg_latency_ms']} мс", parse_mode="HTML", ) @router.callback_query(F.data == "show_settings") async def cb_show_settings(callback: types.CallbackQuery) -> None: from config import config await callback.answer() kb = InlineKeyboardMarkup(inline_keyboard=[ [InlineKeyboardButton(text="🌡 Temperature", callback_data="set_temp")], [InlineKeyboardButton(text="📏 Max Tokens", callback_data="set_max_tokens")], [InlineKeyboardButton(text="🔙 Назад", callback_data="back_to_menu")], ]) await callback.message.answer( "⚙️ Настройки:\n\n" f"🌡 Temperature: {config.GLM_TEMPERATURE}\n" f"📏 Max Tokens: {config.GLM_MAX_TOKENS}\n" f"🔄 Streaming: {'ON' if config.STREAMING_ENABLED else 'OFF'}", parse_mode="HTML", reply_markup=kb, ) @router.callback_query(F.data == "back_to_menu") async def cb_back_to_menu(callback: types.CallbackQuery) -> None: await callback.answer() await callback.message.answer( "👋 Главное меню:", reply_markup=get_main_menu(), )