diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index 786725d1c5..6b1c9e461e 100644 --- a/backend/open_webui/env.py +++ b/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" diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 47cd7b0eb0..31a5938bfe 100644 --- a/backend/open_webui/models/users.py +++ b/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: diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index e7a007df38..82729c34e0 100644 --- a/backend/open_webui/utils/misc.py +++ b/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: