diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index 7ce17f57fc..5f5f1be8e4 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -336,9 +336,7 @@ else: except Exception: DATABASE_POOL_RECYCLE = 3600 -DATABASE_ENABLE_SQLITE_WAL = ( - os.environ.get("DATABASE_ENABLE_SQLITE_WAL", "False").lower() == "true" -) +DATABASE_ENABLE_SQLITE_WAL = (os.environ.get("DATABASE_ENABLE_SQLITE_WAL", "False").lower() == "true") DATABASE_DEDUPLICATE_INTERVAL = ( os.environ.get("DATABASE_DEDUPLICATE_INTERVAL", 0.) diff --git a/backend/open_webui/internal/db.py b/backend/open_webui/internal/db.py index ccc3995ded..b6913d87b0 100644 --- a/backend/open_webui/internal/db.py +++ b/backend/open_webui/internal/db.py @@ -115,6 +115,7 @@ elif "sqlite" in SQLALCHEMY_DATABASE_URL: engine = create_engine( SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} ) + def on_connect(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() if DATABASE_ENABLE_SQLITE_WAL: @@ -122,6 +123,7 @@ elif "sqlite" in SQLALCHEMY_DATABASE_URL: else: cursor.execute("PRAGMA journal_mode=DELETE") cursor.close() + event.listen(engine, "connect", on_connect) else: if isinstance(DATABASE_POOL_SIZE, int): diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index 8c4ae9d9a2..e7a007df38 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -500,6 +500,7 @@ def deduplicate(interval: float = 10.0): :param interval: Duration in seconds to wait before allowing the function to be called again. """ + def decorator(func): last_calls = {} lock = threading.Lock() @@ -514,6 +515,7 @@ def deduplicate(interval: float = 10.0): return None last_calls[key] = now return func(*args, **kwargs) + return wrapper return decorator