From f6bd08c852f65683d6357a935993f6ce5d3e4c37 Mon Sep 17 00:00:00 2001 From: tcx4c70 Date: Fri, 24 Apr 2026 13:39:45 +0800 Subject: [PATCH] fix(utils): Switch throttle decorator to async (#23979) After migration to async db operations, the throttle decorator also needs to support async. Since the decorator is only used for async funcs now, we can just switch it to async instead of supporting sync and async at the same time. Signed-off-by: Adam Tao --- backend/open_webui/utils/misc.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index 670a94b51..5af84dd5c 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -843,9 +843,9 @@ def throttle(interval: float = 10.0): last_calls = {} lock = threading.Lock() - def wrapper(*args, **kwargs): + async def wrapper(*args, **kwargs): if interval is None: - return func(*args, **kwargs) + return await func(*args, **kwargs) key = (args, freeze(kwargs)) now = time.time() @@ -855,7 +855,7 @@ def throttle(interval: float = 10.0): if now - last_calls.get(key, 0) < interval: return None last_calls[key] = now - return func(*args, **kwargs) + return await func(*args, **kwargs) return wrapper