feat(admin): integrate NotebookLM legal assistant for ЖК РФ
This commit is contained in:
parent
6a8bcca35b
commit
2b54649f4e
2 changed files with 86 additions and 0 deletions
|
|
@ -38,6 +38,9 @@ class BroadcastState(StatesGroup):
|
|||
class SwarmTaskState(StatesGroup):
|
||||
waiting_for_task = State()
|
||||
|
||||
class JuristState(StatesGroup):
|
||||
waiting_for_question = State()
|
||||
|
||||
# =============================================================================
|
||||
# SWARM COMMAND CENTER
|
||||
# =============================================================================
|
||||
|
|
@ -55,6 +58,87 @@ async def process_swarm_task(message: Message, state: FSMContext):
|
|||
# ... (код остается прежним)
|
||||
pass
|
||||
|
||||
# =============================================================================
|
||||
# ЮРИДИЧЕСКИЙ ПОМОЩНИК (NotebookLM)
|
||||
# =============================================================================
|
||||
|
||||
@router.message(Command('jurist'))
|
||||
@router.message(F.text == '⚖️ Юрист (ЖК РФ)')
|
||||
@admin_only
|
||||
async def cmd_jurist(message: Message, state: FSMContext):
|
||||
"""Активация юридического помощника"""
|
||||
await message.answer(
|
||||
"⚖️ <b>ЮРИДИЧЕСКИЙ ПОМОЩНИК (ЖК РФ)</b>\n\n"
|
||||
"Напишите ваш вопрос для анализа на основе судебных дел и ЖК РФ.\n\n"
|
||||
"<i>Я проанализирую ваш запрос через NotebookLM.</i>",
|
||||
parse_mode='HTML'
|
||||
)
|
||||
await state.set_state(JuristState.waiting_for_question)
|
||||
|
||||
@router.callback_query(F.data == 'admin_jurist')
|
||||
@admin_callback_only
|
||||
async def cb_admin_jurist(callback: CallbackQuery, state: FSMContext):
|
||||
"""Callback-активация юридического помощника"""
|
||||
await callback.answer()
|
||||
await callback.message.answer(
|
||||
"⚖️ <b>ЮРИДИЧЕСКИЙ ПОМОЩНИК (ЖК РФ)</b>\n\n"
|
||||
"Напишите ваш вопрос для анализа на основе судебных дел и ЖК РФ.\n\n"
|
||||
"<i>Я проанализирую ваш запрос через NotebookLM.</i>",
|
||||
parse_mode='HTML'
|
||||
)
|
||||
await state.set_state(JuristState.waiting_for_question)
|
||||
|
||||
@router.message(JuristState.waiting_for_question)
|
||||
@admin_only
|
||||
async def process_jurist_question(message: Message, state: FSMContext):
|
||||
"""Обработка вопроса к юристу через NotebookLM"""
|
||||
status_msg = await message.answer(
|
||||
"⏳ <i>Отправляю запрос в NotebookLM, анализирую судебные материалы и законы (это займет около 10-15 секунд)...</i>",
|
||||
parse_mode='HTML'
|
||||
)
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
cmd = [
|
||||
"/home/matrixhasyou/.local/bin/nlm", "query", "notebook",
|
||||
"00ed7d92-1ab2-4159-ac72-1d0c4be21377",
|
||||
message.text
|
||||
]
|
||||
env = os.environ.copy()
|
||||
|
||||
try:
|
||||
proc = await asyncio.create_subprocess_exec(
|
||||
*cmd,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
env=env
|
||||
)
|
||||
stdout, stderr = await proc.communicate()
|
||||
|
||||
output = stdout.decode('utf-8').strip()
|
||||
error = stderr.decode('utf-8').strip()
|
||||
|
||||
# Убираем предупреждения о новой версии из вывода nlm
|
||||
if "Update available:" in output:
|
||||
output = output.split("Update available:")[0].strip()
|
||||
|
||||
if proc.returncode == 0:
|
||||
if len(output) > 4000:
|
||||
parts = [output[i:i+4000] for i in range(0, len(output), 4000)]
|
||||
await status_msg.edit_text(f"⚖️ <b>Анализ NotebookLM (часть 1):</b>\n\n{parts[0]}", parse_mode='HTML')
|
||||
for part in parts[1:]:
|
||||
await message.answer(part, parse_mode='HTML')
|
||||
else:
|
||||
await status_msg.edit_text(f"⚖️ <b>Анализ NotebookLM:</b>\n\n{output}", parse_mode='HTML')
|
||||
else:
|
||||
await status_msg.edit_text(f"❌ <b>Ошибка запроса к NotebookLM:</b>\n{error or output}")
|
||||
except Exception as e:
|
||||
await status_msg.edit_text(f"❌ <b>Внутренняя ошибка бота:</b> {str(e)}")
|
||||
finally:
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router.message(F.text & ~F.text.startswith('/') & F.chat.type == 'private')
|
||||
@admin_only
|
||||
async def neural_proxy_handler(message: Message):
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ def get_admin_main_menu() -> InlineKeyboardMarkup:
|
|||
)
|
||||
builder.row(
|
||||
InlineKeyboardButton(text='⚡ Автоверификация', callback_data='admin_auto_verify'),
|
||||
InlineKeyboardButton(text='⚖️ Юрист (ЖК РФ)', callback_data='admin_jurist'),
|
||||
)
|
||||
builder.row(
|
||||
InlineKeyboardButton(text='❓ Помощь', callback_data='admin_help'),
|
||||
|
|
@ -75,6 +76,7 @@ def get_admin_reply_menu() -> ReplyKeyboardMarkup:
|
|||
)
|
||||
builder.row(
|
||||
KeyboardButton(text='📤 Рассылка'),
|
||||
KeyboardButton(text='⚖️ Юрист (ЖК РФ)'),
|
||||
)
|
||||
builder.row(
|
||||
KeyboardButton(text='🚫 Отозвать вериф.'),
|
||||
|
|
|
|||
Loading…
Reference in a new issue