diff --git a/modules/web_api/llm/db/db_chat.py b/modules/web_api/llm/db/db_chat.py index 8835ab2..9caa95c 100644 --- a/modules/web_api/llm/db/db_chat.py +++ b/modules/web_api/llm/db/db_chat.py @@ -7,7 +7,7 @@ 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() + conn = get_db_connection(row_factory=True) cursor = conn.cursor() cursor.execute(""" INSERT INTO chat_messages (session_id, role, content, is_ephemeral) @@ -17,20 +17,19 @@ def db_save_chat_message(session_id: str, role: str, content: str, is_ephemeral: 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_get_chat_history(session_id: str, limit: int = 50) -> list: + """Возвращает историю сообщений диалога для сессии.""" + with get_db_connection(row_factory=True) as conn: + cursor = conn.cursor() + cursor.execute(""" + SELECT role, content, is_ephemeral, created_at + FROM chat_messages + WHERE session_id = ? + ORDER BY id DESC + LIMIT ? + """, (session_id, limit)) + rows = cursor.fetchall() + return [{"role": r["role"], "content": r["content"], "is_ephemeral": r["is_ephemeral"]} for r in reversed(rows)] def db_purge_ephemeral_messages(session_id: str) -> int: @@ -38,7 +37,7 @@ def db_purge_ephemeral_messages(session_id: str) -> int: Физически удаляет все временные служебные сообщения выбранной сессии после завершения сценария работы с инструментом. """ - conn = get_db_connection() + conn = get_db_connection(row_factory=True) cursor = conn.cursor() cursor.execute("DELETE FROM chat_messages WHERE session_id = ? AND is_ephemeral = 1", (session_id,)) deleted = cursor.rowcount @@ -49,7 +48,7 @@ def db_purge_ephemeral_messages(session_id: str) -> int: def db_clear_chat_history(session_id: str) -> None: """Полная очистка всех сообщений сессии.""" - conn = get_db_connection() + conn = get_db_connection(row_factory=True) cursor = conn.cursor() cursor.execute("DELETE FROM chat_messages WHERE session_id = ?", (session_id,)) conn.commit() @@ -57,7 +56,7 @@ def db_clear_chat_history(session_id: str) -> None: def db_clear_all_chat_context(session_id: str = None, purge_all: bool = False) -> int: """Удаляет сообщения чата и стейты сессий.""" - with get_db_connection() as conn: + with get_db_connection(row_factory=True) as conn: cursor = conn.cursor() if purge_all: if session_id: