From 7042318c3459f6c51b2015a0c43bb26324b0a644 Mon Sep 17 00:00:00 2001 From: Sihyeon Jang Date: Sat, 20 Sep 2025 06:37:10 +0900 Subject: [PATCH] fix: prevent memory leaks in file handling and HTTP connections - Fix file handle memory leak in download_file_stream by properly closing and reopening files - Add requests.Session context manager for proper HTTP connection cleanup - Remove unnecessary file.seek(0) after file reopening - Add timeout to prevent hanging connections This prevents memory accumulation during large file downloads and ensures proper resource cleanup in all scenarios. Signed-off-by: Sihyeon Jang --- backend/open_webui/routers/ollama.py | 34 +++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/backend/open_webui/routers/ollama.py b/backend/open_webui/routers/ollama.py index 8dadf3523a..bf11ffa0dd 100644 --- a/backend/open_webui/routers/ollama.py +++ b/backend/open_webui/routers/ollama.py @@ -1694,25 +1694,27 @@ async def download_file_stream( yield f'data: {{"progress": {progress}, "completed": {current_size}, "total": {total_size}}}\n\n' if done: - file.seek(0) - chunk_size = 1024 * 1024 * 2 - hashed = calculate_sha256(file, chunk_size) - file.seek(0) + file.close() - url = f"{ollama_url}/api/blobs/sha256:{hashed}" - response = requests.post(url, data=file) + with open(file_path, "rb") as file: + chunk_size = 1024 * 1024 * 2 + hashed = calculate_sha256(file, chunk_size) - if response.ok: - res = { - "done": done, - "blob": f"sha256:{hashed}", - "name": file_name, - } - os.remove(file_path) + url = f"{ollama_url}/api/blobs/sha256:{hashed}" + with requests.Session() as session: + response = session.post(url, data=file, timeout=30) - yield f"data: {json.dumps(res)}\n\n" - else: - raise "Ollama: Could not create blob, Please try again." + if response.ok: + res = { + "done": done, + "blob": f"sha256:{hashed}", + "name": file_name, + } + os.remove(file_path) + + yield f"data: {json.dumps(res)}\n\n" + else: + raise "Ollama: Could not create blob, Please try again." # url = "https://huggingface.co/TheBloke/stablelm-zephyr-3b-GGUF/resolve/main/stablelm-zephyr-3b.Q2_K.gguf"