Files
scud_context_api/llm/db_tools.py
T

130 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sqlite3
from typing import List, Dict, Any
DB_NAME = "/home/puh/scud_orion_ai_v2/data/scud_orion_ai.db"
def db_get_active_system_prompt() -> str:
try:
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("SELECT prompt_text FROM system_prompts WHERE name = 'main_agent' AND is_active = 1 LIMIT 1")
row = cursor.fetchone()
conn.close()
if row and row[0]:
return row[0].replace("**", "")
except Exception as e:
print(f"Ошибка чтения системного промпта из БД: {e}")
return "Ты — интеллектуальный ИИ-ассистент и архитектурный координатор проекта SCUD Orion AI."
def db_add_system_prompt(name: str = "main_agent", prompt_text: str = "") -> dict:
clean_text = prompt_text.replace("**", "")
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("""
INSERT INTO system_prompts (name, prompt_text, is_active)
VALUES (?, ?, 1)
ON CONFLICT(name) DO UPDATE SET prompt_text=excluded.prompt_text, updated_at=CURRENT_TIMESTAMP
""", (name, clean_text))
conn.commit()
conn.close()
return {"status": "success", "message": f"Системный промпт '{name}' успешно обновлен в базе!"}
def db_get_tasks(status: str = None) -> list:
conn = sqlite3.connect(DB_NAME)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
if status:
cursor.execute("SELECT * FROM tasks WHERE status = ? ORDER BY task_id ASC", (status.upper(),))
else:
cursor.execute("SELECT * FROM tasks ORDER BY task_id ASC")
rows = [dict(r) for r in cursor.fetchall()]
conn.close()
return rows
def db_update_task_status(task_id: str, status: str = None, due_date: str = None) -> dict:
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
updates = []
params = []
if status:
status_upper = status.upper()
updates.append("status = ?")
params.append(status_upper)
if status_upper == "COMPLETED":
updates.append("completed_at = CURRENT_TIMESTAMP")
else:
updates.append("completed_at = NULL")
if due_date:
updates.append("due_date = ?")
params.append(due_date)
if not updates:
conn.close()
return {"error": "Не указаны параметры для обновления"}
params.append(task_id.upper())
query = f"UPDATE tasks SET {', '.join(updates)} WHERE task_id = ?"
cursor.execute(query, tuple(params))
if cursor.rowcount == 0:
conn.close()
return {"error": f"Задача {task_id} не найдена"}
conn.commit()
conn.close()
return {"status": "success", "message": f"Задача {task_id} обновлена"}
def db_delete_task(task_id: str) -> dict:
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("DELETE FROM tasks WHERE task_id = ?", (task_id.upper(),))
deleted_count = cursor.rowcount
conn.commit()
conn.close()
if deleted_count == 0:
return {"error": f"Задача {task_id} не найдена"}
return {"status": "success", "message": f"Задача {task_id} удалена"}
def db_add_task(module: str = "general", title: str = "", priority: str = "MEDIUM", due_date: str = None, task_id: str = None) -> dict:
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
if not task_id:
cursor.execute("SELECT task_id FROM tasks WHERE task_id LIKE 'TASK-%'")
rows = cursor.fetchall()
max_num = 0
for r in rows:
try:
num = int(r[0].replace("TASK-", ""))
if num > max_num:
max_num = num
except ValueError:
pass
task_id = f"TASK-{max_num + 1:02d}"
try:
cursor.execute(
"INSERT INTO tasks (task_id, module, title, status, priority, due_date) VALUES (?, ?, ?, 'BACKLOG', ?, ?)",
(task_id.upper(), module, title, priority.upper(), due_date)
)
conn.commit()
res = {"status": "success", "message": f"Задача {task_id} создана", "task_id": task_id}
except sqlite3.IntegrityError:
res = {"error": f"Задача с ID {task_id} уже существует"}
finally:
conn.close()
return res
def db_get_rules() -> list:
conn = sqlite3.connect(DB_NAME)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT id, rule_text, added_by FROM ai_knowledge_base ORDER BY id")
rows = [dict(r) for r in cursor.fetchall()]
conn.close()
return rows