MCPcopy
hub / github.com/docker/docker-agent / TestCompactionInput

Function TestCompactionInput

pkg/session/session_test.go:732–828  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

730}
731
732func TestCompactionInput(t *testing.T) {
733 t.Parallel()
734
735 newMsg := func(role chat.MessageRole, content string) Item {
736 return NewMessageItem(&Message{Message: chat.Message{Role: role, Content: content}})
737 }
738
739 t.Run("empty session returns empty", func(t *testing.T) {
740 t.Parallel()
741 sess := New()
742 messages, sessIndices := sess.CompactionInput()
743 assert.Empty(t, messages)
744 assert.Empty(t, sessIndices)
745 })
746
747 t.Run("system messages on the session are filtered out", func(t *testing.T) {
748 t.Parallel()
749 sess := New(WithMessages([]Item{
750 newMsg(chat.MessageRoleSystem, "sys"),
751 newMsg(chat.MessageRoleUser, "u1"),
752 newMsg(chat.MessageRoleAssistant, "a1"),
753 newMsg(chat.MessageRoleSystem, "sys2"),
754 newMsg(chat.MessageRoleUser, "u2"),
755 }))
756
757 messages, sessIndices := sess.CompactionInput()
758 require.Len(t, messages, 3)
759 assert.Equal(t, []int{1, 2, 4}, sessIndices)
760 assert.Equal(t, "u1", messages[0].Content)
761 assert.Equal(t, "a1", messages[1].Content)
762 assert.Equal(t, "u2", messages[2].Content)
763 })
764
765 t.Run("prior summary surfaces synthetic message and starts at FirstKeptEntry", func(t *testing.T) {
766 t.Parallel()
767 items := []Item{
768 newMsg(chat.MessageRoleUser, "u0"),
769 newMsg(chat.MessageRoleAssistant, "a0"),
770 newMsg(chat.MessageRoleUser, "u1-kept"),
771 newMsg(chat.MessageRoleAssistant, "a1-kept"),
772 {Summary: "prior summary", FirstKeptEntry: 2},
773 newMsg(chat.MessageRoleUser, "u2"),
774 newMsg(chat.MessageRoleAssistant, "a2"),
775 }
776 sess := New(WithMessages(items))
777
778 messages, sessIndices := sess.CompactionInput()
779
780 require.Len(t, messages, 5)
781 assert.Equal(t, chat.MessageRoleUser, messages[0].Role)
782 assert.Contains(t, messages[0].Content, "Session Summary: prior summary")
783 // The synthetic message maps back to the prior summary item; the
784 // kept-tail then resumes at the prior FirstKeptEntry, skipping
785 // the (non-message) summary item itself.
786 assert.Equal(t, []int{4, 2, 3, 5, 6}, sessIndices)
787 })
788
789 t.Run("prior summary without FirstKeptEntry starts strictly after the summary", func(t *testing.T) {

Callers

nothing calls this directly

Calls 6

NewMessageItemFunction · 0.85
WithMessagesFunction · 0.85
CompactionInputMethod · 0.80
NewFunction · 0.70
RunMethod · 0.65
LenMethod · 0.65

Tested by

no test coverage detected