54 lines
1.9 KiB
Go
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"))
|
|
})
|
|
})
|