Files
Agent-Native/runtime/llm/prepare_test.go
weichen 3a110a728c
ci / vet-and-test (pull_request) Successful in 51s
ci / docker-checkout-hostgateway (pull_request) Successful in 1s
Shape provider messages before they are sent
Why: Some endpoints reject consecutive system messages or a run of the same role. The product already emits several system messages in one request.
Evidence: go test is covered by PrepareMessages tests for merge, strict folding, and tool pairs. Empty MessageShape leaves the transcript unchanged.
Impact: Callers opt in with StreamOptions.MessageShape. Tool calls and tool results are not merged.
Refs: docs/records/2026-10-04-sillytavern-review.md
2026-10-04 18:18:57 +00:00

39 lines
1.0 KiB
Go

package llm
import "testing"
func TestPrepareMergesAdjacentSystems(t *testing.T) {
out := PrepareMessages([]Message{
{Role: RoleSystem, Content: "a"},
{Role: RoleSystem, Content: "b"},
{Role: RoleUser, Content: "hi"},
}, "merge")
if len(out) != 2 || out[0].Content != "a\n\nb" {
t.Fatalf("merged = %#v", out)
}
}
func TestPrepareStrictFoldsLaterSystem(t *testing.T) {
out := PrepareMessages([]Message{
{Role: RoleSystem, Content: "base"},
{Role: RoleUser, Content: "hi"},
{Role: RoleSystem, Content: "note"},
}, "strict")
if len(out) != 2 {
t.Fatalf("len = %d %#v", len(out), out)
}
if out[1].Role != RoleUser || out[1].Content != "hi\n\n[system]\nnote" {
t.Fatalf("folded = %#v", out[1])
}
}
func TestPrepareKeepsToolPairs(t *testing.T) {
out := PrepareMessages([]Message{
{Role: RoleAssistant, Content: "call", ToolCalls: []ToolCall{{ID: "1", Name: "t"}}},
{Role: RoleTool, ToolCallID: "1", Content: "ok"},
}, "merge")
if len(out) != 2 || out[1].Role != RoleTool {
t.Fatalf("tools = %#v", out)
}
}