@@ -55,6 +55,13 @@ def _make_event_with_usage(total_tokens: int) -> Event:
5555 return event
5656
5757
58+ def _make_summary_event () -> Event :
59+ event = _make_event_with_text ("Previous conversation summary" )
60+ event .set_summary_event (True )
61+ event .set_model_visible (True )
62+ return event
63+
64+
5865def _make_event_with_text (text : str ) -> Event :
5966 return Event (
6067 invocation_id = "inv-1" ,
@@ -90,6 +97,29 @@ def test_no_usage_metadata(self):
9097 session = _make_session (events = events )
9198 assert checker (session ) is False
9299
100+ def test_ignores_tokens_before_latest_summary (self ):
101+ checker = set_summarizer_token_threshold (100 )
102+ old_event = _make_event_with_usage (1000 )
103+ summary_event = _make_summary_event ()
104+ new_event = _make_event_with_usage (10 )
105+ old_event .timestamp = 1.0
106+ summary_event .timestamp = 2.0
107+ new_event .timestamp = 3.0
108+ session = _make_session (events = [old_event , summary_event , new_event ])
109+
110+ assert checker (session ) is False
111+
112+ def test_ignores_invisible_tokens_after_latest_summary (self ):
113+ checker = set_summarizer_token_threshold (100 )
114+ summary_event = _make_summary_event ()
115+ invisible_event = _make_event_with_usage (1000 )
116+ summary_event .timestamp = 1.0
117+ invisible_event .timestamp = 2.0
118+ invisible_event .set_model_visible (False )
119+ session = _make_session (events = [summary_event , invisible_event ])
120+
121+ assert checker (session ) is False
122+
93123
94124class TestEventsCountThreshold :
95125 """Test set_summarizer_events_count_threshold."""
@@ -118,6 +148,34 @@ def test_default_threshold(self):
118148 session = _make_session (events = events )
119149 assert checker (session ) is True
120150
151+ def test_counts_only_visible_events_after_latest_summary (self ):
152+ checker = set_summarizer_events_count_threshold (2 )
153+ old_events = [_make_event_with_text (f"old{ i } " ) for i in range (10 )]
154+ summary_event = _make_summary_event ()
155+ new_events = [_make_event_with_text ("new1" ), _make_event_with_text ("new2" )]
156+ for idx , event in enumerate (old_events ):
157+ event .timestamp = float (idx )
158+ summary_event .timestamp = 20.0
159+ new_events [0 ].timestamp = 21.0
160+ new_events [1 ].timestamp = 22.0
161+ session = _make_session (events = [* old_events , summary_event , * new_events ])
162+
163+ assert checker (session ) is False
164+
165+ def test_counts_after_the_latest_summary_event (self ):
166+ checker = set_summarizer_events_count_threshold (1 )
167+ first_summary = _make_summary_event ()
168+ event_after_first_summary = _make_event_with_text ("already summarized" )
169+ latest_summary = _make_summary_event ()
170+ new_event = _make_event_with_text ("new" )
171+ first_summary .timestamp = 1.0
172+ event_after_first_summary .timestamp = 2.0
173+ latest_summary .timestamp = 3.0
174+ new_event .timestamp = 4.0
175+ session = _make_session (events = [first_summary , event_after_first_summary , latest_summary , new_event ])
176+
177+ assert checker (session ) is False
178+
121179
122180class TestTimeIntervalThreshold :
123181 """Test set_summarizer_time_interval_threshold."""
@@ -143,6 +201,27 @@ def test_default_threshold(self):
143201 session = _make_session (events = [event ])
144202 assert checker (session ) is False
145203
204+ def test_requires_visible_events_after_latest_summary (self ):
205+ checker = set_summarizer_time_interval_threshold (10.0 )
206+ old_event = _make_event_with_text ("old" )
207+ summary_event = _make_summary_event ()
208+ old_event .timestamp = time .time () - 100.0
209+ summary_event .timestamp = time .time () - 20.0
210+ session = _make_session (events = [old_event , summary_event ])
211+
212+ assert checker (session ) is False
213+
214+ def test_ignores_invisible_events_after_latest_summary (self ):
215+ checker = set_summarizer_time_interval_threshold (10.0 )
216+ summary_event = _make_summary_event ()
217+ invisible_event = _make_event_with_text ("invisible" )
218+ summary_event .timestamp = time .time () - 20.0
219+ invisible_event .timestamp = time .time () - 20.0
220+ invisible_event .set_model_visible (False )
221+ session = _make_session (events = [summary_event , invisible_event ])
222+
223+ assert checker (session ) is False
224+
146225
147226class TestImportantContentThreshold :
148227 """Test set_summarizer_important_content_threshold."""
@@ -182,6 +261,29 @@ def test_event_with_whitespace_only(self):
182261 session = _make_session (events = events )
183262 assert checker (session ) is False
184263
264+ def test_ignores_important_content_before_latest_summary (self ):
265+ checker = set_summarizer_important_content_threshold (5 )
266+ old_important_event = _make_event_with_text ("This old content is important" )
267+ summary_event = _make_summary_event ()
268+ new_short_event = _make_event_with_text ("short" )
269+ old_important_event .timestamp = 1.0
270+ summary_event .timestamp = 2.0
271+ new_short_event .timestamp = 3.0
272+ session = _make_session (events = [old_important_event , summary_event , new_short_event ])
273+
274+ assert checker (session ) is False
275+
276+ def test_ignores_invisible_important_content_after_latest_summary (self ):
277+ checker = set_summarizer_important_content_threshold (5 )
278+ summary_event = _make_summary_event ()
279+ invisible_important_event = _make_event_with_text ("This invisible content is important" )
280+ summary_event .timestamp = 1.0
281+ invisible_important_event .timestamp = 2.0
282+ invisible_important_event .set_model_visible (False )
283+ session = _make_session (events = [summary_event , invisible_important_event ])
284+
285+ assert checker (session ) is False
286+
185287
186288class TestConversationThreshold :
187289 """Test set_summarizer_conversation_threshold."""
0 commit comments