This commit is contained in:
Timothy Jaeryang Baek
2026-07-26 21:07:20 -04:00
parent bab71ed08b
commit d484a2a99e
4 changed files with 25 additions and 9 deletions
+7 -2
View File
@@ -220,6 +220,7 @@ from open_webui.utils.chat import (
from open_webui.utils.chat import (
generate_chat_completion as chat_completion_handler,
)
from open_webui.utils.chat_id import is_saved_chat_id
from open_webui.utils.chat_variables import (
normalize_chat_variables,
)
@@ -264,7 +265,7 @@ log = logging.getLogger(__name__)
async def emit_chat_list_event(metadata: dict, chat_id: str):
if not chat_id or chat_id.startswith(('channel:', 'local:')):
if not is_saved_chat_id(chat_id):
return
event_emitter = await get_event_emitter(metadata, update_db=False)
@@ -1141,7 +1142,11 @@ async def chat_completion(
chat_id = form_data.get('chat_id') or ''
chat_variables = form_data.pop('chat_variables', None)
if chat_variables is None:
existing_chat = await Chats.get_chat_by_id(chat_id) if chat_id else None
existing_chat = (
await Chats.get_chat_by_id(chat_id)
if is_saved_chat_id(chat_id)
else None
)
chat_variables = existing_chat.variables if existing_chat else {}
chat_variables = normalize_chat_variables(chat_variables)
+3 -1
View File
@@ -37,6 +37,7 @@ from open_webui.socket.utils import RedisDict, RedisLock, YdocManager
from open_webui.tasks import create_task, stop_item_tasks
from open_webui.utils.access_control import has_permission
from open_webui.utils.auth import get_verified_user_by_token
from open_webui.utils.chat_id import is_saved_chat_id
from open_webui.utils.redis import (
build_sentinel_url,
get_redis_connection,
@@ -945,6 +946,7 @@ async def get_event_emitter(request_info, update_db=True):
chat_id = request_info['chat_id']
message_id = request_info['message_id']
internal = request_info.get('internal') is True
save_to_chat = update_db and message_id and is_saved_chat_id(chat_id)
if internal and event_data.get('type') == 'notification':
return
@@ -963,7 +965,7 @@ async def get_event_emitter(request_info, update_db=True):
room=room,
)
if update_db and message_id and not (request_info.get('chat_id') or '').startswith('local:'):
if save_to_chat:
event_type = event_data.get('type')
if event_type == 'status':
+7 -6
View File
@@ -52,6 +52,7 @@ from open_webui.routers.retrieval import search_web as _search_web
from open_webui.tasks import stop_item_tasks
from open_webui.events import EVENTS, publish_event
from open_webui.socket.main import sio
from open_webui.utils.chat_id import is_saved_chat_id
from open_webui.utils.notifications import notify_target
from open_webui.utils.sanitize import sanitize_code
@@ -378,7 +379,7 @@ async def generate_image(
image_files = [{'type': 'image', 'url': img['url']} for img in images]
# Persist files to DB if chat context is available
if __chat_id__ and __message_id__ and images:
if is_saved_chat_id(__chat_id__) and __message_id__ and images:
db_files = await Chats.add_message_files_by_id_and_message_id(
__chat_id__,
__message_id__,
@@ -446,7 +447,7 @@ async def edit_image(
image_files = [{'type': 'image', 'url': img['url']} for img in images]
# Persist files to DB if chat context is available
if __chat_id__ and __message_id__ and images:
if is_saved_chat_id(__chat_id__) and __message_id__ and images:
db_files = await Chats.add_message_files_by_id_and_message_id(
__chat_id__,
__message_id__,
@@ -3164,8 +3165,8 @@ async def create_tasks(
:param tasks: List of task items. Each item: content (string, required), status (pending|in_progress|completed|cancelled, default pending), id (optional, auto-generated).
:return: JSON with the full task list and summary counts
"""
if __chat_id__ is None:
return json.dumps({'error': 'Chat context not available'})
if not is_saved_chat_id(__chat_id__):
return json.dumps({'error': 'Saved chat context not available'})
try:
all_tasks = []
@@ -3216,8 +3217,8 @@ async def update_task(
:param status: New status: completed, in_progress, pending, or cancelled (default: completed)
:return: JSON with the updated task list and summary counts
"""
if __chat_id__ is None:
return json.dumps({'error': 'Chat context not available'})
if not is_saved_chat_id(__chat_id__):
return json.dumps({'error': 'Saved chat context not available'})
try:
status = status.strip().lower()
+8
View File
@@ -0,0 +1,8 @@
from typing import Optional
NON_SAVED_CHAT_ID_PREFIXES = ('local:', 'channel:')
def is_saved_chat_id(chat_id: Optional[str]) -> bool:
return bool(chat_id) and not chat_id.startswith(NON_SAVED_CHAT_ID_PREFIXES)