ollama

Форк
0
/
interactive_test.go 
116 строк · 3.5 Кб
1
package cmd
2

3
import (
4
	"bytes"
5
	"testing"
6
	"text/template"
7

8
	"github.com/stretchr/testify/assert"
9

10
	"github.com/jmorganca/ollama/api"
11
)
12

13
func TestExtractFilenames(t *testing.T) {
14
	// Unix style paths
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)
19
	assert.Len(t, res, 5)
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")
27

28
	// Windows style paths
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
35
`
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:")
55
}
56

57
func TestModelfileBuilder(t *testing.T) {
58
	opts := runOptions{
59
		Model:    "hork",
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."},
65
		},
66
		Options: map[string]interface{}{},
67
	}
68

69
	opts.Options["temperature"] = 0.9
70
	opts.Options["seed"] = 42
71
	opts.Options["penalize_newline"] = false
72
	opts.Options["stop"] = []string{"hi", "there"}
73

74
	mf := buildModelfile(opts)
75
	expectedModelfile := `FROM {{.Model}}
76
SYSTEM """{{.System}}"""
77
TEMPLATE """{{.Template}}"""
78
PARAMETER penalize_newline false
79
PARAMETER seed 42
80
PARAMETER stop [hi there]
81
PARAMETER temperature 0.9
82

83
MESSAGE user """Hey there hork!"""
84
MESSAGE assistant """Yes it is true, I am half horse, half shark."""
85
`
86

87
	tmpl, err := template.New("").Parse(expectedModelfile)
88
	assert.Nil(t, err)
89

90
	var buf bytes.Buffer
91
	err = tmpl.Execute(&buf, opts)
92
	assert.Nil(t, err)
93
	assert.Equal(t, buf.String(), mf)
94

95
	opts.ParentModel = "horseshark"
96
	mf = buildModelfile(opts)
97
	expectedModelfile = `FROM {{.ParentModel}}
98
SYSTEM """{{.System}}"""
99
TEMPLATE """{{.Template}}"""
100
PARAMETER penalize_newline false
101
PARAMETER seed 42
102
PARAMETER stop [hi there]
103
PARAMETER temperature 0.9
104

105
MESSAGE user """Hey there hork!"""
106
MESSAGE assistant """Yes it is true, I am half horse, half shark."""
107
`
108

109
	tmpl, err = template.New("").Parse(expectedModelfile)
110
	assert.Nil(t, err)
111

112
	var parentBuf bytes.Buffer
113
	err = tmpl.Execute(&parentBuf, opts)
114
	assert.Nil(t, err)
115
	assert.Equal(t, parentBuf.String(), mf)
116
}
117

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.