Files
mudler--localai/core/backend/prefix_source_internal_test.go
wehub-resource-sync 1b8708893a
Security Scan / tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:12:26 +08:00

54 lines
1.9 KiB
Go

package backend
import (
"strings"
"github.com/mudler/LocalAI/core/schema"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("messagesPrefixSource", func() {
mk := func(role, content string) schema.Message {
return schema.Message{Role: role, StringContent: content}
}
It("serializes messages head-first in turn order", func() {
got := messagesPrefixSource(schema.Messages{
mk("system", "You are helpful."),
mk("user", "Hi"),
})
Expect(got).To(Equal("system\nYou are helpful.\nuser\nHi\n"))
})
It("is deterministic across calls for the same conversation", func() {
conv := schema.Messages{mk("system", "S"), mk("user", "U")}
Expect(messagesPrefixSource(conv)).To(Equal(messagesPrefixSource(conv)))
})
It("shares a leading byte prefix when the system prompt is shared", func() {
shared := "system\nShared system prompt.\nuser\n"
a := messagesPrefixSource(schema.Messages{mk("system", "Shared system prompt."), mk("user", "Question A")})
b := messagesPrefixSource(schema.Messages{mk("system", "Shared system prompt."), mk("user", "Question B")})
Expect(strings.HasPrefix(a, shared)).To(BeTrue())
Expect(strings.HasPrefix(b, shared)).To(BeTrue())
})
It("does NOT share a prefix when the system prompt differs", func() {
a := messagesPrefixSource(schema.Messages{mk("system", "Prompt A"), mk("user", "Q")})
b := messagesPrefixSource(schema.Messages{mk("system", "Prompt B"), mk("user", "Q")})
Expect(strings.HasPrefix(a, "system\nPrompt A")).To(BeTrue())
Expect(strings.HasPrefix(b, "system\nPrompt B")).To(BeTrue())
})
It("returns empty for no messages", func() {
Expect(messagesPrefixSource(nil)).To(Equal(""))
})
It("falls back to Content when StringContent is empty", func() {
got := messagesPrefixSource(schema.Messages{{Role: "user", Content: "plain"}})
Expect(got).To(Equal("user\nplain\n"))
})
})