mirror of
https://github.com/coaidev/coai.git
synced 2025-05-19 04:50:14 +09:00
fix: nil pointer dereference
error when carrying an image to a conversation (#221)
This commit is contained in:
parent
980bb2c101
commit
140bed53f9
@ -6,28 +6,37 @@ import (
|
||||
)
|
||||
|
||||
type RequestProps struct {
|
||||
MaxRetries *int
|
||||
Current int
|
||||
Group string
|
||||
|
||||
Proxy globals.ProxyConfig
|
||||
MaxRetries *int `json:"-"`
|
||||
Current int `json:"-"`
|
||||
Group string `json:"-"`
|
||||
Proxy globals.ProxyConfig `json:"-"`
|
||||
}
|
||||
|
||||
type ChatProps struct {
|
||||
RequestProps
|
||||
|
||||
Model string
|
||||
OriginalModel string
|
||||
Model string `json:"model,omitempty"`
|
||||
OriginalModel string `json:"-"`
|
||||
|
||||
Message []globals.Message
|
||||
MaxTokens *int
|
||||
PresencePenalty *float32
|
||||
FrequencyPenalty *float32
|
||||
RepetitionPenalty *float32
|
||||
Temperature *float32
|
||||
TopP *float32
|
||||
TopK *int
|
||||
Tools *globals.FunctionTools
|
||||
ToolChoice *interface{}
|
||||
Buffer utils.Buffer
|
||||
Message []globals.Message `json:"messages,omitempty"`
|
||||
MaxTokens *int `json:"max_tokens,omitempty"`
|
||||
PresencePenalty *float32 `json:"presence_penalty,omitempty"`
|
||||
FrequencyPenalty *float32 `json:"frequency_penalty,omitempty"`
|
||||
RepetitionPenalty *float32 `json:"repetition_penalty,omitempty"`
|
||||
Temperature *float32 `json:"temperature,omitempty"`
|
||||
TopP *float32 `json:"top_p,omitempty"`
|
||||
TopK *int `json:"top_k,omitempty"`
|
||||
Tools *globals.FunctionTools `json:"tools,omitempty"`
|
||||
ToolChoice *interface{} `json:"tool_choice,omitempty"`
|
||||
Buffer *utils.Buffer `json:"-"`
|
||||
}
|
||||
|
||||
func (c *ChatProps) SetupBuffer(buf *utils.Buffer) {
|
||||
buf.SetPrompts(c)
|
||||
c.Buffer = buf
|
||||
}
|
||||
|
||||
func CreateChatProps(props *ChatProps, buffer *utils.Buffer) *ChatProps {
|
||||
props.SetupBuffer(buffer)
|
||||
return props
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package generation
|
||||
|
||||
import (
|
||||
"chat/adapter/common"
|
||||
adaptercommon "chat/adapter/common"
|
||||
"chat/admin"
|
||||
"chat/channel"
|
||||
"chat/globals"
|
||||
@ -17,17 +17,16 @@ func CreateGeneration(group, model, prompt, path string, hook func(buffer *utils
|
||||
message := GenerateMessage(prompt)
|
||||
buffer := utils.NewBuffer(model, message, channel.ChargeInstance.GetCharge(model))
|
||||
|
||||
err := channel.NewChatRequest(group, &adaptercommon.ChatProps{
|
||||
err := channel.NewChatRequest(group, adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
|
||||
OriginalModel: model,
|
||||
Message: message,
|
||||
Buffer: *buffer,
|
||||
}, func(data *globals.Chunk) error {
|
||||
}, buffer), func(data *globals.Chunk) error {
|
||||
buffer.WriteChunk(data)
|
||||
hook(buffer, data.Content)
|
||||
return nil
|
||||
})
|
||||
|
||||
admin.AnalysisRequest(model, buffer, err)
|
||||
admin.AnalyseRequest(model, buffer, err)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -4,8 +4,9 @@ import (
|
||||
"chat/adapter"
|
||||
"chat/connection"
|
||||
"chat/utils"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"time"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
)
|
||||
|
||||
func IncrErrorRequest(cache *redis.Client) {
|
||||
@ -25,7 +26,7 @@ func IncrModelRequest(cache *redis.Client, model string, tokens int64) {
|
||||
utils.IncrWithExpire(cache, getModelFormat(getDay(), model), tokens, time.Hour*24*7*2)
|
||||
}
|
||||
|
||||
func AnalysisRequest(model string, buffer *utils.Buffer, err error) {
|
||||
func AnalyseRequest(model string, buffer *utils.Buffer, err error) {
|
||||
instance := connection.Cache
|
||||
|
||||
if adapter.IsAvailableError(err) {
|
||||
|
@ -104,7 +104,7 @@ func createChatTask(
|
||||
hit, err := channel.NewChatRequestWithCache(
|
||||
cache, buffer,
|
||||
auth.GetGroup(db, user),
|
||||
&adaptercommon.ChatProps{
|
||||
adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
|
||||
Model: model,
|
||||
Message: segment,
|
||||
MaxTokens: instance.GetMaxTokens(),
|
||||
@ -114,7 +114,7 @@ func createChatTask(
|
||||
PresencePenalty: instance.GetPresencePenalty(),
|
||||
FrequencyPenalty: instance.GetFrequencyPenalty(),
|
||||
RepetitionPenalty: instance.GetRepetitionPenalty(),
|
||||
},
|
||||
}, buffer),
|
||||
|
||||
// the function to handle the chunk data
|
||||
func(data *globals.Chunk) error {
|
||||
@ -168,6 +168,7 @@ func createChatTask(
|
||||
interruptSignal <- err
|
||||
return hit, nil
|
||||
}
|
||||
|
||||
case signal := <-stopSignal:
|
||||
// if stop signal is received
|
||||
if signal {
|
||||
@ -219,7 +220,7 @@ func ChatHandler(conn *Connection, user *auth.User, instance *conversation.Conve
|
||||
buffer := utils.NewBuffer(model, segment, channel.ChargeInstance.GetCharge(model))
|
||||
hit, err := createChatTask(conn, user, buffer, db, cache, model, instance, segment, plan)
|
||||
|
||||
admin.AnalysisRequest(model, buffer, err)
|
||||
admin.AnalyseRequest(model, buffer, err)
|
||||
if adapter.IsAvailableError(err) {
|
||||
globals.Warn(fmt.Sprintf("%s (model: %s, client: %s)", err, model, conn.GetCtx().ClientIP()))
|
||||
|
||||
|
@ -94,7 +94,7 @@ func ChatRelayAPI(c *gin.Context) {
|
||||
}
|
||||
|
||||
func getChatProps(form RelayForm, messages []globals.Message, buffer *utils.Buffer) *adaptercommon.ChatProps {
|
||||
return &adaptercommon.ChatProps{
|
||||
return adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
|
||||
Model: form.Model,
|
||||
Message: messages,
|
||||
MaxTokens: form.MaxTokens,
|
||||
@ -106,8 +106,7 @@ func getChatProps(form RelayForm, messages []globals.Message, buffer *utils.Buff
|
||||
TopK: form.TopK,
|
||||
Tools: form.Tools,
|
||||
ToolChoice: form.ToolChoice,
|
||||
Buffer: *buffer,
|
||||
}
|
||||
}, buffer)
|
||||
}
|
||||
|
||||
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
|
||||
return nil
|
||||
})
|
||||
|
||||
admin.AnalysisRequest(form.Model, buffer, err)
|
||||
admin.AnalyseRequest(form.Model, buffer, err)
|
||||
if err != nil {
|
||||
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
|
||||
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
|
||||
},
|
||||
)
|
||||
|
||||
admin.AnalysisRequest(form.Model, buffer, err)
|
||||
admin.AnalyseRequest(form.Model, buffer, err)
|
||||
if err != nil {
|
||||
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
|
||||
globals.Warn(fmt.Sprintf("error from chat request api: %s (instance: %s, client: %s)", err.Error(), form.Model, c.ClientIP()))
|
||||
|
@ -38,18 +38,17 @@ func NativeChatHandler(c *gin.Context, user *auth.User, model string, message []
|
||||
hit, err := channel.NewChatRequestWithCache(
|
||||
cache, buffer,
|
||||
auth.GetGroup(db, user),
|
||||
&adaptercommon.ChatProps{
|
||||
adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
|
||||
Model: model,
|
||||
Message: segment,
|
||||
Buffer: *buffer,
|
||||
},
|
||||
}, buffer),
|
||||
func(resp *globals.Chunk) error {
|
||||
buffer.WriteChunk(resp)
|
||||
return nil
|
||||
},
|
||||
)
|
||||
|
||||
admin.AnalysisRequest(model, buffer, err)
|
||||
admin.AnalyseRequest(model, buffer, err)
|
||||
if err != nil {
|
||||
auth.RevertSubscriptionUsage(db, cache, user, model)
|
||||
return err.Error(), 0
|
||||
|
@ -64,12 +64,11 @@ func ImagesRelayAPI(c *gin.Context) {
|
||||
}
|
||||
|
||||
func getImageProps(form RelayImageForm, messages []globals.Message, buffer *utils.Buffer) *adaptercommon.ChatProps {
|
||||
return &adaptercommon.ChatProps{
|
||||
return adaptercommon.CreateChatProps(&adaptercommon.ChatProps{
|
||||
Model: form.Model,
|
||||
Message: messages,
|
||||
MaxTokens: utils.ToPtr(-1),
|
||||
Buffer: *buffer,
|
||||
}
|
||||
}, buffer)
|
||||
}
|
||||
|
||||
func getUrlFromBuffer(buffer *utils.Buffer) string {
|
||||
@ -100,7 +99,7 @@ func createRelayImageObject(c *gin.Context, form RelayImageForm, prompt string,
|
||||
return nil
|
||||
})
|
||||
|
||||
admin.AnalysisRequest(form.Model, buffer, err)
|
||||
admin.AnalyseRequest(form.Model, buffer, err)
|
||||
if err != nil {
|
||||
auth.RevertSubscriptionUsage(db, cache, user, form.Model)
|
||||
globals.Warn(fmt.Sprintf("error from chat request api: %s (instance: %s, client: %s)", err, form.Model, c.ClientIP()))
|
||||
|
Loading…
Reference in New Issue
Block a user