autodetect stop parameters from template
This commit is contained in:
parent
23ebbaa46e
commit
ebc529cbb3
21 changed files with 156 additions and 4 deletions
|
@ -4,6 +4,7 @@ import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
@ -259,13 +260,27 @@ func detectChatTemplate(layers []*layerGGML) ([]*layerGGML, error) {
|
||||||
if t, err := template.Named(s); err != nil {
|
if t, err := template.Named(s); err != nil {
|
||||||
slog.Debug("template detection", "error", err)
|
slog.Debug("template detection", "error", err)
|
||||||
} else {
|
} else {
|
||||||
tmpl, err := NewLayer(t.Reader(), "application/vnd.ollama.image.template")
|
layer, err := NewLayer(t.Reader(), "application/vnd.ollama.image.template")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl.status = fmt.Sprintf("using autodetected template %s", t.Name)
|
layer.status = fmt.Sprintf("using autodetected template %s", t.Name)
|
||||||
layers = append(layers, &layerGGML{tmpl, nil})
|
layers = append(layers, &layerGGML{layer, nil})
|
||||||
|
|
||||||
|
if t.Parameters != nil {
|
||||||
|
var b bytes.Buffer
|
||||||
|
if err := json.NewEncoder(&b).Encode(t.Parameters); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
layer, err := NewLayer(&b, "application/vnd.ollama.image.params")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
layers = append(layers, &layerGGML{layer, nil})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -545,9 +545,10 @@ func TestCreateDetectTemplate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
checkFileExists(t, filepath.Join(p, "blobs", "*"), []string{
|
checkFileExists(t, filepath.Join(p, "blobs", "*"), []string{
|
||||||
|
filepath.Join(p, "blobs", "sha256-0d79f567714c62c048378f2107fb332dabee0135d080c302d884317da9433cc5"),
|
||||||
filepath.Join(p, "blobs", "sha256-553c4a3f747b3d22a4946875f1cc8ed011c2930d83f864a0c7265f9ec0a20413"),
|
filepath.Join(p, "blobs", "sha256-553c4a3f747b3d22a4946875f1cc8ed011c2930d83f864a0c7265f9ec0a20413"),
|
||||||
filepath.Join(p, "blobs", "sha256-c608dc615584cd20d9d830363dabf8a4783ae5d34245c3d8c115edb3bc7b28e4"),
|
filepath.Join(p, "blobs", "sha256-c608dc615584cd20d9d830363dabf8a4783ae5d34245c3d8c115edb3bc7b28e4"),
|
||||||
filepath.Join(p, "blobs", "sha256-f836ee110db21567f826332e4cedd746c06d10664fd5a9ea3659e3683a944510"),
|
filepath.Join(p, "blobs", "sha256-ea34c57ba5b78b740aafe2aeb74dc6507fc3ad14170b64c26a04fb9e36c88d75"),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
8
template/alfred.json
Normal file
8
template/alfred.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<start_system>",
|
||||||
|
"<end_message>",
|
||||||
|
"<start_user>",
|
||||||
|
"<start_assistant>"
|
||||||
|
]
|
||||||
|
}
|
6
template/alpaca.json
Normal file
6
template/alpaca.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"### Instruction:",
|
||||||
|
"### Response"
|
||||||
|
]
|
||||||
|
}
|
6
template/chatml.json
Normal file
6
template/chatml.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|im_start|>",
|
||||||
|
"<|im_end|>"
|
||||||
|
]
|
||||||
|
}
|
8
template/chatqa.json
Normal file
8
template/chatqa.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"System:",
|
||||||
|
"User:",
|
||||||
|
"Assistant:",
|
||||||
|
"<|begin_of_text|>"
|
||||||
|
]
|
||||||
|
}
|
7
template/codellama-70b-instruct.json
Normal file
7
template/codellama-70b-instruct.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"Source:",
|
||||||
|
"Destination:",
|
||||||
|
"<step>"
|
||||||
|
]
|
||||||
|
}
|
6
template/falcon-instruct.json
Normal file
6
template/falcon-instruct.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"User:",
|
||||||
|
"Assistant:"
|
||||||
|
]
|
||||||
|
}
|
6
template/gemma-instruct.json
Normal file
6
template/gemma-instruct.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<start_of_turn>",
|
||||||
|
"<end_of_turn>"
|
||||||
|
]
|
||||||
|
}
|
7
template/granite-instruct.json
Normal file
7
template/granite-instruct.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"System:",
|
||||||
|
"Question:",
|
||||||
|
"Answer:"
|
||||||
|
]
|
||||||
|
}
|
8
template/llama2-chat.json
Normal file
8
template/llama2-chat.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"[INST]",
|
||||||
|
"[/INST]",
|
||||||
|
"<<SYS>>",
|
||||||
|
"<</SYS>>"
|
||||||
|
]
|
||||||
|
}
|
7
template/llama3-instruct.json
Normal file
7
template/llama3-instruct.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|start_header_id|>",
|
||||||
|
"<|end_header_id|>",
|
||||||
|
"<|eot_id|>"
|
||||||
|
]
|
||||||
|
}
|
6
template/magicoder.json
Normal file
6
template/magicoder.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"@@ Instruction",
|
||||||
|
"@@ Response"
|
||||||
|
]
|
||||||
|
}
|
6
template/mistral-instruct.json
Normal file
6
template/mistral-instruct.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|im_start|>",
|
||||||
|
"<|im_end|>"
|
||||||
|
]
|
||||||
|
}
|
5
template/openchat.json
Normal file
5
template/openchat.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|end_of_turn|>"
|
||||||
|
]
|
||||||
|
}
|
8
template/phi-3.json
Normal file
8
template/phi-3.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|end|>",
|
||||||
|
"<|system|>",
|
||||||
|
"<|user|>",
|
||||||
|
"<|assistant|>"
|
||||||
|
]
|
||||||
|
}
|
7
template/solar-instruct.json
Normal file
7
template/solar-instruct.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"### System:",
|
||||||
|
"### User:",
|
||||||
|
"### Assistant"
|
||||||
|
]
|
||||||
|
}
|
7
template/starcoder2-instruct.json
Normal file
7
template/starcoder2-instruct.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"### Instruction",
|
||||||
|
"### Response",
|
||||||
|
"<|endoftext|>"
|
||||||
|
]
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ import (
|
||||||
var indexBytes []byte
|
var indexBytes []byte
|
||||||
|
|
||||||
//go:embed *.gotmpl
|
//go:embed *.gotmpl
|
||||||
|
//go:embed *.json
|
||||||
var templatesFS embed.FS
|
var templatesFS embed.FS
|
||||||
|
|
||||||
var templatesOnce = sync.OnceValues(func() ([]*named, error) {
|
var templatesOnce = sync.OnceValues(func() ([]*named, error) {
|
||||||
|
@ -39,6 +40,15 @@ var templatesOnce = sync.OnceValues(func() ([]*named, error) {
|
||||||
|
|
||||||
// normalize line endings
|
// normalize line endings
|
||||||
t.Bytes = bytes.ReplaceAll(bts, []byte("\r\n"), []byte("\n"))
|
t.Bytes = bytes.ReplaceAll(bts, []byte("\r\n"), []byte("\n"))
|
||||||
|
|
||||||
|
params, err := templatesFS.ReadFile(t.Name + ".json")
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(params, &t.Parameters); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return templates, nil
|
return templates, nil
|
||||||
|
@ -48,6 +58,10 @@ type named struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Template string `json:"template"`
|
Template string `json:"template"`
|
||||||
Bytes []byte
|
Bytes []byte
|
||||||
|
|
||||||
|
Parameters *struct {
|
||||||
|
Stop []string `json:"stop"`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t named) Reader() io.Reader {
|
func (t named) Reader() io.Reader {
|
||||||
|
|
6
template/vicuna.json
Normal file
6
template/vicuna.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"USER:",
|
||||||
|
"ASSISTANT:"
|
||||||
|
]
|
||||||
|
}
|
8
template/zephyr.json
Normal file
8
template/zephyr.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"stop": [
|
||||||
|
"<|system|>",
|
||||||
|
"</s>",
|
||||||
|
"<|user|>",
|
||||||
|
"<|assistant|>"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in a new issue