kenn-io--agentsview
f99010fae1
CI / lint (push) Failing after 1s
CI / frontend (push) Failing after 1s
CI / scripts (push) Failing after 1s
CI / Go Test (ubuntu-latest) (push) Failing after 0s
CI / frontend-node-25 (push) Failing after 1s
CI / docs (push) Failing after 0s
CI / coverage (push) Failing after 0s
CI / e2e (push) Failing after 0s
Docker / build-and-push (push) Failing after 1s
CI / integration (push) Failing after 4m43s
CI / Go Test (windows-latest) (push) Has been cancelled
CI / Desktop Unit Tests (Windows) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux (arm64)) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Linux) (push) Has been cancelled
Desktop Artifacts / Desktop Build (Windows) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (aarch64)) (push) Has been cancelled
Desktop Artifacts (macOS) / Desktop Build (macOS (x86_64)) (push) Has been cancelled
86 行
2.5 KiB
Go
86 行
2.5 KiB
Go
package service
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"go.kenn.io/agentsview/internal/db"
|
|
)
|
|
|
|
func TestBuildRecallExtractionChunksIncludesOnlyUserAssistantText(t *testing.T) {
|
|
chunks := BuildRecallExtractionChunks("session-1", []db.Message{
|
|
{
|
|
Ordinal: 0,
|
|
Role: "system",
|
|
Content: "system instruction",
|
|
},
|
|
{
|
|
Ordinal: 1,
|
|
Role: "user",
|
|
Content: "We need a project recall that tracks decisions.",
|
|
},
|
|
{
|
|
Ordinal: 2,
|
|
Role: "assistant",
|
|
Content: "I propose extracting structured facts from sessions.",
|
|
},
|
|
{
|
|
Ordinal: 3,
|
|
Role: "user",
|
|
IsSystem: true,
|
|
Content: "promoted system marker",
|
|
},
|
|
{
|
|
Ordinal: 4,
|
|
Role: "tool",
|
|
Content: "tool output should not feed recall extraction",
|
|
},
|
|
{
|
|
Ordinal: 5,
|
|
Role: "assistant",
|
|
Content: " ",
|
|
},
|
|
}, RecallExtractionChunkOptions{MaxChars: 1000})
|
|
|
|
require.Len(t, chunks, 1)
|
|
assert.Equal(t, "session-1", chunks[0].SessionID)
|
|
assert.Equal(t, 0, chunks[0].Index)
|
|
assert.Equal(t, 1, chunks[0].StartOrdinal)
|
|
assert.Equal(t, 2, chunks[0].EndOrdinal)
|
|
require.Len(t, chunks[0].Messages, 2)
|
|
assert.Equal(t, "user", chunks[0].Messages[0].Role)
|
|
assert.Equal(t, 1, chunks[0].Messages[0].Ordinal)
|
|
assert.Equal(t, "assistant", chunks[0].Messages[1].Role)
|
|
assert.Equal(t, 2, chunks[0].Messages[1].Ordinal)
|
|
assert.Contains(t, chunks[0].Text, "[1 user] We need a project recall")
|
|
assert.Contains(t, chunks[0].Text, "[2 assistant] I propose extracting")
|
|
assert.NotContains(t, chunks[0].Text, "system instruction")
|
|
assert.NotContains(t, chunks[0].Text, "tool output")
|
|
assert.NotContains(t, chunks[0].Text, "promoted system marker")
|
|
}
|
|
|
|
func TestBuildRecallExtractionChunksBoundsChunksByTextSize(t *testing.T) {
|
|
msgs := []db.Message{
|
|
{Ordinal: 1, Role: "user", Content: strings.Repeat("a", 36)},
|
|
{Ordinal: 2, Role: "assistant", Content: strings.Repeat("b", 36)},
|
|
{Ordinal: 3, Role: "user", Content: strings.Repeat("c", 36)},
|
|
{Ordinal: 4, Role: "assistant", Content: strings.Repeat("d", 36)},
|
|
}
|
|
|
|
chunks := BuildRecallExtractionChunks(
|
|
"session-2", msgs, RecallExtractionChunkOptions{MaxChars: 90},
|
|
)
|
|
|
|
require.Len(t, chunks, 4)
|
|
for i, chunk := range chunks {
|
|
assert.Equal(t, i, chunk.Index)
|
|
assert.Len(t, chunk.Messages, 1)
|
|
assert.LessOrEqual(t, len(chunk.Text), 90)
|
|
assert.Equal(t, chunk.Messages[0].Ordinal, chunk.StartOrdinal)
|
|
assert.Equal(t, chunk.Messages[0].Ordinal, chunk.EndOrdinal)
|
|
}
|
|
}
|