|
4 | 4 | "testing" |
5 | 5 |
|
6 | 6 | "github.com/stretchr/testify/assert" |
7 | | - "github.com/stretchr/testify/require" |
8 | 7 |
|
9 | 8 | "github.com/docker/docker-agent/pkg/chat" |
10 | 9 | "github.com/docker/docker-agent/pkg/tools" |
@@ -164,137 +163,3 @@ func TestShouldCompact(t *testing.T) { |
164 | 163 | }) |
165 | 164 | } |
166 | 165 | } |
167 | | - |
168 | | -func TestHasConversationMessages(t *testing.T) { |
169 | | - t.Parallel() |
170 | | - |
171 | | - tests := []struct { |
172 | | - name string |
173 | | - messages []chat.Message |
174 | | - want bool |
175 | | - }{ |
176 | | - { |
177 | | - name: "empty", |
178 | | - messages: nil, |
179 | | - want: false, |
180 | | - }, |
181 | | - { |
182 | | - name: "system only", |
183 | | - messages: []chat.Message{ |
184 | | - {Role: chat.MessageRoleSystem, Content: "You are helpful."}, |
185 | | - }, |
186 | | - want: false, |
187 | | - }, |
188 | | - { |
189 | | - name: "system and user", |
190 | | - messages: []chat.Message{ |
191 | | - {Role: chat.MessageRoleSystem, Content: "You are helpful."}, |
192 | | - {Role: chat.MessageRoleUser, Content: "Hello"}, |
193 | | - }, |
194 | | - want: true, |
195 | | - }, |
196 | | - { |
197 | | - name: "only user", |
198 | | - messages: []chat.Message{ |
199 | | - {Role: chat.MessageRoleUser, Content: "Hello"}, |
200 | | - }, |
201 | | - want: true, |
202 | | - }, |
203 | | - { |
204 | | - name: "assistant message", |
205 | | - messages: []chat.Message{ |
206 | | - {Role: chat.MessageRoleAssistant, Content: "Hi there"}, |
207 | | - }, |
208 | | - want: true, |
209 | | - }, |
210 | | - } |
211 | | - |
212 | | - for _, tt := range tests { |
213 | | - t.Run(tt.name, func(t *testing.T) { |
214 | | - t.Parallel() |
215 | | - got := HasConversationMessages(tt.messages) |
216 | | - assert.Equal(t, tt.want, got) |
217 | | - }) |
218 | | - } |
219 | | -} |
220 | | - |
221 | | -func TestBuildPrompt(t *testing.T) { |
222 | | - t.Parallel() |
223 | | - |
224 | | - messages := []chat.Message{ |
225 | | - {Role: chat.MessageRoleSystem, Content: "You are helpful."}, |
226 | | - {Role: chat.MessageRoleUser, Content: "Hello", Cost: 0.05}, |
227 | | - {Role: chat.MessageRoleAssistant, Content: "Hi!", Cost: 0.10}, |
228 | | - } |
229 | | - |
230 | | - t.Run("basic", func(t *testing.T) { |
231 | | - t.Parallel() |
232 | | - |
233 | | - out := BuildPrompt(messages, "") |
234 | | - |
235 | | - // Original messages + appended summarization prompt. |
236 | | - require.Len(t, out, 4) |
237 | | - |
238 | | - // Costs are zeroed. |
239 | | - for _, msg := range out[:3] { |
240 | | - assert.Zero(t, msg.Cost, "cost should be zeroed for %q", msg.Content) |
241 | | - } |
242 | | - |
243 | | - // Last message is the summarization prompt. |
244 | | - last := out[len(out)-1] |
245 | | - assert.Equal(t, chat.MessageRoleUser, last.Role) |
246 | | - assert.Contains(t, last.Content, "summary") |
247 | | - assert.NotEmpty(t, last.CreatedAt) |
248 | | - }) |
249 | | - |
250 | | - t.Run("with additional prompt", func(t *testing.T) { |
251 | | - t.Parallel() |
252 | | - |
253 | | - out := BuildPrompt(messages, "focus on code changes") |
254 | | - |
255 | | - last := out[len(out)-1] |
256 | | - assert.Contains(t, last.Content, "Additional instructions from user: focus on code changes") |
257 | | - }) |
258 | | - |
259 | | - t.Run("does not modify original messages", func(t *testing.T) { |
260 | | - t.Parallel() |
261 | | - |
262 | | - original := []chat.Message{ |
263 | | - {Role: chat.MessageRoleUser, Content: "Hello", Cost: 0.05}, |
264 | | - } |
265 | | - |
266 | | - _ = BuildPrompt(original, "") |
267 | | - |
268 | | - assert.InDelta(t, 0.05, original[0].Cost, 1e-9) |
269 | | - assert.Len(t, original, 1) |
270 | | - }) |
271 | | - |
272 | | - t.Run("strips CacheControl from cloned messages", func(t *testing.T) { |
273 | | - t.Parallel() |
274 | | - |
275 | | - input := []chat.Message{ |
276 | | - {Role: chat.MessageRoleSystem, Content: "system", CacheControl: true}, |
277 | | - {Role: chat.MessageRoleSystem, Content: "context", CacheControl: true}, |
278 | | - {Role: chat.MessageRoleUser, Content: "hello"}, |
279 | | - } |
280 | | - |
281 | | - out := BuildPrompt(input, "") |
282 | | - |
283 | | - // All cloned messages should have CacheControl=false |
284 | | - for i, msg := range out { |
285 | | - assert.False(t, msg.CacheControl, "message %d should have CacheControl stripped", i) |
286 | | - } |
287 | | - // Original should be unchanged |
288 | | - assert.True(t, input[0].CacheControl) |
289 | | - assert.True(t, input[1].CacheControl) |
290 | | - }) |
291 | | -} |
292 | | - |
293 | | -func TestPromptsAreEmbedded(t *testing.T) { |
294 | | - t.Parallel() |
295 | | - |
296 | | - assert.NotEmpty(t, SystemPrompt, "compaction system prompt should be embedded") |
297 | | - assert.NotEmpty(t, userPrompt, "compaction user prompt should be embedded") |
298 | | - assert.Contains(t, SystemPrompt, "summary") |
299 | | - assert.Contains(t, userPrompt, "summary") |
300 | | -} |
0 commit comments