@@ -111,41 +111,7 @@ def conversation_manager(request):
111
111
{"role" : "assistant" , "content" : [{"text" : "Second response" }]},
112
112
],
113
113
),
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
149
115
(
150
116
{"window_size" : 2 },
151
117
[
@@ -158,7 +124,7 @@ def conversation_manager(request):
158
124
{"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "456" , "content" : [], "status" : "success" }}]},
159
125
],
160
126
),
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
162
128
(
163
129
{"window_size" : 3 },
164
130
[
@@ -173,7 +139,7 @@ def conversation_manager(request):
173
139
{"role" : "assistant" , "content" : [{"text" : "Response after tool use" }]},
174
140
],
175
141
),
176
- # 11 - Test sliding window with multiple tool pairs that need preservation
142
+ # 9 - Test sliding window with multiple tool pairs that need preservation
177
143
(
178
144
{"window_size" : 4 },
179
145
[
@@ -185,7 +151,6 @@ def conversation_manager(request):
185
151
{"role" : "assistant" , "content" : [{"text" : "Final response" }]},
186
152
],
187
153
[
188
- {"role" : "user" , "content" : [{"text" : "Tool Result Status: success" }]},
189
154
{"role" : "assistant" , "content" : [{"toolUse" : {"toolUseId" : "456" , "name" : "tool2" , "input" : {}}}]},
190
155
{"role" : "user" , "content" : [{"toolResult" : {"toolUseId" : "456" , "content" : [], "status" : "success" }}]},
191
156
{"role" : "assistant" , "content" : [{"text" : "Final response" }]},
@@ -200,6 +165,20 @@ def test_apply_management(conversation_manager, messages, expected_messages):
200
165
assert messages == expected_messages
201
166
202
167
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
+
203
182
def test_null_conversation_manager_reduce_context_raises_context_window_overflow_exception ():
204
183
"""Test that NullConversationManager doesn't modify messages."""
205
184
manager = strands .agent .conversation_manager .NullConversationManager ()
0 commit comments