From 68e257849df1ac1408ac91e49f688c510e18d982 Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:44:50 +0100 Subject: [PATCH] perf: optimize database queries in functions, feedbacks, and groups (#21019) --- backend/open_webui/models/feedbacks.py | 16 ++++------------ backend/open_webui/models/functions.py | 7 ++++--- backend/open_webui/models/groups.py | 9 ++++----- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/backend/open_webui/models/feedbacks.py b/backend/open_webui/models/feedbacks.py index 048c10f85..2a4d752f5 100644 --- a/backend/open_webui/models/feedbacks.py +++ b/backend/open_webui/models/feedbacks.py @@ -460,23 +460,15 @@ class FeedbackTable: self, user_id: str, db: Optional[Session] = None ) -> bool: with get_db_context(db) as db: - feedbacks = db.query(Feedback).filter_by(user_id=user_id).all() - if not feedbacks: - return False - for feedback in feedbacks: - db.delete(feedback) + result = db.query(Feedback).filter_by(user_id=user_id).delete() db.commit() - return True + return result > 0 def delete_all_feedbacks(self, db: Optional[Session] = None) -> bool: with get_db_context(db) as db: - feedbacks = db.query(Feedback).all() - if not feedbacks: - return False - for feedback in feedbacks: - db.delete(feedback) + result = db.query(Feedback).delete() db.commit() - return True + return result > 0 Feedbacks = FeedbackTable() diff --git a/backend/open_webui/models/functions.py b/backend/open_webui/models/functions.py index 8e23bac09..6d94a90c8 100644 --- a/backend/open_webui/models/functions.py +++ b/backend/open_webui/models/functions.py @@ -299,7 +299,7 @@ class FunctionsTable: function.updated_at = int(time.time()) db.commit() db.refresh(function) - return self.get_function_by_id(id, db=db) + return FunctionModel.model_validate(function) except Exception: return None @@ -319,7 +319,7 @@ class FunctionsTable: function.updated_at = int(time.time()) db.commit() db.refresh(function) - return self.get_function_by_id(id, db=db) + return FunctionModel.model_validate(function) else: return None except Exception as e: @@ -381,7 +381,8 @@ class FunctionsTable: } ) db.commit() - return self.get_function_by_id(id, db=db) + function = db.get(Function, id) + return FunctionModel.model_validate(function) if function else None except Exception: return None diff --git a/backend/open_webui/models/groups.py b/backend/open_webui/models/groups.py index 31b34c45c..eab817534 100644 --- a/backend/open_webui/models/groups.py +++ b/backend/open_webui/models/groups.py @@ -589,11 +589,10 @@ class GroupTable: if not user_ids: return GroupModel.model_validate(group) - # Remove each user from group_member - for user_id in user_ids: - db.query(GroupMember).filter( - GroupMember.group_id == id, GroupMember.user_id == user_id - ).delete() + # Remove users from group_member in batch + db.query(GroupMember).filter( + GroupMember.group_id == id, GroupMember.user_id.in_(user_ids) + ).delete(synchronize_session=False) # Update group timestamp group.updated_at = int(time.time())