This commit is contained in:
Timothy Jaeryang Baek
2026-08-24 18:37:39 -04:00
parent 536b9edec0
commit 9dff5e9327
2 changed files with 16 additions and 12 deletions
+7 -7
View File
@@ -6,7 +6,7 @@ import logging
import re import re
import time import time
import uuid import uuid
from typing import Literal from typing import Any, Literal
# local imports # local imports
from open_webui.env import ENABLE_ADMIN_CHAT_ACCESS from open_webui.env import ENABLE_ADMIN_CHAT_ACCESS
@@ -1071,13 +1071,13 @@ class ChatTable:
return chat.chat.get('history', {}).get('messages', {}).get(message_id, {}) return chat.chat.get('history', {}).get('messages', {}).get(message_id, {})
async def get_message_metadata_list( async def get_message_metadata(
self, self,
chat_id: str, chat_id: str,
message_id: str, message_id: str,
metadata_key: Literal['files', 'sources', 'embeds'], metadata_key: Literal['files', 'sources', 'embeds'],
) -> list[dict]: ) -> Any | None:
"""Read one list-valued message field without rebuilding the whole history.""" """Read one message metadata field without rebuilding the whole history."""
async with get_async_db_context() as db: async with get_async_db_context() as db:
# Read the column directly; some stored rows cannot be validated as full ChatMessageModel objects. # Read the column directly; some stored rows cannot be validated as full ChatMessageModel objects.
result = await db.execute( result = await db.execute(
@@ -1086,14 +1086,14 @@ class ChatTable:
metadata_row = result.first() metadata_row = result.first()
if metadata_row is not None: if metadata_row is not None:
return metadata_row[0] or [] return metadata_row[0]
chat = await self.get_chat_by_id(chat_id) chat = await self.get_chat_by_id(chat_id)
if chat is None: if chat is None:
return [] return None
message = chat.chat.get('history', {}).get('messages', {}).get(message_id, {}) message = chat.chat.get('history', {}).get('messages', {}).get(message_id, {})
return message.get(metadata_key) or [] return message.get(metadata_key)
async def upsert_message_to_chat_by_id_and_message_id( async def upsert_message_to_chat_by_id_and_message_id(
self, id: str, message_id: str, message: dict, *, touch: bool = True self, id: str, message_id: str, message: dict, *, touch: bool = True
+9 -5
View File
@@ -1074,8 +1074,9 @@ async def get_event_emitter(request_info, update_db=True):
embeds = event_payload.get('embeds', []) embeds = event_payload.get('embeds', [])
if not event_payload.get('replace', False): if not event_payload.get('replace', False):
existing_embeds = await Chats.get_message_metadata_list(chat_id, message_id, 'embeds') existing_embeds = await Chats.get_message_metadata(chat_id, message_id, 'embeds')
embeds.extend(existing_embeds) if isinstance(existing_embeds, list):
embeds.extend(existing_embeds)
await Chats.upsert_message_to_chat_by_id_and_message_id( await Chats.upsert_message_to_chat_by_id_and_message_id(
chat_id, chat_id,
@@ -1088,8 +1089,9 @@ async def get_event_emitter(request_info, update_db=True):
elif event_type == 'files': elif event_type == 'files':
files = event_data.get('data', {}).get('files', []) files = event_data.get('data', {}).get('files', [])
existing_files = await Chats.get_message_metadata_list(chat_id, message_id, 'files') existing_files = await Chats.get_message_metadata(chat_id, message_id, 'files')
files.extend(existing_files) if isinstance(existing_files, list):
files.extend(existing_files)
await Chats.upsert_message_to_chat_by_id_and_message_id( await Chats.upsert_message_to_chat_by_id_and_message_id(
chat_id, chat_id,
@@ -1103,7 +1105,9 @@ async def get_event_emitter(request_info, update_db=True):
elif event_type in ('source', 'citation'): elif event_type in ('source', 'citation'):
data = event_data.get('data', {}) data = event_data.get('data', {})
if data.get('type') is None: if data.get('type') is None:
sources = await Chats.get_message_metadata_list(chat_id, message_id, 'sources') sources = await Chats.get_message_metadata(chat_id, message_id, 'sources')
if not isinstance(sources, list):
sources = []
sources.append(data) sources.append(data)
await Chats.upsert_message_to_chat_by_id_and_message_id( await Chats.upsert_message_to_chat_by_id_and_message_id(