From 5c79ccc9e5c9efc2bc024d8f0b9757652ece929a Mon Sep 17 00:00:00 2001 From: Classic298 <27028174+Classic298@users.noreply.github.com> Date: Tue, 11 Aug 2026 07:24:41 +0200 Subject: [PATCH] refactor: walk chat message history by map key (#28034) `get_message_list` moves through `messages_map` by key but tracked each message's own `id` field, which the message body does not have to carry. Track the key instead. --- backend/open_webui/utils/misc.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/backend/open_webui/utils/misc.py b/backend/open_webui/utils/misc.py index f0d9235876..24253059d2 100644 --- a/backend/open_webui/utils/misc.py +++ b/backend/open_webui/utils/misc.py @@ -148,18 +148,13 @@ def get_message_list(messages_map, message_id): message_list = [] visited_message_ids = set() - while current_message: - message_id = current_message.get('id') - if message_id in visited_message_ids: - # Cycle detected, break to prevent infinite loop - break - - if message_id is not None: - visited_message_ids.add(message_id) - + # Track the map keys, not the messages' own 'id' field: a message may omit it + while current_message and message_id not in visited_message_ids: + visited_message_ids.add(message_id) message_list.append(current_message) - parent_id = current_message.get('parentId') # Use .get() for safety - current_message = messages_map.get(parent_id) if parent_id else None + + message_id = current_message.get('parentId') + current_message = messages_map.get(message_id) if message_id else None message_list.reverse() return message_list