Spaces:
Configuration error
Configuration error
package model_test | |
import ( | |
. "github.com/mudler/LocalAI/pkg/model" | |
. "github.com/onsi/ginkgo/v2" | |
. "github.com/onsi/gomega" | |
) | |
const chatML = `<|im_start|>{{if eq .RoleName "assistant"}}assistant{{else if eq .RoleName "system"}}system{{else if eq .RoleName "tool"}}tool{{else if eq .RoleName "user"}}user{{end}} | |
{{- if .FunctionCall }} | |
<tool_call> | |
{{- else if eq .RoleName "tool" }} | |
<tool_response> | |
{{- end }} | |
{{- if .Content}} | |
{{.Content }} | |
{{- end }} | |
{{- if .FunctionCall}} | |
{{toJson .FunctionCall}} | |
{{- end }} | |
{{- if .FunctionCall }} | |
</tool_call> | |
{{- else if eq .RoleName "tool" }} | |
</tool_response> | |
{{- end }}<|im_end|>` | |
const llama3 = `<|start_header_id|>{{if eq .RoleName "assistant"}}assistant{{else if eq .RoleName "system"}}system{{else if eq .RoleName "tool"}}tool{{else if eq .RoleName "user"}}user{{end}}<|end_header_id|> | |
{{ if .FunctionCall -}} | |
Function call: | |
{{ else if eq .RoleName "tool" -}} | |
Function response: | |
{{ end -}} | |
{{ if .Content -}} | |
{{.Content -}} | |
{{ else if .FunctionCall -}} | |
{{ toJson .FunctionCall -}} | |
{{ end -}} | |
<|eot_id|>` | |
var llama3TestMatch map[string]map[string]interface{} = map[string]map[string]interface{}{ | |
"user": { | |
"template": llama3, | |
"expected": "<|start_header_id|>user<|end_header_id|>\n\nA long time ago in a galaxy far, far away...<|eot_id|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "user", | |
RoleName: "user", | |
Content: "A long time ago in a galaxy far, far away...", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"assistant": { | |
"template": llama3, | |
"expected": "<|start_header_id|>assistant<|end_header_id|>\n\nA long time ago in a galaxy far, far away...<|eot_id|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "assistant", | |
RoleName: "assistant", | |
Content: "A long time ago in a galaxy far, far away...", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"function_call": { | |
"template": llama3, | |
"expected": "<|start_header_id|>assistant<|end_header_id|>\n\nFunction call:\n{\"function\":\"test\"}<|eot_id|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "assistant", | |
RoleName: "assistant", | |
Content: "", | |
FunctionCall: map[string]string{"function": "test"}, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"function_response": { | |
"template": llama3, | |
"expected": "<|start_header_id|>tool<|end_header_id|>\n\nFunction response:\nResponse from tool<|eot_id|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "tool", | |
RoleName: "tool", | |
Content: "Response from tool", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
} | |
var chatMLTestMatch map[string]map[string]interface{} = map[string]map[string]interface{}{ | |
"user": { | |
"template": chatML, | |
"expected": "<|im_start|>user\nA long time ago in a galaxy far, far away...<|im_end|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "user", | |
RoleName: "user", | |
Content: "A long time ago in a galaxy far, far away...", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"assistant": { | |
"template": chatML, | |
"expected": "<|im_start|>assistant\nA long time ago in a galaxy far, far away...<|im_end|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "assistant", | |
RoleName: "assistant", | |
Content: "A long time ago in a galaxy far, far away...", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"function_call": { | |
"template": chatML, | |
"expected": "<|im_start|>assistant\n<tool_call>\n{\"function\":\"test\"}\n</tool_call><|im_end|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "assistant", | |
RoleName: "assistant", | |
Content: "", | |
FunctionCall: map[string]string{"function": "test"}, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
"function_response": { | |
"template": chatML, | |
"expected": "<|im_start|>tool\n<tool_response>\nResponse from tool\n</tool_response><|im_end|>", | |
"data": ChatMessageTemplateData{ | |
SystemPrompt: "", | |
Role: "tool", | |
RoleName: "tool", | |
Content: "Response from tool", | |
FunctionCall: nil, | |
FunctionName: "", | |
LastMessage: false, | |
Function: false, | |
MessageIndex: 0, | |
}, | |
}, | |
} | |
var _ = Describe("Templates", func() { | |
Context("chat message ChatML", func() { | |
var modelLoader *ModelLoader | |
BeforeEach(func() { | |
modelLoader = NewModelLoader("") | |
}) | |
for key := range chatMLTestMatch { | |
foo := chatMLTestMatch[key] | |
It("renders correctly `"+key+"`", func() { | |
templated, err := modelLoader.EvaluateTemplateForChatMessage(foo["template"].(string), foo["data"].(ChatMessageTemplateData)) | |
Expect(err).ToNot(HaveOccurred()) | |
Expect(templated).To(Equal(foo["expected"]), templated) | |
}) | |
} | |
}) | |
Context("chat message llama3", func() { | |
var modelLoader *ModelLoader | |
BeforeEach(func() { | |
modelLoader = NewModelLoader("") | |
}) | |
for key := range llama3TestMatch { | |
foo := llama3TestMatch[key] | |
It("renders correctly `"+key+"`", func() { | |
templated, err := modelLoader.EvaluateTemplateForChatMessage(foo["template"].(string), foo["data"].(ChatMessageTemplateData)) | |
Expect(err).ToNot(HaveOccurred()) | |
Expect(templated).To(Equal(foo["expected"]), templated) | |
}) | |
} | |
}) | |
}) | |