From 428b391a38fd2af4df7c70b6b248c3837ed484d5 Mon Sep 17 00:00:00 2001 From: shuofengzhang Date: Mon, 2 Mar 2026 12:41:56 +0800 Subject: [PATCH] Skip empty summary message in memory context --- src/memory.py | 16 ++++++++++------ tests/test_memory.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/memory.py b/src/memory.py index 1f43ecea..2629ee06 100644 --- a/src/memory.py +++ b/src/memory.py @@ -131,12 +131,16 @@ def get_context_window( if self.summary != previous_summary: self.save_memory() - summary_message = { - "role": "system", - "content": f"Previous Summary: {self.summary}" - } - - return [system_message, summary_message, *recent_history] + summary_message = None + if self.summary: + summary_message = { + "role": "system", + "content": f"Previous Summary: {self.summary}" + } + + if summary_message: + return [system_message, summary_message, *recent_history] + return [system_message, *recent_history] def clear_memory(self): """Clears the agent's memory.""" diff --git a/tests/test_memory.py b/tests/test_memory.py index 9c86525c..141cc7ec 100644 --- a/tests/test_memory.py +++ b/tests/test_memory.py @@ -38,6 +38,24 @@ def summarizer(old_msgs, prev_summary): assert window[-1]["content"] == "msg 3" +def test_context_window_skips_empty_summary_message(tmp_path): + memory_file = tmp_path / "memory.json" + manager = MemoryManager(memory_file=str(memory_file)) + + for i in range(3): + manager.add_entry("user", f"msg {i}") + + def summarizer(_old_msgs, _prev_summary): + return "" + + window = manager.get_context_window("SYS", max_messages=1, summarizer=summarizer) + + assert window[0]["role"] == "system" + assert window[0]["content"] == "SYS" + assert len(window) == 2 # system prompt + 1 recent message + assert manager.summary == "" + + def test_loads_legacy_memory_format(tmp_path): legacy_file = tmp_path / "legacy.json" legacy_payload = [{"role": "user", "content": "legacy hi", "metadata": {}}]