interactive_test.go 3.33 KB
Newer Older
mashun1's avatar
v1  
mashun1 committed
1
2
3
4
5
package cmd

import (
	"testing"

xuxzh1's avatar
init  
xuxzh1 committed
6
	"github.com/google/go-cmp/cmp"
mashun1's avatar
v1  
mashun1 committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
	"github.com/stretchr/testify/assert"

	"github.com/ollama/ollama/api"
)

func TestExtractFilenames(t *testing.T) {
	// Unix style paths
	input := ` some preamble 
 ./relative\ path/one.png inbetween1 ./not a valid two.jpg inbetween2
/unescaped space /three.jpeg inbetween3 /valid\ path/dir/four.png "./quoted with spaces/five.svg`
	res := extractFileNames(input)
	assert.Len(t, res, 5)
	assert.Contains(t, res[0], "one.png")
	assert.Contains(t, res[1], "two.jpg")
	assert.Contains(t, res[2], "three.jpeg")
	assert.Contains(t, res[3], "four.png")
	assert.Contains(t, res[4], "five.svg")
	assert.NotContains(t, res[4], '"')
	assert.NotContains(t, res, "inbtween")

	// Windows style paths
	input = ` some preamble
 c:/users/jdoe/one.png inbetween1 c:/program files/someplace/two.jpg inbetween2 
 /absolute/nospace/three.jpeg inbetween3 /absolute/with space/four.png inbetween4
./relative\ path/five.svg inbetween5 "./relative with/spaces/six.png inbetween6
d:\path with\spaces\seven.svg inbetween7 c:\users\jdoe\eight.png inbetween8 
 d:\program files\someplace\nine.png inbetween9 "E:\program files\someplace\ten.svg some ending
`
	res = extractFileNames(input)
	assert.Len(t, res, 10)
	assert.NotContains(t, res, "inbtween")
	assert.Contains(t, res[0], "one.png")
	assert.Contains(t, res[0], "c:")
	assert.Contains(t, res[1], "two.jpg")
	assert.Contains(t, res[1], "c:")
	assert.Contains(t, res[2], "three.jpeg")
	assert.Contains(t, res[3], "four.png")
	assert.Contains(t, res[4], "five.svg")
	assert.Contains(t, res[5], "six.png")
	assert.Contains(t, res[6], "seven.svg")
	assert.Contains(t, res[6], "d:")
	assert.Contains(t, res[7], "eight.png")
	assert.Contains(t, res[7], "c:")
	assert.Contains(t, res[8], "nine.png")
	assert.Contains(t, res[8], "d:")
	assert.Contains(t, res[9], "ten.svg")
	assert.Contains(t, res[9], "E:")
}

func TestModelfileBuilder(t *testing.T) {
	opts := runOptions{
xuxzh1's avatar
init  
xuxzh1 committed
58
59
		Model:  "hork",
		System: "You are part horse and part shark, but all hork. Do horklike things",
mashun1's avatar
v1  
mashun1 committed
60
61
62
63
		Messages: []api.Message{
			{Role: "user", Content: "Hey there hork!"},
			{Role: "assistant", Content: "Yes it is true, I am half horse, half shark."},
		},
xuxzh1's avatar
init  
xuxzh1 committed
64
65
66
67
68
69
		Options: map[string]any{
			"temperature":      0.9,
			"seed":             42,
			"penalize_newline": false,
			"stop":             []string{"hi", "there"},
		},
mashun1's avatar
v1  
mashun1 committed
70
71
	}

xuxzh1's avatar
init  
xuxzh1 committed
72
73
74
	t.Run("model", func(t *testing.T) {
		expect := `FROM hork
SYSTEM You are part horse and part shark, but all hork. Do horklike things
mashun1's avatar
v1  
mashun1 committed
75
76
PARAMETER penalize_newline false
PARAMETER seed 42
xuxzh1's avatar
init  
xuxzh1 committed
77
78
PARAMETER stop hi
PARAMETER stop there
mashun1's avatar
v1  
mashun1 committed
79
PARAMETER temperature 0.9
xuxzh1's avatar
init  
xuxzh1 committed
80
81
MESSAGE user Hey there hork!
MESSAGE assistant Yes it is true, I am half horse, half shark.
mashun1's avatar
v1  
mashun1 committed
82
83
`

xuxzh1's avatar
init  
xuxzh1 committed
84
85
86
87
88
		actual := buildModelfile(opts)
		if diff := cmp.Diff(expect, actual); diff != "" {
			t.Errorf("mismatch (-want +got):\n%s", diff)
		}
	})
mashun1's avatar
v1  
mashun1 committed
89

xuxzh1's avatar
init  
xuxzh1 committed
90
91
92
93
	t.Run("parent model", func(t *testing.T) {
		opts.ParentModel = "horseshark"
		expect := `FROM horseshark
SYSTEM You are part horse and part shark, but all hork. Do horklike things
mashun1's avatar
v1  
mashun1 committed
94
95
PARAMETER penalize_newline false
PARAMETER seed 42
xuxzh1's avatar
init  
xuxzh1 committed
96
97
PARAMETER stop hi
PARAMETER stop there
mashun1's avatar
v1  
mashun1 committed
98
PARAMETER temperature 0.9
xuxzh1's avatar
init  
xuxzh1 committed
99
100
MESSAGE user Hey there hork!
MESSAGE assistant Yes it is true, I am half horse, half shark.
mashun1's avatar
v1  
mashun1 committed
101
`
xuxzh1's avatar
init  
xuxzh1 committed
102
103
104
105
106
		actual := buildModelfile(opts)
		if diff := cmp.Diff(expect, actual); diff != "" {
			t.Errorf("mismatch (-want +got):\n%s", diff)
		}
	})
mashun1's avatar
v1  
mashun1 committed
107
}