Timothy Jaeryang Baek 1 月之前
父节点
当前提交
7f0c50f445
共有 3 个文件被更改,包括 15 次插入8 次删除
  1. 8 4
      backend/open_webui/env.py
  2. 3 3
      backend/open_webui/models/users.py
  3. 4 1
      backend/open_webui/utils/misc.py

+ 8 - 4
backend/open_webui/env.py

@@ -343,12 +343,16 @@ DATABASE_ENABLE_SQLITE_WAL = (
     os.environ.get("DATABASE_ENABLE_SQLITE_WAL", "False").lower() == "true"
     os.environ.get("DATABASE_ENABLE_SQLITE_WAL", "False").lower() == "true"
 )
 )
 
 
-DATABASE_DEDUPLICATE_INTERVAL = os.environ.get("DATABASE_DEDUPLICATE_INTERVAL", None)
-if DATABASE_DEDUPLICATE_INTERVAL is not None:
+DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL = os.environ.get(
+    "DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL", None
+)
+if DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL is not None:
     try:
     try:
-        DATABASE_DEDUPLICATE_INTERVAL = float(DATABASE_DEDUPLICATE_INTERVAL)
+        DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL = float(
+            DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL
+        )
     except Exception:
     except Exception:
-        DATABASE_DEDUPLICATE_INTERVAL = 0.0
+        DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL = 0.0
 
 
 RESET_CONFIG_ON_START = (
 RESET_CONFIG_ON_START = (
     os.environ.get("RESET_CONFIG_ON_START", "False").lower() == "true"
     os.environ.get("RESET_CONFIG_ON_START", "False").lower() == "true"

+ 3 - 3
backend/open_webui/models/users.py

@@ -4,10 +4,10 @@ from typing import Optional
 from open_webui.internal.db import Base, JSONField, get_db
 from open_webui.internal.db import Base, JSONField, get_db
 
 
 
 
-from open_webui.env import DATABASE_DEDUPLICATE_INTERVAL
+from open_webui.env import DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL
 from open_webui.models.chats import Chats
 from open_webui.models.chats import Chats
 from open_webui.models.groups import Groups
 from open_webui.models.groups import Groups
-from open_webui.utils.misc import deduplicate
+from open_webui.utils.misc import throttle
 
 
 
 
 from pydantic import BaseModel, ConfigDict
 from pydantic import BaseModel, ConfigDict
@@ -313,7 +313,7 @@ class UsersTable:
         except Exception:
         except Exception:
             return None
             return None
 
 
-    @deduplicate(DATABASE_DEDUPLICATE_INTERVAL)
+    @throttle(DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL)
     def update_user_last_active_by_id(self, id: str) -> Optional[UserModel]:
     def update_user_last_active_by_id(self, id: str) -> Optional[UserModel]:
         try:
         try:
             with get_db() as db:
             with get_db() as db:

+ 4 - 1
backend/open_webui/utils/misc.py

@@ -492,7 +492,7 @@ def freeze(value):
     return value
     return value
 
 
 
 
-def deduplicate(interval: float = 10.0):
+def throttle(interval: float = 10.0):
     """
     """
     Decorator to prevent a function from being called more than once within a specified duration.
     Decorator to prevent a function from being called more than once within a specified duration.
     If the function is called again within the duration, it returns None. To avoid returning
     If the function is called again within the duration, it returns None. To avoid returning
@@ -506,6 +506,9 @@ def deduplicate(interval: float = 10.0):
         lock = threading.Lock()
         lock = threading.Lock()
 
 
         def wrapper(*args, **kwargs):
         def wrapper(*args, **kwargs):
+            if interval is None:
+                return func(*args, **kwargs)
+
             key = (args, freeze(kwargs))
             key = (args, freeze(kwargs))
             now = time.time()
             now = time.time()
             if now - last_calls.get(key, 0) < interval:
             if now - last_calls.get(key, 0) < interval: