From 0f3f68b0c43367ccd10f29db34bcbe30696023ee Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Fri, 13 Feb 2026 21:56:53 +0100 Subject: [PATCH] enh (#21362) --- backend/open_webui/models/chats.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/models/chats.py b/backend/open_webui/models/chats.py index 6040050fc3..ccd01a1945 100644 --- a/backend/open_webui/models/chats.py +++ b/backend/open_webui/models/chats.py @@ -8,7 +8,7 @@ from sqlalchemy.orm import Session from open_webui.internal.db import Base, JSONField, get_db, get_db_context from open_webui.models.tags import TagModel, Tag, Tags from open_webui.models.folders import Folders -from open_webui.models.chat_messages import ChatMessages +from open_webui.models.chat_messages import ChatMessage, ChatMessages from open_webui.utils.misc import sanitize_data_for_db, sanitize_text_for_db from pydantic import BaseModel, ConfigDict @@ -621,6 +621,9 @@ class ChatTable: ) -> bool: try: with get_db_context(db) as db: + # Use subquery to delete chat_messages for shared chats + shared_chat_subq = db.query(Chat.id).filter_by(user_id=f"shared-{chat_id}").subquery() + db.query(ChatMessage).filter(ChatMessage.chat_id.in_(shared_chat_subq)).delete(synchronize_session=False) db.query(Chat).filter_by(user_id=f"shared-{chat_id}").delete() db.commit() @@ -1410,6 +1413,7 @@ class ChatTable: def delete_chat_by_id(self, id: str, db: Optional[Session] = None) -> bool: try: with get_db_context(db) as db: + db.query(ChatMessage).filter_by(chat_id=id).delete() db.query(Chat).filter_by(id=id).delete() db.commit() @@ -1422,6 +1426,7 @@ class ChatTable: ) -> bool: try: with get_db_context(db) as db: + db.query(ChatMessage).filter_by(chat_id=id).delete() db.query(Chat).filter_by(id=id, user_id=user_id).delete() db.commit() @@ -1436,6 +1441,8 @@ class ChatTable: with get_db_context(db) as db: self.delete_shared_chats_by_user_id(user_id, db=db) + chat_id_subq = db.query(Chat.id).filter_by(user_id=user_id).subquery() + db.query(ChatMessage).filter(ChatMessage.chat_id.in_(chat_id_subq)).delete(synchronize_session=False) db.query(Chat).filter_by(user_id=user_id).delete() db.commit() @@ -1448,6 +1455,8 @@ class ChatTable: ) -> bool: try: with get_db_context(db) as db: + chat_id_subq = db.query(Chat.id).filter_by(user_id=user_id, folder_id=folder_id).subquery() + db.query(ChatMessage).filter(ChatMessage.chat_id.in_(chat_id_subq)).delete(synchronize_session=False) db.query(Chat).filter_by(user_id=user_id, folder_id=folder_id).delete() db.commit() @@ -1481,6 +1490,9 @@ class ChatTable: chats_by_user = db.query(Chat).filter_by(user_id=user_id).all() shared_chat_ids = [f"shared-{chat.id}" for chat in chats_by_user] + # Use subquery to delete chat_messages for shared chats + shared_id_subq = db.query(Chat.id).filter(Chat.user_id.in_(shared_chat_ids)).subquery() + db.query(ChatMessage).filter(ChatMessage.chat_id.in_(shared_id_subq)).delete(synchronize_session=False) db.query(Chat).filter(Chat.user_id.in_(shared_chat_ids)).delete() db.commit()