interactive_test.go 3.38 KB
Newer Older
1
2
3
4
5
package cmd

import (
	"testing"

Michael Yang's avatar
Michael Yang committed
6
	"github.com/google/go-cmp/cmp"
7
	"github.com/stretchr/testify/assert"
8

9
	"github.com/ollama/ollama/api"
10
11
12
13
14
)

func TestExtractFilenames(t *testing.T) {
	// Unix style paths
	input := ` some preamble 
15
16
 ./relative\ path/one.png inbetween1 ./not a valid two.jpg inbetween2 ./1.svg
/unescaped space /three.jpeg inbetween3 /valid\ path/dir/four.png "./quoted with spaces/five.JPG`
17
18
19
20
21
22
	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")
23
	assert.Contains(t, res[4], "five.JPG")
24
	assert.NotContains(t, res[4], '"')
25
26
	assert.NotContains(t, res, "inbetween1")
	assert.NotContains(t, res, "./1.svg")
27
28
29
30
31

	// 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
32
33
34
./relative\ path/five.JPG inbetween5 "./relative with/spaces/six.png inbetween6
d:\path with\spaces\seven.JPEG inbetween7 c:\users\jdoe\eight.png inbetween8 
 d:\program files\someplace\nine.png inbetween9 "E:\program files\someplace\ten.PNG some ending
35
36
37
`
	res = extractFileNames(input)
	assert.Len(t, res, 10)
38
	assert.NotContains(t, res, "inbetween2")
39
40
41
42
43
44
	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")
45
	assert.Contains(t, res[4], "five.JPG")
46
	assert.Contains(t, res[5], "six.png")
47
	assert.Contains(t, res[6], "seven.JPEG")
48
49
50
51
52
	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:")
53
	assert.Contains(t, res[9], "ten.PNG")
54
55
	assert.Contains(t, res[9], "E:")
}
56
57
58

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

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

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

Michael Yang's avatar
Michael Yang committed
91
92
93
94
	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
95
96
PARAMETER penalize_newline false
PARAMETER seed 42
Michael Yang's avatar
Michael Yang committed
97
98
PARAMETER stop hi
PARAMETER stop there
99
PARAMETER temperature 0.9
Michael Yang's avatar
Michael Yang committed
100
101
MESSAGE user Hey there hork!
MESSAGE assistant Yes it is true, I am half horse, half shark.
102
`
Michael Yang's avatar
Michael Yang committed
103
104
105
106
107
		actual := buildModelfile(opts)
		if diff := cmp.Diff(expect, actual); diff != "" {
			t.Errorf("mismatch (-want +got):\n%s", diff)
		}
	})
108
}