diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 86e1102c5..297b74509 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -1001,7 +1001,7 @@ async def process_chat_response( message = message_map.get(metadata["message_id"]) if message_map else None if message: - message_list = get_message_list(message_map, message.get("id")) + message_list = get_message_list(message_map, metadata["message_id"]) # Remove details tags and files from the messages. # as get_message_list creates a new list, it does not affect @@ -1027,7 +1027,7 @@ async def process_chat_response( messages.append( { **message, - "role": message["role"], + "role": message.get("role", "assistant"), # Safe fallback for missing role "content": content, } ) @@ -1195,6 +1195,7 @@ async def process_chat_response( metadata["chat_id"], metadata["message_id"], { + "role": "assistant", "content": content, }, ) diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index b804afd2c..79f483d04 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -38,7 +38,7 @@ def get_message_list(messages, message_id): current_message = messages.get(message_id) if not current_message: - return None + return [] # Return empty list instead of None to prevent iteration errors # Reconstruct the chain by following the parentId links message_list = [] @@ -47,7 +47,7 @@ def get_message_list(messages, message_id): message_list.insert( 0, current_message ) # Insert the message at the beginning of the list - parent_id = current_message["parentId"] + parent_id = current_message.get("parentId") # Use .get() for safety current_message = messages.get(parent_id) if parent_id else None return message_list