feat(db/llm/ui): настроена работа кнопок подтверждающих изменения внеcенные инструментом и финальные для выхода из инструмента и очистки сессии.
This commit is contained in:
+31
-1
@@ -18,6 +18,31 @@ from core.database import (
|
||||
|
||||
DB_PATH = os.path.join(DATA_DIR, "scud_orion_ai.db")
|
||||
|
||||
def print_tool_actions():
|
||||
"""Выводит реестр декларативных действий инструментов и шаблоны кнопок."""
|
||||
print("\n" + "=" * 110)
|
||||
print("🧰 ДЕКЛАРАТИВНЫЙ РЕЕСТР ДЕЙСТВИЙ ИНСТРУМЕНТОВ (tool_action_registry):")
|
||||
print("=" * 110)
|
||||
with get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""
|
||||
SELECT id, tool_name, category, bypass_llm, success_template, follow_up_question, buttons_json
|
||||
FROM tool_action_registry
|
||||
WHERE is_active = 1
|
||||
ORDER BY id ASC
|
||||
""")
|
||||
rows = cursor.fetchall()
|
||||
if not rows:
|
||||
print("Таблица tool_action_registry пуста.")
|
||||
else:
|
||||
for r in rows:
|
||||
print(f"ID: {r[0]} | Tool: [{r[1]}] | Категория: {r[2]} | Bypass LLM: {'ДА (0.05с)' if r[3] else 'НЕТ'}")
|
||||
print(f" • Сообщение: {r[4]}")
|
||||
if r[5]:
|
||||
print(f" • Вопрос: {r[5]}")
|
||||
print(f" • Кнопки: {r[6]}")
|
||||
print("-" * 110)
|
||||
print("=" * 110 + "\n")
|
||||
|
||||
def print_stats():
|
||||
"""Выводит общую статистику по записям в таблицах БД."""
|
||||
@@ -255,6 +280,7 @@ def print_session_states():
|
||||
print("=" * 80 + "\n")
|
||||
|
||||
|
||||
Python
|
||||
HELP_TEXT = """
|
||||
CLI-утилита инспекции и управления SQLite базой данных СКУД (scud_orion_ai.db)
|
||||
|
||||
@@ -266,6 +292,7 @@ CLI-утилита инспекции и управления SQLite базой
|
||||
anomalies -- Посмотреть историю найденных аномалий СКУД ⟷ 1С
|
||||
rules -- Посмотреть правила Базы Знаний ИИ из SQLite
|
||||
prompts -- Посмотреть системные промпты (system_prompts)
|
||||
tools -- Посмотреть реестр действий инструментов и кнопок (tool_action_registry)
|
||||
sessions -- Посмотреть активные сессии и превью (session_states)
|
||||
dump [output.xlsx] -- Полный дамп всех таблиц БД в многостраничный Excel
|
||||
snapshot del [ID] или [--day ДД.ММ.ГГГГ] -- Удаление снапшота по ID или всех за выбранный день
|
||||
@@ -277,6 +304,7 @@ CLI-утилита инспекции и управления SQLite базой
|
||||
python scripts/db_cli.py scud --snapshot Y20260805-007
|
||||
python scripts/db_cli.py absences 07.08.2026
|
||||
python scripts/db_cli.py prompts
|
||||
python scripts/db_cli.py tools
|
||||
python scripts/db_cli.py sessions
|
||||
python scripts/db_cli.py snapshot del Y20260805-007
|
||||
python scripts/db_cli.py snapshot del --day 04.08.2026
|
||||
@@ -294,7 +322,7 @@ def main():
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
add_help=False
|
||||
)
|
||||
parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'absences', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot'], help="Основная команда")
|
||||
parser.add_argument('command', nargs='?', default=None, choices=['stats', 'snapshots', 'scud', 'absences', 'anomalies', 'rules', 'prompts', 'sessions', 'dump', 'snapshot', 'tools'], help="Основная команда")
|
||||
parser.add_argument('action', nargs='?', default=None, help="Дополнительное действие (например, 'del')")
|
||||
parser.add_argument('param', nargs='?', default=None, help="Параметр (дата, ID снапшота или имя файла)")
|
||||
parser.add_argument('--snapshot', type=str, default=None, help="ID конкретного снапшота для инспекции")
|
||||
@@ -325,6 +353,8 @@ def main():
|
||||
print_system_prompts()
|
||||
elif args.command == 'sessions':
|
||||
print_session_states()
|
||||
elif args.command == 'tools':
|
||||
print_tool_actions()
|
||||
elif args.command == 'dump':
|
||||
filename = args.param if args.param else "db_dump_full.xlsx"
|
||||
dump_all_to_excel(filename)
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
"""
|
||||
Скрипт инициализации таблицы tool_action_registry в SQLite БД.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import sqlite3
|
||||
|
||||
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
DB_PATH = os.path.join(BASE_DIR, "data", "scud_orion_ai.db")
|
||||
|
||||
def init_tool_action_registry():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 1. Создаем таблицу
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS tool_action_registry (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
tool_name TEXT UNIQUE NOT NULL,
|
||||
category TEXT DEFAULT 'general',
|
||||
bypass_llm INTEGER DEFAULT 1,
|
||||
success_template TEXT NOT NULL,
|
||||
follow_up_question TEXT,
|
||||
action_type TEXT DEFAULT 'BUTTONS',
|
||||
buttons_json TEXT,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
|
||||
# 2. Начальное наполнение базовыми сценариями
|
||||
seed_tools = [
|
||||
(
|
||||
"db_confirm_prompt_preview",
|
||||
"prompt",
|
||||
1,
|
||||
"✅ Системный промпт успешно сохранен и применен в базе данных.",
|
||||
"Желаете продолжить работу с системным промптом?",
|
||||
"FOLLOW_UP_ACTION",
|
||||
json.dumps([
|
||||
{"label": "Показать промпт", "value": "покажи системный промпт"},
|
||||
{"label": "Готово", "value": "нет, спасибо"}
|
||||
], ensure_ascii=False)
|
||||
),
|
||||
(
|
||||
"db_cancel_prompt_preview",
|
||||
"prompt",
|
||||
1,
|
||||
"❌ Изменения системного промпта отменены.",
|
||||
"Желаете продолжить работу с системным промптом?",
|
||||
"FOLLOW_UP_ACTION",
|
||||
json.dumps([
|
||||
{"label": "Показать промпт", "value": "покажи системный промпт"},
|
||||
{"label": "Готово", "value": "нет, спасибо"}
|
||||
], ensure_ascii=False)
|
||||
),
|
||||
(
|
||||
"db_delete_task",
|
||||
"tasks",
|
||||
1,
|
||||
"🗑 Задача успешно удалена из вашего реестра.",
|
||||
"Хотите посмотреть обновленный список задач?",
|
||||
"FOLLOW_UP_ACTION",
|
||||
json.dumps([
|
||||
{"label": "Показать задачи", "value": "покажи список задач"},
|
||||
{"label": "Готово", "value": "нет"}
|
||||
], ensure_ascii=False)
|
||||
),
|
||||
(
|
||||
"db_delete_snapshots",
|
||||
"snapshots",
|
||||
1,
|
||||
"🗑 Выбранные снапшоты успешно удалены из базы данных.",
|
||||
"Вывести актуальный список снапшотов?",
|
||||
"FOLLOW_UP_ACTION",
|
||||
json.dumps([
|
||||
{"label": "Показать снапшоты", "value": "покажи список снапшотов"},
|
||||
{"label": "Готово", "value": "нет"}
|
||||
], ensure_ascii=False)
|
||||
)
|
||||
]
|
||||
|
||||
for item in seed_tools:
|
||||
cursor.execute("""
|
||||
INSERT INTO tool_action_registry (
|
||||
tool_name, category, bypass_llm, success_template, follow_up_question, action_type, buttons_json
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
ON CONFLICT(tool_name) DO UPDATE SET
|
||||
category = excluded.category,
|
||||
bypass_llm = excluded.bypass_llm,
|
||||
success_template = excluded.success_template,
|
||||
follow_up_question = excluded.follow_up_question,
|
||||
action_type = excluded.action_type,
|
||||
buttons_json = excluded.buttons_json,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
""", item)
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print("[✓] Таблица tool_action_registry успешно создана и наполнена!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_tool_action_registry()
|
||||
Reference in New Issue
Block a user