Browse Source

Merge pull request #17162 from sihyeonn/perf/sh-tools

perf: fix N+1 query issue in get_tools method
Tim Jaeryang Baek 1 tháng trước cách đây
mục cha
commit
330bec67b7
1 tập tin đã thay đổi với 9 bổ sung2 xóa
  1. 9 2
      backend/open_webui/models/tools.py

+ 9 - 2
backend/open_webui/models/tools.py

@@ -144,9 +144,16 @@ class ToolsTable:
 
     def get_tools(self) -> list[ToolUserModel]:
         with get_db() as db:
+            all_tools = db.query(Tool).order_by(Tool.updated_at.desc()).all()
+
+            user_ids = list(set(tool.user_id for tool in all_tools))
+
+            users = Users.get_users_by_user_ids(user_ids) if user_ids else []
+            users_dict = {user.id: user for user in users}
+
             tools = []
-            for tool in db.query(Tool).order_by(Tool.updated_at.desc()).all():
-                user = Users.get_user_by_id(tool.user_id)
+            for tool in all_tools:
+                user = users_dict.get(tool.user_id)
                 tools.append(
                     ToolUserModel.model_validate(
                         {