-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathtokens_test.go
130 lines (124 loc) · 3.09 KB
/
tokens_test.go
1
2
3
4
5
6
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package deepseek_test
import (
"testing"
"github.com/cohesion-org/deepseek-go"
"github.com/cohesion-org/deepseek-go/constants"
"github.com/stretchr/testify/assert"
)
func TestEstimateTokenCount(t *testing.T) {
tests := []struct {
name string
text string
minCount int // Since these are estimates, we test for minimum expected tokens
}{
{
name: "english text",
text: "Hello, world!",
minCount: 3, // At least 3 tokens for "Hello", ",", "world!"
},
{
name: "chinese text",
text: "你好世界",
minCount: 2, // At least 2 tokens for 4 Chinese characters
},
{
name: "mixed text",
text: "Hello 世界!",
minCount: 2, // At least 2 tokens
},
{
name: "empty text",
text: "",
minCount: 1, // Minimum 1 token
},
{
name: "numbers and symbols",
text: "123 !@#",
minCount: 2, // At least 2 tokens
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
estimate := deepseek.EstimateTokenCount(tt.text)
assert.NotNil(t, estimate)
assert.GreaterOrEqual(t, estimate.EstimatedTokens, tt.minCount)
})
}
}
func TestEstimateTokensFromMessages(t *testing.T) {
tests := []struct {
name string
request *deepseek.ChatCompletionRequest
minCount int // Since these are estimates, we test for minimum expected tokens
}{
{
name: "single message",
request: &deepseek.ChatCompletionRequest{
Messages: []deepseek.ChatCompletionMessage{
{
Role: constants.ChatMessageRoleUser,
Content: "Hello!",
},
},
},
minCount: 4, // At least 4 tokens (2 for role + content tokens)
},
{
name: "multiple messages",
request: &deepseek.ChatCompletionRequest{
Messages: []deepseek.ChatCompletionMessage{
{
Role: constants.ChatMessageRoleSystem,
Content: "You are a helpful assistant.",
},
{
Role: constants.ChatMessageRoleUser,
Content: "Hi!",
},
},
},
minCount: 8, // At least 8 tokens (2 per role + content tokens)
},
{
name: "with function definition",
request: &deepseek.ChatCompletionRequest{
Messages: []deepseek.ChatCompletionMessage{
{
Role: constants.ChatMessageRoleUser,
Content: "Get weather",
},
},
Tools: []deepseek.Tool{
{
Function: deepseek.Function{
Name: "get_weather",
Description: "Get weather information",
Parameters: &deepseek.FunctionParameters{
Type: "object",
Properties: map[string]interface{}{
"location": "string",
},
Required: []string{"location"},
},
},
},
},
},
minCount: 12, // At least 12 tokens (message + function definition tokens)
},
{
name: "empty request",
request: &deepseek.ChatCompletionRequest{
Messages: []deepseek.ChatCompletionMessage{},
},
minCount: 0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
estimate := deepseek.EstimateTokensFromMessages(tt.request)
assert.NotNil(t, estimate)
assert.GreaterOrEqual(t, estimate.EstimatedTokens, tt.minCount)
})
}
}