feat: интеграция ML-скоринга с использованием RAG и DeepSeek
- Обновлен Dockerfile для установки необходимых зависимостей. - Добавлены новые переменные окружения для настройки ML-скоринга в env.example. - Реализованы методы для получения и обновления ML-скоров в AsyncBotDB и PostRepository. - Обновлены обработчики публикации постов для интеграции ML-скоринга. - Добавлен новый обработчик для получения статистики ML-скоринга в админ-панели. - Обновлены функции для форматирования сообщений с учетом ML-скоров.
This commit is contained in:
@@ -16,6 +16,7 @@ from helper_bot.keyboards.keyboards import (create_keyboard_for_approve_ban,
|
||||
create_keyboard_for_ban_reason,
|
||||
create_keyboard_with_pagination,
|
||||
get_reply_keyboard_admin)
|
||||
from helper_bot.utils.base_dependency_factory import get_global_instance
|
||||
# Local imports - metrics
|
||||
from helper_bot.utils.metrics import db_query_time, track_errors, track_time
|
||||
from logs.custom_logger import logger
|
||||
@@ -137,6 +138,69 @@ async def get_banned_users(
|
||||
await handle_admin_error(message, e, state, "get_banned_users")
|
||||
|
||||
|
||||
@admin_router.message(
|
||||
ChatTypeFilter(chat_type=["private"]),
|
||||
StateFilter("ADMIN"),
|
||||
F.text == '📊 ML Статистика'
|
||||
)
|
||||
@track_time("get_ml_stats", "admin_handlers")
|
||||
@track_errors("admin_handlers", "get_ml_stats")
|
||||
async def get_ml_stats(
|
||||
message: types.Message,
|
||||
state: FSMContext,
|
||||
**kwargs
|
||||
):
|
||||
"""Получение статистики ML-скоринга"""
|
||||
try:
|
||||
logger.info(f"Запрос ML статистики от пользователя: {message.from_user.full_name}")
|
||||
|
||||
bdf = get_global_instance()
|
||||
scoring_manager = bdf.get_scoring_manager()
|
||||
|
||||
if not scoring_manager:
|
||||
await message.answer("📊 ML Scoring отключен\n\nДля включения установите RAG_ENABLED=true или DEEPSEEK_ENABLED=true в .env")
|
||||
return
|
||||
|
||||
stats = scoring_manager.get_stats()
|
||||
|
||||
# Формируем текст статистики
|
||||
lines = ["📊 <b>ML Scoring Статистика</b>\n"]
|
||||
|
||||
# RAG статистика
|
||||
if "rag" in stats:
|
||||
rag = stats["rag"]
|
||||
lines.append("🤖 <b>RAG (ruBERT):</b>")
|
||||
lines.append(f" • Статус: {'✅ Включен' if rag.get('enabled') else '❌ Отключен'}")
|
||||
lines.append(f" • Модель: {rag.get('model_name', 'N/A')}")
|
||||
lines.append(f" • Модель загружена: {'✅' if rag.get('model_loaded') else '❌'}")
|
||||
|
||||
vs = rag.get("vector_store", {})
|
||||
lines.append(f" • Положительных примеров: {vs.get('positive_count', 0)}")
|
||||
lines.append(f" • Отрицательных примеров: {vs.get('negative_count', 0)}")
|
||||
lines.append(f" • Всего примеров: {vs.get('total_count', 0)}")
|
||||
lines.append(f" • Макс. примеров: {vs.get('max_examples', 'N/A')}")
|
||||
lines.append("")
|
||||
|
||||
# DeepSeek статистика
|
||||
if "deepseek" in stats:
|
||||
ds = stats["deepseek"]
|
||||
lines.append("🔮 <b>DeepSeek API:</b>")
|
||||
lines.append(f" • Статус: {'✅ Включен' if ds.get('enabled') else '❌ Отключен'}")
|
||||
lines.append(f" • Модель: {ds.get('model', 'N/A')}")
|
||||
lines.append(f" • Таймаут: {ds.get('timeout', 'N/A')}с")
|
||||
lines.append("")
|
||||
|
||||
# Если ничего не включено
|
||||
if "rag" not in stats and "deepseek" not in stats:
|
||||
lines.append("⚠️ Ни один сервис не настроен")
|
||||
|
||||
await message.answer("\n".join(lines), parse_mode="HTML")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка получения ML статистики: {e}")
|
||||
await message.answer(f"❌ Ошибка получения статистики: {str(e)}")
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# ХЕНДЛЕРЫ ПРОЦЕССА БАНА
|
||||
# ============================================================================
|
||||
|
||||
Reference in New Issue
Block a user