Skip to content

Commit 140bed5

Browse files
committed
fix: nil pointer dereference error when carrying an image to a conversation (coaidev#221)
1 parent 980bb2c commit 140bed5

File tree

7 files changed

+48
-41
lines changed

7 files changed

+48
-41
lines changed

adapter/common/types.go

+27-18
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,37 @@ import (
66
)
77

88
type RequestProps struct {
9-
MaxRetries *int
10-
Current int
11-
Group string
12-
13-
Proxy globals.ProxyConfig
9+
MaxRetries *int `json:"-"`
10+
Current int `json:"-"`
11+
Group string `json:"-"`
12+
Proxy globals.ProxyConfig `json:"-"`
1413
}
1514

1615
type ChatProps struct {
1716
RequestProps
1817

19-
Model string
20-
OriginalModel string
18+
Model string `json:"model,omitempty"`
19+
OriginalModel string `json:"-"`
20+
21+
Message []globals.Message `json:"messages,omitempty"`
22+
MaxTokens *int `json:"max_tokens,omitempty"`
23+
PresencePenalty *float32 `json:"presence_penalty,omitempty"`
24+
FrequencyPenalty *float32 `json:"frequency_penalty,omitempty"`
25+
RepetitionPenalty *float32 `json:"repetition_penalty,omitempty"`
26+
Temperature *float32 `json:"temperature,omitempty"`
27+
TopP *float32 `json:"top_p,omitempty"`
28+
TopK *int `json:"top_k,omitempty"`
29+
Tools *globals.FunctionTools `json:"tools,omitempty"`
30+
ToolChoice *interface{} `json:"tool_choice,omitempty"`
31+
Buffer *utils.Buffer `json:"-"`
32+
}
33+
34+
func (c *ChatProps) SetupBuffer(buf *utils.Buffer) {
35+
buf.SetPrompts(c)
36+
c.Buffer = buf
37+
}
2138

22-
Message []globals.Message
23-
MaxTokens *int
24-
PresencePenalty *float32
25-
FrequencyPenalty *float32
26-
RepetitionPenalty *float32
27-
Temperature *float32
28-
TopP *float32
29-
TopK *int
30-
Tools *globals.FunctionTools
31-
ToolChoice *interface{}
32-
Buffer utils.Buffer
39+
func CreateChatProps(props *ChatProps, buffer *utils.Buffer) *ChatProps {
40+
props.SetupBuffer(buffer)
41+
return props
3342
}

addition/generation/prompt.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package generation
22

33
import (
4-
"chat/adapter/common"
4+
adaptercommon "chat/adapter/common"
55
"chat/admin"
66
"chat/channel"
77
"chat/globals"
@@ -17,17 +17,16 @@ func CreateGeneration(group, model, prompt, path string, hook func(buffer *utils
1717
message := GenerateMessage(prompt)
1818
buffer := utils.NewBuffer(model, message, channel.ChargeInstance.GetCharge(model))
1919

20-
err := channel.NewChatRequest(group, &adaptercommon.ChatProps{
20+
err := channel.NewChatRequest(group, adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
2121
OriginalModel: model,
2222
Message: message,
23-
Buffer: *buffer,
24-
}, func(data *globals.Chunk) error {
23+
}, buffer), func(data *globals.Chunk) error {
2524
buffer.WriteChunk(data)
2625
hook(buffer, data.Content)
2726
return nil
2827
})
2928

30-
admin.AnalysisRequest(model, buffer, err)
29+
admin.AnalyseRequest(model, buffer, err)
3130
if err != nil {
3231
return err
3332
}

admin/statistic.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import (
44
"chat/adapter"
55
"chat/connection"
66
"chat/utils"
7-
"github.com/go-redis/redis/v8"
87
"time"
8+
9+
"github.com/go-redis/redis/v8"
910
)
1011

1112
func IncrErrorRequest(cache *redis.Client) {
@@ -25,7 +26,7 @@ func IncrModelRequest(cache *redis.Client, model string, tokens int64) {
2526
utils.IncrWithExpire(cache, getModelFormat(getDay(), model), tokens, time.Hour*24*7*2)
2627
}
2728

28-
func AnalysisRequest(model string, buffer *utils.Buffer, err error) {
29+
func AnalyseRequest(model string, buffer *utils.Buffer, err error) {
2930
instance := connection.Cache
3031

3132
if adapter.IsAvailableError(err) {

manager/chat.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func createChatTask(
104104
hit, err := channel.NewChatRequestWithCache(
105105
cache, buffer,
106106
auth.GetGroup(db, user),
107-
&adaptercommon.ChatProps{
107+
adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
108108
Model: model,
109109
Message: segment,
110110
MaxTokens: instance.GetMaxTokens(),
@@ -114,7 +114,7 @@ func createChatTask(
114114
PresencePenalty: instance.GetPresencePenalty(),
115115
FrequencyPenalty: instance.GetFrequencyPenalty(),
116116
RepetitionPenalty: instance.GetRepetitionPenalty(),
117-
},
117+
}, buffer),
118118

119119
// the function to handle the chunk data
120120
func(data *globals.Chunk) error {
@@ -168,6 +168,7 @@ func createChatTask(
168168
interruptSignal <- err
169169
return hit, nil
170170
}
171+
171172
case signal := <-stopSignal:
172173
// if stop signal is received
173174
if signal {
@@ -219,7 +220,7 @@ func ChatHandler(conn *Connection, user *auth.User, instance *conversation.Conve
219220
buffer := utils.NewBuffer(model, segment, channel.ChargeInstance.GetCharge(model))
220221
hit, err := createChatTask(conn, user, buffer, db, cache, model, instance, segment, plan)
221222

222-
admin.AnalysisRequest(model, buffer, err)
223+
admin.AnalyseRequest(model, buffer, err)
223224
if adapter.IsAvailableError(err) {
224225
globals.Warn(fmt.Sprintf("%s (model: %s, client: %s)", err, model, conn.GetCtx().ClientIP()))
225226

manager/chat_completions.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func ChatRelayAPI(c *gin.Context) {
9494
}
9595

9696
func getChatProps(form RelayForm, messages []globals.Message, buffer *utils.Buffer) *adaptercommon.ChatProps {
97-
return &adaptercommon.ChatProps{
97+
return adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
9898
Model: form.Model,
9999
Message: messages,
100100
MaxTokens: form.MaxTokens,
@@ -106,8 +106,7 @@ func getChatProps(form RelayForm, messages []globals.Message, buffer *utils.Buff
106106
TopK: form.TopK,
107107
Tools: form.Tools,
108108
ToolChoice: form.ToolChoice,
109-
Buffer: *buffer,
110-
}
109+
}, buffer)
111110
}
112111

113112
func sendTranshipmentResponse(c *gin.Context, form RelayForm, messages []globals.Message, id string, created int64, user *auth.User, plan bool) {
@@ -120,7 +119,7 @@ func sendTranshipmentResponse(c *gin.Context, form RelayForm, messages []globals
120119
return nil
121120
})
122121

123-
admin.AnalysisRequest(form.Model, buffer, err)
122+
admin.AnalyseRequest(form.Model, buffer, err)
124123
if err != nil {
125124
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
126125
globals.Warn(fmt.Sprintf("error from chat request api: %s (instance: %s, client: %s)", err, form.Model, c.ClientIP()))
@@ -235,7 +234,7 @@ func sendStreamTranshipmentResponse(c *gin.Context, form RelayForm, messages []g
235234
},
236235
)
237236

238-
admin.AnalysisRequest(form.Model, buffer, err)
237+
admin.AnalyseRequest(form.Model, buffer, err)
239238
if err != nil {
240239
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
241240
globals.Warn(fmt.Sprintf("error from chat request api: %s (instance: %s, client: %s)", err.Error(), form.Model, c.ClientIP()))

manager/completions.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,17 @@ func NativeChatHandler(c *gin.Context, user *auth.User, model string, message []
3838
hit, err := channel.NewChatRequestWithCache(
3939
cache, buffer,
4040
auth.GetGroup(db, user),
41-
&adaptercommon.ChatProps{
41+
adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
4242
Model: model,
4343
Message: segment,
44-
Buffer: *buffer,
45-
},
44+
}, buffer),
4645
func(resp *globals.Chunk) error {
4746
buffer.WriteChunk(resp)
4847
return nil
4948
},
5049
)
5150

52-
admin.AnalysisRequest(model, buffer, err)
51+
admin.AnalyseRequest(model, buffer, err)
5352
if err != nil {
5453
auth.RevertSubscriptionUsage(db, cache, user, model)
5554
return err.Error(), 0

manager/images.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,11 @@ func ImagesRelayAPI(c *gin.Context) {
6464
}
6565

6666
func getImageProps(form RelayImageForm, messages []globals.Message, buffer *utils.Buffer) *adaptercommon.ChatProps {
67-
return &adaptercommon.ChatProps{
67+
return adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
6868
Model: form.Model,
6969
Message: messages,
7070
MaxTokens: utils.ToPtr(-1),
71-
Buffer: *buffer,
72-
}
71+
}, buffer)
7372
}
7473

7574
func getUrlFromBuffer(buffer *utils.Buffer) string {
@@ -100,7 +99,7 @@ func createRelayImageObject(c *gin.Context, form RelayImageForm, prompt string,
10099
return nil
101100
})
102101

103-
admin.AnalysisRequest(form.Model, buffer, err)
102+
admin.AnalyseRequest(form.Model, buffer, err)
104103
if err != nil {
105104
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
106105
globals.Warn(fmt.Sprintf("error from chat request api: %s (instance: %s, client: %s)", err, form.Model, c.ClientIP()))

0 commit comments

Comments
 (0)