""" FILE: modules/web_api/llm/db/db_chat.py ROLE: Управление историей сообщений и очисткой эфемерного контекста. """ from typing import List, Dict, Any from .connection import get_db_connection def db_save_chat_message(session_id: str, role: str, content: str, is_ephemeral: int = 0) -> None: """Сохраняет сообщение в БД (is_ephemeral=1 для временных служебных шагов, 0 для постоянных).""" conn = get_db_connection() cursor = conn.cursor() cursor.execute(""" INSERT INTO chat_messages (session_id, role, content, is_ephemeral) VALUES (?, ?, ?, ?) """, (session_id, role, content, is_ephemeral)) conn.commit() conn.close() def db_get_chat_history(session_id: str, limit: int = 20) -> List[Dict[str, Any]]: """Получает последние сообщения истории диалога в хронологическом порядке.""" conn = get_db_connection() cursor = conn.cursor() cursor.execute(""" SELECT role, content FROM chat_messages WHERE session_id = ? ORDER BY id DESC LIMIT ? """, (session_id, limit)) rows = cursor.fetchall() conn.close() return [{"role": r["role"], "content": r["content"]} for r in reversed(rows)] def db_purge_ephemeral_messages(session_id: str) -> int: """ Физически удаляет все временные служебные сообщения выбранной сессии после завершения сценария работы с инструментом. """ conn = get_db_connection() cursor = conn.cursor() cursor.execute("DELETE FROM chat_messages WHERE session_id = ? AND is_ephemeral = 1", (session_id,)) deleted = cursor.rowcount conn.commit() conn.close() return deleted def db_clear_chat_history(session_id: str) -> None: """Полная очистка всех сообщений сессии.""" conn = get_db_connection() cursor = conn.cursor() cursor.execute("DELETE FROM chat_messages WHERE session_id = ?", (session_id,)) conn.commit() conn.close()