-
Notifications
You must be signed in to change notification settings - Fork 2
/
chat_completions_builder.go
152 lines (127 loc) · 4.42 KB
/
chat_completions_builder.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package moonshot
type IChatCompletionsBuilder interface {
AddUserContent(content string) IChatCompletionsBuilder
AddSystemContent(content string) IChatCompletionsBuilder
AddAssistantContent(content string, partialMode ...bool) IChatCompletionsBuilder
AddPrompt(prompt string) IChatCompletionsBuilder
AddMessage(message *ChatCompletionsMessage) IChatCompletionsBuilder
SetModel(model ChatCompletionsModelID) IChatCompletionsBuilder
SetTemperature(temperature float64) IChatCompletionsBuilder
SetStream(enable bool) IChatCompletionsBuilder
SetMaxTokens(num int) IChatCompletionsBuilder
SetTopP(num float64) IChatCompletionsBuilder
SetN(num int) IChatCompletionsBuilder
SetPresencePenalty(num float64) IChatCompletionsBuilder
SetFrequencyPenalty(num float64) IChatCompletionsBuilder
SetStop(stop []string) IChatCompletionsBuilder
ToRequest() *ChatCompletionsRequest
}
type chatCompletionsBuilder struct {
req *ChatCompletionsRequest
}
// NewChatCompletionsBuilder creates a new chat completions builder, or with the given request
func NewChatCompletionsBuilder(req ...ChatCompletionsRequest) IChatCompletionsBuilder {
builder := &chatCompletionsBuilder{
req: &ChatCompletionsRequest{},
}
if len(req) > 0 {
builder.req = &req[0]
}
builder.preCheck()
return builder
}
func (c *chatCompletionsBuilder) preCheck() {
if c.req.Messages == nil {
c.req.Messages = make([]*ChatCompletionsMessage, 0)
}
if c.req.Model == "" {
c.req.Model = ModelMoonshotV18K
}
}
// AddUserContent add a message with the role of user
func (c *chatCompletionsBuilder) AddUserContent(content string) IChatCompletionsBuilder {
c.req.Messages = append(c.req.Messages, &ChatCompletionsMessage{
Role: RoleUser,
Content: content,
})
return c
}
// AddSystemContent add a message with the role of system
func (c *chatCompletionsBuilder) AddSystemContent(content string) IChatCompletionsBuilder {
c.req.Messages = append(c.req.Messages, &ChatCompletionsMessage{
Role: RoleSystem,
Content: content,
})
return c
}
// AddAssistantContent add a message with the role of assistant, and partial mode
func (c *chatCompletionsBuilder) AddAssistantContent(content string, partialMode ...bool) IChatCompletionsBuilder {
var partial bool
if len(partialMode) == 1 {
partial = partialMode[0]
}
c.req.Messages = append(c.req.Messages, &ChatCompletionsMessage{
Role: RoleAssistant,
Content: content,
Partial: partial,
})
return c
}
// AddPrompt is an alias of AddSystemContent
func (c *chatCompletionsBuilder) AddPrompt(prompt string) IChatCompletionsBuilder {
return c.AddSystemContent(prompt)
}
// AddMessage add ChatCompletionsMessage to the request
func (c *chatCompletionsBuilder) AddMessage(message *ChatCompletionsMessage) IChatCompletionsBuilder {
c.req.Messages = append(c.req.Messages, message)
return c
}
// SetModel sets the model of the request
func (c *chatCompletionsBuilder) SetModel(model ChatCompletionsModelID) IChatCompletionsBuilder {
c.req.Model = model
return c
}
// SetTemperature sets the temperature of the request
func (c *chatCompletionsBuilder) SetTemperature(temperature float64) IChatCompletionsBuilder {
c.req.Temperature = temperature
return c
}
// SetMaxTokens sets the max tokens of the request
func (c *chatCompletionsBuilder) SetMaxTokens(num int) IChatCompletionsBuilder {
c.req.MaxTokens = num
return c
}
// SetTopP sets the top p of the request
func (c *chatCompletionsBuilder) SetTopP(num float64) IChatCompletionsBuilder {
c.req.TopP = num
return c
}
// SetN sets the n of the request
func (c *chatCompletionsBuilder) SetN(num int) IChatCompletionsBuilder {
c.req.N = num
return c
}
// SetPresencePenalty sets the presence penalty of the request
func (c *chatCompletionsBuilder) SetPresencePenalty(num float64) IChatCompletionsBuilder {
c.req.PresencePenalty = num
return c
}
// SetFrequencyPenalty sets the frequency penalty of the request
func (c *chatCompletionsBuilder) SetFrequencyPenalty(num float64) IChatCompletionsBuilder {
c.req.FrequencyPenalty = num
return c
}
// SetStop sets the stop of the request
func (c *chatCompletionsBuilder) SetStop(stop []string) IChatCompletionsBuilder {
c.req.Stop = stop
return c
}
// SetStream sets the stream of the request
func (c *chatCompletionsBuilder) SetStream(enable bool) IChatCompletionsBuilder {
c.req.Stream = enable
return c
}
// ToRequest returns the ChatCompletionsRequest
func (c *chatCompletionsBuilder) ToRequest() *ChatCompletionsRequest {
return c.req
}