interactive_test.go 3.33 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
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
)

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:")
}
55
56
57

func TestModelfileBuilder(t *testing.T) {
	opts := runOptions{
Michael Yang's avatar
Michael Yang committed
58
59
		Model:  "hork",
		System: "You are part horse and part shark, but all hork. Do horklike things",
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."},
		},
Michael Yang's avatar
Michael Yang committed
64
65
66
67
68
69
		Options: map[string]any{
			"temperature":      0.9,
			"seed":             42,
			"penalize_newline": false,
			"stop":             []string{"hi", "there"},
		},
70
71
	}

Michael Yang's avatar
Michael Yang 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
75
76
PARAMETER penalize_newline false
PARAMETER seed 42
Michael Yang's avatar
Michael Yang committed
77
78
PARAMETER stop hi
PARAMETER stop there
79
PARAMETER temperature 0.9
Michael Yang's avatar
Michael Yang committed
80
81
MESSAGE user Hey there hork!
MESSAGE assistant Yes it is true, I am half horse, half shark.
82
83
`

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

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