diff --git a/backend/open_webui/utils/context_compaction.py b/backend/open_webui/utils/context_compaction.py index b38a4eb346..7a1834b6fc 100644 --- a/backend/open_webui/utils/context_compaction.py +++ b/backend/open_webui/utils/context_compaction.py @@ -52,16 +52,19 @@ async def compact_messages_for_request( if not config['enable']: return messages, None, False + system_messages = messages[:1] if messages and messages[0].get('role') == 'system' else [] + messages = messages[len(system_messages) :] + messages, previous_summary = _apply_latest_summary_checkpoint(messages) token_threshold = _resolve_token_threshold(config['token_threshold'], config['token_cap'], metadata) if not _exceeds_token_threshold(messages, system_prompt, previous_summary, token_threshold) or len(messages) <= 3: - return messages, previous_summary, False + return [*system_messages, *messages], previous_summary, False boundary = _find_compaction_boundary(messages, config['retention_percentage']) compacted_messages = messages[:boundary] recent_messages = messages[boundary:] if not compacted_messages or not recent_messages: - return messages, previous_summary, False + return [*system_messages, *messages], previous_summary, False event_emitter = None if metadata.get('chat_id') and metadata.get('message_id'): @@ -141,7 +144,7 @@ async def compact_messages_for_request( } ) - return recent_messages, summary, True + return [*system_messages, *recent_messages], summary, True async def compact_chat_branch(request, user, chat: Any, model_id: str, models: dict) -> dict: