72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Экспертные команды: !summary (суммаризация документа) и !metrics (извлечение KPI).
|
||
Используют RAGClient с intent_override.
|
||
"""
|
||
|
||
import logging
|
||
from core.commands.base import Command
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class SummaryCommand(Command):
|
||
name = "!summary"
|
||
aliases = ["/summary"]
|
||
|
||
async def execute(self, msg, args: str, user_jid: str, room_jid: str = None):
|
||
"""
|
||
Суммаризация последнего загруженного документа.
|
||
Отправляет запрос на RAG-сервер с intent_override = 'SUMMARY'.
|
||
"""
|
||
try:
|
||
result = await self.bot.rag_client.query(
|
||
query=args.strip() or "Сделай суммаризацию последнего документа",
|
||
user_jid=user_jid,
|
||
room_jid=room_jid,
|
||
prompts=self.bot.prompts,
|
||
intent_override="SUMMARY",
|
||
last_file_path=None,
|
||
last_file_text=self.bot.last_file_texts.get(user_jid)
|
||
)
|
||
answer = result.get('answer', '⚠️ Не удалось получить суммаризацию.')
|
||
reply = msg.reply(answer)
|
||
except Exception as e:
|
||
logger.exception(f"Ошибка в !summary: {e}")
|
||
reply = msg.reply(f"❌ Ошибка: {e}")
|
||
if reply:
|
||
reply.send()
|
||
|
||
def get_help(self) -> str:
|
||
return "Суммаризация последнего документа. Использование: `!summary`"
|
||
|
||
|
||
class MetricsCommand(Command):
|
||
name = "!metrics"
|
||
aliases = ["/metrics"]
|
||
|
||
async def execute(self, msg, args: str, user_jid: str, room_jid: str = None):
|
||
"""
|
||
Извлечение метрик (KPI) из базы знаний.
|
||
Отправляет запрос на RAG-сервер с intent_override = 'METRICS'.
|
||
"""
|
||
try:
|
||
result = await self.bot.rag_client.query(
|
||
query="Извлеки все KPI из документов",
|
||
user_jid=user_jid,
|
||
room_jid=room_jid,
|
||
prompts=self.bot.prompts,
|
||
intent_override="METRICS",
|
||
last_file_path=None,
|
||
last_file_text=None
|
||
)
|
||
answer = result.get('answer', '⚠️ Не удалось извлечь метрики.')
|
||
reply = msg.reply(answer)
|
||
except Exception as e:
|
||
logger.exception(f"Ошибка в !metrics: {e}")
|
||
reply = msg.reply(f"❌ Ошибка: {e}")
|
||
if reply:
|
||
reply.send()
|
||
|
||
def get_help(self) -> str:
|
||
return "Извлечение KPI из базы знаний. Использование: `!metrics`" |