fix: 非openai 渠道使用 SystemPrompt 设置会panic
This commit is contained in:
+33
-31
@@ -90,41 +90,43 @@ func TextHelper(c *gin.Context, info *relaycommon.RelayInfo) (newAPIError *types
|
|||||||
|
|
||||||
if info.ChannelSetting.SystemPrompt != "" {
|
if info.ChannelSetting.SystemPrompt != "" {
|
||||||
// 如果有系统提示,则将其添加到请求中
|
// 如果有系统提示,则将其添加到请求中
|
||||||
request := convertedRequest.(*dto.GeneralOpenAIRequest)
|
request, ok := convertedRequest.(*dto.GeneralOpenAIRequest)
|
||||||
containSystemPrompt := false
|
if ok {
|
||||||
for _, message := range request.Messages {
|
containSystemPrompt := false
|
||||||
if message.Role == request.GetSystemRoleName() {
|
for _, message := range request.Messages {
|
||||||
containSystemPrompt = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !containSystemPrompt {
|
|
||||||
// 如果没有系统提示,则添加系统提示
|
|
||||||
systemMessage := dto.Message{
|
|
||||||
Role: request.GetSystemRoleName(),
|
|
||||||
Content: info.ChannelSetting.SystemPrompt,
|
|
||||||
}
|
|
||||||
request.Messages = append([]dto.Message{systemMessage}, request.Messages...)
|
|
||||||
} else if info.ChannelSetting.SystemPromptOverride {
|
|
||||||
common.SetContextKey(c, constant.ContextKeySystemPromptOverride, true)
|
|
||||||
// 如果有系统提示,且允许覆盖,则拼接到前面
|
|
||||||
for i, message := range request.Messages {
|
|
||||||
if message.Role == request.GetSystemRoleName() {
|
if message.Role == request.GetSystemRoleName() {
|
||||||
if message.IsStringContent() {
|
containSystemPrompt = true
|
||||||
request.Messages[i].SetStringContent(info.ChannelSetting.SystemPrompt + "\n" + message.StringContent())
|
|
||||||
} else {
|
|
||||||
contents := message.ParseContent()
|
|
||||||
contents = append([]dto.MediaContent{
|
|
||||||
{
|
|
||||||
Type: dto.ContentTypeText,
|
|
||||||
Text: info.ChannelSetting.SystemPrompt,
|
|
||||||
},
|
|
||||||
}, contents...)
|
|
||||||
request.Messages[i].Content = contents
|
|
||||||
}
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !containSystemPrompt {
|
||||||
|
// 如果没有系统提示,则添加系统提示
|
||||||
|
systemMessage := dto.Message{
|
||||||
|
Role: request.GetSystemRoleName(),
|
||||||
|
Content: info.ChannelSetting.SystemPrompt,
|
||||||
|
}
|
||||||
|
request.Messages = append([]dto.Message{systemMessage}, request.Messages...)
|
||||||
|
} else if info.ChannelSetting.SystemPromptOverride {
|
||||||
|
common.SetContextKey(c, constant.ContextKeySystemPromptOverride, true)
|
||||||
|
// 如果有系统提示,且允许覆盖,则拼接到前面
|
||||||
|
for i, message := range request.Messages {
|
||||||
|
if message.Role == request.GetSystemRoleName() {
|
||||||
|
if message.IsStringContent() {
|
||||||
|
request.Messages[i].SetStringContent(info.ChannelSetting.SystemPrompt + "\n" + message.StringContent())
|
||||||
|
} else {
|
||||||
|
contents := message.ParseContent()
|
||||||
|
contents = append([]dto.MediaContent{
|
||||||
|
{
|
||||||
|
Type: dto.ContentTypeText,
|
||||||
|
Text: info.ChannelSetting.SystemPrompt,
|
||||||
|
},
|
||||||
|
}, contents...)
|
||||||
|
request.Messages[i].Content = contents
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user