8
"github.com/stretchr/testify/assert"
10
"github.com/jmorganca/ollama/api"
13
func TestExtractFilenames(t *testing.T) {
15
input := ` some preamble
16
./relative\ path/one.png inbetween1 ./not a valid two.jpg inbetween2
17
/unescaped space /three.jpeg inbetween3 /valid\ path/dir/four.png "./quoted with spaces/five.svg`
18
res := extractFileNames(input)
20
assert.Contains(t, res[0], "one.png")
21
assert.Contains(t, res[1], "two.jpg")
22
assert.Contains(t, res[2], "three.jpeg")
23
assert.Contains(t, res[3], "four.png")
24
assert.Contains(t, res[4], "five.svg")
25
assert.NotContains(t, res[4], '"')
26
assert.NotContains(t, res, "inbtween")
29
input = ` some preamble
30
c:/users/jdoe/one.png inbetween1 c:/program files/someplace/two.jpg inbetween2
31
/absolute/nospace/three.jpeg inbetween3 /absolute/with space/four.png inbetween4
32
./relative\ path/five.svg inbetween5 "./relative with/spaces/six.png inbetween6
33
d:\path with\spaces\seven.svg inbetween7 c:\users\jdoe\eight.png inbetween8
34
d:\program files\someplace\nine.png inbetween9 "E:\program files\someplace\ten.svg some ending
36
res = extractFileNames(input)
37
assert.Len(t, res, 10)
38
assert.NotContains(t, res, "inbtween")
39
assert.Contains(t, res[0], "one.png")
40
assert.Contains(t, res[0], "c:")
41
assert.Contains(t, res[1], "two.jpg")
42
assert.Contains(t, res[1], "c:")
43
assert.Contains(t, res[2], "three.jpeg")
44
assert.Contains(t, res[3], "four.png")
45
assert.Contains(t, res[4], "five.svg")
46
assert.Contains(t, res[5], "six.png")
47
assert.Contains(t, res[6], "seven.svg")
48
assert.Contains(t, res[6], "d:")
49
assert.Contains(t, res[7], "eight.png")
50
assert.Contains(t, res[7], "c:")
51
assert.Contains(t, res[8], "nine.png")
52
assert.Contains(t, res[8], "d:")
53
assert.Contains(t, res[9], "ten.svg")
54
assert.Contains(t, res[9], "E:")
57
func TestModelfileBuilder(t *testing.T) {
60
System: "You are part horse and part shark, but all hork. Do horklike things",
61
Template: "This is a template.",
62
Messages: []api.Message{
63
{Role: "user", Content: "Hey there hork!"},
64
{Role: "assistant", Content: "Yes it is true, I am half horse, half shark."},
66
Options: map[string]interface{}{},
69
opts.Options["temperature"] = 0.9
70
opts.Options["seed"] = 42
71
opts.Options["penalize_newline"] = false
72
opts.Options["stop"] = []string{"hi", "there"}
74
mf := buildModelfile(opts)
75
expectedModelfile := `FROM {{.Model}}
76
SYSTEM """{{.System}}"""
77
TEMPLATE """{{.Template}}"""
78
PARAMETER penalize_newline false
80
PARAMETER stop [hi there]
81
PARAMETER temperature 0.9
83
MESSAGE user """Hey there hork!"""
84
MESSAGE assistant """Yes it is true, I am half horse, half shark."""
87
tmpl, err := template.New("").Parse(expectedModelfile)
91
err = tmpl.Execute(&buf, opts)
93
assert.Equal(t, buf.String(), mf)
95
opts.ParentModel = "horseshark"
96
mf = buildModelfile(opts)
97
expectedModelfile = `FROM {{.ParentModel}}
98
SYSTEM """{{.System}}"""
99
TEMPLATE """{{.Template}}"""
100
PARAMETER penalize_newline false
102
PARAMETER stop [hi there]
103
PARAMETER temperature 0.9
105
MESSAGE user """Hey there hork!"""
106
MESSAGE assistant """Yes it is true, I am half horse, half shark."""
109
tmpl, err = template.New("").Parse(expectedModelfile)
112
var parentBuf bytes.Buffer
113
err = tmpl.Execute(&parentBuf, opts)
115
assert.Equal(t, parentBuf.String(), mf)