From 86f223a21ed5ffe93e80531ddf2b07edaaa41888 Mon Sep 17 00:00:00 2001 From: manoraga Date: Fri, 11 Sep 2026 15:55:47 +0300 Subject: [PATCH] =?UTF-8?q?fix(db=5Fchat):=20=D0=B2=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20row=5Ffactory=3DTrue=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=BD=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/web_api/llm/db/db_chat.py | 35 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 18 deletions(-) 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: