diff --git a/CHANGELOG.md b/CHANGELOG.md index 4761a997f6..4f7619c7c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.25] - 2025-08-22 + +### Fixed + +- 🖼️ **Image Generation Reliability Restored**: Fixed a key issue causing image generation failures. +- 🏆 **Reranking Functionality Restored**: Resolved errors with rerank feature. + +## [0.6.24] - 2025-08-21 + +### Added + +- ♿ **High Contrast Mode in Chat Messages**: Implemented enhanced High Contrast Mode support for chat messages, making text and important details easier to read and improving accessibility for users with visual preferences or requirements. +- 🌎 **Localization & Internationalization Improvements**: Enhanced and expanded translations for a more natural and professional user experience for speakers of these languages across the entire interface. + +### Fixed + +- 🖼️ **ComfyUI Image Generation Restored**: Fixed a critical bug where ComfyUI-based image generation was not functioning, ensuring users can once again effortlessly create and interact with AI-generated visuals in their workflows. +- 🛠️ **Tool Server Loading and Visibility Restored**: Resolved an issue where connected tool servers were not loading or visible, restoring seamless integration and uninterrupted access to all external and custom tools directly within the platform. +- 🛡️ **Redis User Session Reliability**: Fixed a problem affecting the saving of user sessions in Redis, ensuring reliable login sessions, stable authentication, and secure multi-user environments. + ## [0.6.23] - 2025-08-21 ### Added diff --git a/backend/open_webui/retrieval/utils.py b/backend/open_webui/retrieval/utils.py index aeaa741c94..862972187d 100644 --- a/backend/open_webui/retrieval/utils.py +++ b/backend/open_webui/retrieval/utils.py @@ -966,7 +966,7 @@ class RerankCompressor(BaseDocumentCompressor): ) scores = util.cos_sim(query_embedding, document_embedding)[0] - if scores: + if scores is not None: docs_with_scores = list( zip( documents, diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index 67b3de193e..3b46d0bd8a 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -144,6 +144,17 @@ def upload_file( metadata: Optional[dict | str] = Form(None), process: bool = Query(True), user=Depends(get_verified_user), +): + return upload_file_handler(request, file, metadata, process, user, background_tasks) + + +def upload_file_handler( + request: Request, + file: UploadFile = File(...), + metadata: Optional[dict | str] = Form(None), + process: bool = Query(True), + user=Depends(get_verified_user), + background_tasks: Optional[BackgroundTasks] = None, ): log.info(f"file.content_type: {file.content_type}") @@ -214,16 +225,27 @@ def upload_file( ) if process: - background_tasks.add_task( - process_uploaded_file, - request, - file, - file_path, - file_item, - file_metadata, - user, - ) - return {"status": True, **file_item.model_dump()} + if background_tasks: + background_tasks.add_task( + process_uploaded_file, + request, + file, + file_path, + file_item, + file_metadata, + user, + ) + return {"status": True, **file_item.model_dump()} + else: + process_uploaded_file( + request, + file, + file_path, + file_item, + file_metadata, + user, + ) + return {"status": True, **file_item.model_dump()} else: if file_item: return file_item diff --git a/backend/open_webui/routers/images.py b/backend/open_webui/routers/images.py index b970bed664..9311cb6e2c 100644 --- a/backend/open_webui/routers/images.py +++ b/backend/open_webui/routers/images.py @@ -10,11 +10,18 @@ from typing import Optional from urllib.parse import quote import requests -from fastapi import APIRouter, Depends, HTTPException, Request, UploadFile +from fastapi import ( + APIRouter, + Depends, + HTTPException, + Request, + UploadFile, +) + from open_webui.config import CACHE_DIR from open_webui.constants import ERROR_MESSAGES from open_webui.env import ENABLE_FORWARD_USER_INFO_HEADERS, SRC_LOG_LEVELS -from open_webui.routers.files import upload_file +from open_webui.routers.files import upload_file_handler from open_webui.utils.auth import get_admin_user, get_verified_user from open_webui.utils.images.comfyui import ( ComfyUIGenerateImageForm, @@ -469,8 +476,12 @@ def upload_image(request, image_data, content_type, metadata, user): "content-type": content_type, }, ) - file_item = upload_file( - request, file=file, metadata=metadata, process=False, user=user + file_item = upload_file_handler( + request, + file=file, + metadata=metadata, + process=False, + user=user, ) url = request.app.url_path_for("get_file_content_by_id", id=file_item.id) return url @@ -487,10 +498,13 @@ async def image_generations( # image model other than gpt-image-1, which is warned about on settings save size = "512x512" - if "x" in request.app.state.config.IMAGE_SIZE: + if ( + request.app.state.config.IMAGE_SIZE + and "x" in request.app.state.config.IMAGE_SIZE + ): size = request.app.state.config.IMAGE_SIZE - if "x" in form_data.size: + if form_data.size and "x" in form_data.size: size = form_data.size width, height = tuple(map(int, size.split("x"))) diff --git a/backend/open_webui/socket/main.py b/backend/open_webui/socket/main.py index 49323db975..5570348093 100644 --- a/backend/open_webui/socket/main.py +++ b/backend/open_webui/socket/main.py @@ -266,7 +266,9 @@ async def connect(sid, environ, auth): user = Users.get_user_by_id(data["id"]) if user: - SESSION_POOL[sid] = user.model_dump() + SESSION_POOL[sid] = user.model_dump( + exclude=["date_of_birth", "bio", "gender"] + ) if user.id in USER_POOL: USER_POOL[user.id] = USER_POOL[user.id] + [sid] else: @@ -288,7 +290,7 @@ async def user_join(sid, data): if not user: return - SESSION_POOL[sid] = user.model_dump() + SESSION_POOL[sid] = user.model_dump(exclude=["date_of_birth", "bio", "gender"]) if user.id in USER_POOL: USER_POOL[user.id] = USER_POOL[user.id] + [sid] else: diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index d9bcce9272..b991c1b986 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -740,9 +740,12 @@ async def process_chat_payload(request, form_data, user, metadata, model): system_message = get_system_message(form_data.get("messages", [])) if system_message: - form_data = apply_system_prompt_to_body( - system_message.get("content"), form_data, metadata, user - ) + try: + form_data = apply_system_prompt_to_body( + system_message.get("content"), form_data, metadata, user + ) + except: + pass event_emitter = get_event_emitter(metadata) event_call = get_event_call(metadata) diff --git a/backend/open_webui/utils/tools.py b/backend/open_webui/utils/tools.py index 428b534865..e68124bd5c 100644 --- a/backend/open_webui/utils/tools.py +++ b/backend/open_webui/utils/tools.py @@ -489,14 +489,14 @@ async def get_tool_servers(request: Request): if request.app.state.redis is not None: try: tool_servers = json.loads(await request.app.state.redis.get("tool_servers")) + request.app.state.TOOL_SERVERS = tool_servers except Exception as e: log.error(f"Error fetching tool_servers from Redis: {e}") if not tool_servers: - await set_tool_servers(request) + tool_servers = await set_tool_servers(request) - request.app.state.TOOL_SERVERS = tool_servers - return request.app.state.TOOL_SERVERS + return tool_servers async def get_tool_server_data(token: str, url: str) -> Dict[str, Any]: diff --git a/package-lock.json b/package-lock.json index e1753472d9..42b16afc8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.6.23", + "version": "0.6.25", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.6.23", + "version": "0.6.25", "dependencies": { "@azure/msal-browser": "^4.5.0", "@codemirror/lang-javascript": "^6.2.2", diff --git a/package.json b/package.json index 87152d3258..90ab645e7a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.6.23", + "version": "0.6.25", "private": true, "scripts": { "dev": "npm run pyodide:fetch && vite dev --host", diff --git a/src/lib/components/chat/Artifacts.svelte b/src/lib/components/chat/Artifacts.svelte index a6caa42106..bbe2132b90 100644 --- a/src/lib/components/chat/Artifacts.svelte +++ b/src/lib/components/chat/Artifacts.svelte @@ -204,7 +204,10 @@ }); -