diff --git a/backend/open_webui/env.py b/backend/open_webui/env.py index 34a2df1203..aec11a8a3f 100644 --- a/backend/open_webui/env.py +++ b/backend/open_webui/env.py @@ -376,6 +376,11 @@ REDIS_CLUSTER = os.getenv('REDIS_CLUSTER', 'False').lower() == 'true' REDIS_KEY_PREFIX = os.getenv('REDIS_KEY_PREFIX', 'open-webui') +try: + REDIS_RESPONSE_STREAM_TTL = int(os.getenv('REDIS_RESPONSE_STREAM_TTL', '3600')) +except ValueError: + REDIS_RESPONSE_STREAM_TTL = 3600 + REDIS_SENTINEL_HOSTS = os.getenv('REDIS_SENTINEL_HOSTS', '') REDIS_SENTINEL_PORT = os.getenv('REDIS_SENTINEL_PORT', '26379') diff --git a/backend/open_webui/tasks.py b/backend/open_webui/tasks.py index 04bb6ce06f..ef15c57a18 100644 --- a/backend/open_webui/tasks.py +++ b/backend/open_webui/tasks.py @@ -6,7 +6,7 @@ from uuid import uuid4 from redis.asyncio import Redis -from open_webui.env import REDIS_KEY_PREFIX +from open_webui.env import REDIS_KEY_PREFIX, REDIS_RESPONSE_STREAM_TTL from open_webui.utils.json_codec import JSONCodec, dumps_bytes log = logging.getLogger(__name__) @@ -186,6 +186,9 @@ async def save_response_stream( if redis: await redis.hset(REDIS_RESPONSE_STREAMS_KEY, task_id, dumps_bytes(data)) + if REDIS_RESPONSE_STREAM_TTL > 0: + with suppress(Exception): + await redis.hexpire(REDIS_RESPONSE_STREAMS_KEY, REDIS_RESPONSE_STREAM_TTL, task_id) else: response_streams[task_id] = data