@@ -43,11 +43,15 @@ describe('CompletionMessagesBuilder', () => {
4343 const builder = new CompletionMessagesBuilder ( messages , systemInstruction )
4444
4545 const result = builder . getMessages ( )
46- expect ( result ) . toHaveLength ( 1 )
46+ expect ( result ) . toHaveLength ( 2 )
4747 expect ( result [ 0 ] ) . toEqual ( {
4848 role : 'system' ,
4949 content : systemInstruction ,
5050 } )
51+ expect ( result [ 1 ] ) . toEqual ( {
52+ role : 'user' ,
53+ content : '.' ,
54+ } )
5155 } )
5256
5357 it ( 'should filter out messages with errors' , ( ) => {
@@ -78,8 +82,9 @@ describe('CompletionMessagesBuilder', () => {
7882 const builder = new CompletionMessagesBuilder ( messages )
7983 const result = builder . getMessages ( )
8084
81- expect ( result ) . toHaveLength ( 1 )
82- expect ( result [ 0 ] . content ) . toBe ( 'Hello there!' )
85+ expect ( result ) . toHaveLength ( 2 )
86+ expect ( result [ 0 ] . content ) . toBe ( '.' )
87+ expect ( result [ 1 ] . content ) . toBe ( 'Hello there!' )
8388 } )
8489
8590 it ( 'should preserve user message content without normalization' , ( ) => {
@@ -171,8 +176,12 @@ describe('CompletionMessagesBuilder', () => {
171176 builder . addAssistantMessage ( '<think>Processing...</think>Hello!' )
172177
173178 const result = builder . getMessages ( )
174- expect ( result ) . toHaveLength ( 1 )
179+ expect ( result ) . toHaveLength ( 2 )
175180 expect ( result [ 0 ] ) . toEqual ( {
181+ role : 'user' ,
182+ content : '.' ,
183+ } )
184+ expect ( result [ 1 ] ) . toEqual ( {
176185 role : 'assistant' ,
177186 content : 'Hello!' ,
178187 refusal : undefined ,
@@ -189,8 +198,12 @@ describe('CompletionMessagesBuilder', () => {
189198 )
190199
191200 const result = builder . getMessages ( )
192- expect ( result ) . toHaveLength ( 1 )
201+ expect ( result ) . toHaveLength ( 2 )
193202 expect ( result [ 0 ] ) . toEqual ( {
203+ role : 'user' ,
204+ content : '.' ,
205+ } )
206+ expect ( result [ 1 ] ) . toEqual ( {
194207 role : 'assistant' ,
195208 content : 'I cannot help with that' ,
196209 refusal : 'Content policy violation' ,
@@ -218,8 +231,12 @@ describe('CompletionMessagesBuilder', () => {
218231 )
219232
220233 const result = builder . getMessages ( )
221- expect ( result ) . toHaveLength ( 1 )
234+ expect ( result ) . toHaveLength ( 2 )
222235 expect ( result [ 0 ] ) . toEqual ( {
236+ role : 'user' ,
237+ content : '.' ,
238+ } )
239+ expect ( result [ 1 ] ) . toEqual ( {
223240 role : 'assistant' ,
224241 content : 'Let me check the weather' ,
225242 refusal : undefined ,
@@ -247,8 +264,12 @@ describe('CompletionMessagesBuilder', () => {
247264 )
248265
249266 const result = builder . getMessages ( )
250- expect ( result ) . toHaveLength ( 1 )
267+ expect ( result ) . toHaveLength ( 2 )
251268 expect ( result [ 0 ] ) . toEqual ( {
269+ role : 'user' ,
270+ content : '.' ,
271+ } )
272+ expect ( result [ 1 ] ) . toEqual ( {
252273 role : 'assistant' ,
253274 content : 'Here are the results' ,
254275 refusal : 'Cannot search sensitive content' ,
@@ -264,8 +285,12 @@ describe('CompletionMessagesBuilder', () => {
264285 builder . addToolMessage ( 'Weather data: 72°F' , 'call_123' )
265286
266287 const result = builder . getMessages ( )
267- expect ( result ) . toHaveLength ( 1 )
288+ expect ( result ) . toHaveLength ( 2 )
268289 expect ( result [ 0 ] ) . toEqual ( {
290+ role : 'user' ,
291+ content : '.' ,
292+ } )
293+ expect ( result [ 1 ] ) . toEqual ( {
269294 role : 'tool' ,
270295 content : 'Weather data: 72°F' ,
271296 tool_call_id : 'call_123' ,
@@ -280,10 +305,11 @@ describe('CompletionMessagesBuilder', () => {
280305
281306 const result = builder . getMessages ( )
282307 // getMessages() inserts a filler message between consecutive tool messages
283- expect ( result ) . toHaveLength ( 3 )
284- expect ( result [ 0 ] . tool_call_id ) . toBe ( 'call_1' )
285- expect ( result [ 1 ] . role ) . toBe ( 'assistant' ) // filler message
286- expect ( result [ 2 ] . tool_call_id ) . toBe ( 'call_2' )
308+ expect ( result ) . toHaveLength ( 4 )
309+ expect ( result [ 0 ] . role ) . toBe ( 'user' ) // initial filler message
310+ expect ( result [ 1 ] . tool_call_id ) . toBe ( 'call_1' )
311+ expect ( result [ 2 ] . role ) . toBe ( 'assistant' ) // filler message
312+ expect ( result [ 3 ] . tool_call_id ) . toBe ( 'call_2' )
287313 } )
288314
289315 it ( 'should handle empty tool content' , ( ) => {
@@ -292,9 +318,13 @@ describe('CompletionMessagesBuilder', () => {
292318 builder . addToolMessage ( '' , 'call_123' )
293319
294320 const result = builder . getMessages ( )
295- expect ( result ) . toHaveLength ( 1 )
296- expect ( result [ 0 ] . content ) . toBe ( '' )
297- expect ( result [ 0 ] . tool_call_id ) . toBe ( 'call_123' )
321+ expect ( result ) . toHaveLength ( 2 )
322+ expect ( result [ 0 ] ) . toEqual ( {
323+ role : 'user' ,
324+ content : '.' ,
325+ } )
326+ expect ( result [ 1 ] . content ) . toBe ( '' )
327+ expect ( result [ 1 ] . tool_call_id ) . toBe ( 'call_123' )
298328 } )
299329 } )
300330
@@ -345,7 +375,7 @@ describe('CompletionMessagesBuilder', () => {
345375 )
346376
347377 const result = builder . getMessages ( )
348- expect ( result [ 0 ] . content ) . toBe ( 'The answer is 42.' )
378+ expect ( result [ 1 ] . content ) . toBe ( 'The answer is 42.' )
349379 } )
350380
351381 it ( 'should handle nested thinking tags' , ( ) => {
@@ -356,7 +386,7 @@ describe('CompletionMessagesBuilder', () => {
356386 )
357387
358388 const result = builder . getMessages ( )
359- expect ( result [ 0 ] . content ) . toBe ( 'More thinking</think>Final answer' )
389+ expect ( result [ 1 ] . content ) . toBe ( 'More thinking</think>Final answer' )
360390 } )
361391
362392 it ( 'should handle multiple thinking blocks' , ( ) => {
@@ -367,7 +397,7 @@ describe('CompletionMessagesBuilder', () => {
367397 )
368398
369399 const result = builder . getMessages ( )
370- expect ( result [ 0 ] . content ) . toBe ( 'Answer<think>Second</think>More content' )
400+ expect ( result [ 1 ] . content ) . toBe ( 'Answer<think>Second</think>More content' )
371401 } )
372402
373403 it ( 'should handle content without thinking tags' , ( ) => {
@@ -376,7 +406,7 @@ describe('CompletionMessagesBuilder', () => {
376406 builder . addAssistantMessage ( 'Just a normal response' )
377407
378408 const result = builder . getMessages ( )
379- expect ( result [ 0 ] . content ) . toBe ( 'Just a normal response' )
409+ expect ( result [ 1 ] . content ) . toBe ( 'Just a normal response' )
380410 } )
381411
382412 it ( 'should handle empty content after removing thinking' , ( ) => {
@@ -385,7 +415,7 @@ describe('CompletionMessagesBuilder', () => {
385415 builder . addAssistantMessage ( '<think>Only thinking content</think>' )
386416
387417 const result = builder . getMessages ( )
388- expect ( result [ 0 ] . content ) . toBe ( '' )
418+ expect ( result [ 1 ] . content ) . toBe ( '' )
389419 } )
390420
391421 it ( 'should handle unclosed thinking tags' , ( ) => {
@@ -396,7 +426,7 @@ describe('CompletionMessagesBuilder', () => {
396426 )
397427
398428 const result = builder . getMessages ( )
399- expect ( result [ 0 ] . content ) . toBe (
429+ expect ( result [ 1 ] . content ) . toBe (
400430 '<think>Unclosed thinking tag... Regular content'
401431 )
402432 } )
@@ -409,7 +439,7 @@ describe('CompletionMessagesBuilder', () => {
409439 )
410440
411441 const result = builder . getMessages ( )
412- expect ( result [ 0 ] . content ) . toBe ( 'Clean answer' )
442+ expect ( result [ 1 ] . content ) . toBe ( 'Clean answer' )
413443 } )
414444
415445 it ( 'should remove analysis channel reasoning content' , ( ) => {
@@ -420,7 +450,7 @@ describe('CompletionMessagesBuilder', () => {
420450 )
421451
422452 const result = builder . getMessages ( )
423- expect ( result [ 0 ] . content ) . toBe ( 'The final answer is 42.' )
453+ expect ( result [ 1 ] . content ) . toBe ( 'The final answer is 42.' )
424454 } )
425455
426456 it ( 'should handle analysis channel without final message' , ( ) => {
@@ -431,7 +461,7 @@ describe('CompletionMessagesBuilder', () => {
431461 )
432462
433463 const result = builder . getMessages ( )
434- expect ( result [ 0 ] . content ) . toBe ( '<|channel|>analysis<|message|>Only analysis content here...' )
464+ expect ( result [ 1 ] . content ) . toBe ( '<|channel|>analysis<|message|>Only analysis content here...' )
435465 } )
436466
437467 it ( 'should handle analysis channel with multiline content' , ( ) => {
@@ -442,7 +472,7 @@ describe('CompletionMessagesBuilder', () => {
442472 )
443473
444474 const result = builder . getMessages ( )
445- expect ( result [ 0 ] . content ) . toBe ( 'Based on my analysis, here is the result.' )
475+ expect ( result [ 1 ] . content ) . toBe ( 'Based on my analysis, here is the result.' )
446476 } )
447477
448478 it ( 'should handle both think and analysis channel tags' , ( ) => {
@@ -453,7 +483,7 @@ describe('CompletionMessagesBuilder', () => {
453483 )
454484
455485 const result = builder . getMessages ( )
456- expect ( result [ 0 ] . content ) . toBe ( 'Final response' )
486+ expect ( result [ 1 ] . content ) . toBe ( 'Final response' )
457487 } )
458488 } )
459489
@@ -518,11 +548,15 @@ describe('CompletionMessagesBuilder', () => {
518548
519549 const result = builder . getMessages ( )
520550
521- expect ( result ) . toHaveLength ( 1 )
551+ expect ( result ) . toHaveLength ( 2 )
522552 expect ( result [ 0 ] ) . toEqual ( {
523553 role : 'system' ,
524554 content : 'System instruction' ,
525555 } )
556+ expect ( result [ 1 ] ) . toEqual ( {
557+ role : 'user' ,
558+ content : '.' ,
559+ } )
526560 } )
527561 } )
528562} )
0 commit comments