Timothy Jaeryang Baek hai 1 mes
pai
achega
7f0c50f445

+ 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"
 )
 
-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:
-        DATABASE_DEDUPLICATE_INTERVAL = float(DATABASE_DEDUPLICATE_INTERVAL)
+        DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL = float(
+            DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL
+        )
     except Exception:
-        DATABASE_DEDUPLICATE_INTERVAL = 0.0
+        DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL = 0.0
 
 RESET_CONFIG_ON_START = (
     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.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.groups import Groups
-from open_webui.utils.misc import deduplicate
+from open_webui.utils.misc import throttle
 
 
 from pydantic import BaseModel, ConfigDict
@@ -313,7 +313,7 @@ class UsersTable:
         except Exception:
             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]:
         try:
             with get_db() as db:

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

@@ -492,7 +492,7 @@ def freeze(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.
     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()
 
         def wrapper(*args, **kwargs):
+            if interval is None:
+                return func(*args, **kwargs)
+
             key = (args, freeze(kwargs))
             now = time.time()
             if now - last_calls.get(key, 0) < interval: