@@ -111,41 +111,7 @@ def conversation_manager(request):
111111 {"role" : "assistant" , "content" : [{"text" : "Second response" }]},
112112 ],
113113 ),
114- # 7 - Message count above max window size - Remove dangling tool uses and tool results
115- (
116- {"window_size" : 1 },
117- [
118- {"role" : "user" , "content" : [{"text" : "First message" }]},
119- {"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "321" , "name" : "tool1" , "input" : {}}}]},
120- {
121- "role" : "user" ,
122- "content" : [
123- {"toolResult" : {"toolUseId" : "123" , "content" : [{"text" : "Hello!" }], "status" : "success" }}
124- ],
125- },
126- ],
127- [
128- {
129- "role" : "user" ,
130- "content" : [{"text" : "\n Tool Result Text Content: Hello!\n Tool Result Status: success" }],
131- },
132- ],
133- ),
134- # 8 - Message count above max window size - Remove multiple tool use/tool result pairs
135- (
136- {"window_size" : 1 },
137- [
138- {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "123" , "content" : [], "status" : "success" }}]},
139- {"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "123" , "name" : "tool1" , "input" : {}}}]},
140- {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "456" , "content" : [], "status" : "success" }}]},
141- {"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "456" , "name" : "tool1" , "input" : {}}}]},
142- {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "789" , "content" : [], "status" : "success" }}]},
143- ],
144- [
145- {"role" : "user" , "content" : [{"text" : "Tool Result Status: success" }]},
146- ],
147- ),
148- # 9 - Message count above max window size - Preserve tool use/tool result pairs
114+ # 7 - Message count above max window size - Preserve tool use/tool result pairs
149115 (
150116 {"window_size" : 2 },
151117 [
@@ -158,7 +124,7 @@ def conversation_manager(request):
158124 {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "456" , "content" : [], "status" : "success" }}]},
159125 ],
160126 ),
161- # 10 - Test sliding window behavior - preserve tool use/result pairs across cut boundary
127+ # 8 - Test sliding window behavior - preserve tool use/result pairs across cut boundary
162128 (
163129 {"window_size" : 3 },
164130 [
@@ -173,7 +139,7 @@ def conversation_manager(request):
173139 {"role" : "assistant" , "content" : [{"text" : "Response after tool use" }]},
174140 ],
175141 ),
176- # 11 - Test sliding window with multiple tool pairs that need preservation
142+ # 9 - Test sliding window with multiple tool pairs that need preservation
177143 (
178144 {"window_size" : 4 },
179145 [
@@ -185,7 +151,6 @@ def conversation_manager(request):
185151 {"role" : "assistant" , "content" : [{"text" : "Final response" }]},
186152 ],
187153 [
188- {"role" : "user" , "content" : [{"text" : "Tool Result Status: success" }]},
189154 {"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "456" , "name" : "tool2" , "input" : {}}}]},
190155 {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "456" , "content" : [], "status" : "success" }}]},
191156 {"role" : "assistant" , "content" : [{"text" : "Final response" }]},
@@ -200,6 +165,20 @@ def test_apply_management(conversation_manager, messages, expected_messages):
200165 assert messages == expected_messages
201166
202167
168+ def test_sliding_window_conversation_manager_with_untrimmable_history_raises_context_window_overflow_exception ():
169+ manager = strands .agent .conversation_manager .SlidingWindowConversationManager (1 )
170+ messages = [
171+ {"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "456" , "name" : "tool1" , "input" : {}}}]},
172+ {"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "789" , "content" : [], "status" : "success" }}]},
173+ ]
174+ original_messages = messages .copy ()
175+
176+ with pytest .raises (ContextWindowOverflowException ):
177+ manager .apply_management (messages )
178+
179+ assert messages == original_messages
180+
181+
203182def test_null_conversation_manager_reduce_context_raises_context_window_overflow_exception ():
204183 """Test that NullConversationManager doesn't modify messages."""
205184 manager = strands .agent .conversation_manager .NullConversationManager ()
0 commit comments