61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package zhipu_4v
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/QuantumNous/new-api/dto"
|
|
)
|
|
|
|
func requestOpenAI2Zhipu(request dto.GeneralOpenAIRequest) *dto.GeneralOpenAIRequest {
|
|
messages := make([]dto.Message, 0, len(request.Messages))
|
|
for _, message := range request.Messages {
|
|
if !message.IsStringContent() {
|
|
mediaMessages := message.ParseContent()
|
|
for j, mediaMessage := range mediaMessages {
|
|
if mediaMessage.Type == dto.ContentTypeImageURL {
|
|
imageUrl := mediaMessage.GetImageMedia()
|
|
// check if base64
|
|
if strings.HasPrefix(imageUrl.Url, "data:image/") {
|
|
// 去除base64数据的URL前缀(如果有)
|
|
if idx := strings.Index(imageUrl.Url, ","); idx != -1 {
|
|
imageUrl.Url = imageUrl.Url[idx+1:]
|
|
}
|
|
}
|
|
mediaMessage.ImageUrl = imageUrl
|
|
mediaMessages[j] = mediaMessage
|
|
}
|
|
}
|
|
message.SetMediaContent(mediaMessages)
|
|
}
|
|
messages = append(messages, dto.Message{
|
|
Role: message.Role,
|
|
Content: message.Content,
|
|
ToolCalls: message.ToolCalls,
|
|
ToolCallId: message.ToolCallId,
|
|
})
|
|
}
|
|
str, ok := request.Stop.(string)
|
|
var Stop []string
|
|
if ok {
|
|
Stop = []string{str}
|
|
} else {
|
|
Stop, _ = request.Stop.([]string)
|
|
}
|
|
out := &dto.GeneralOpenAIRequest{
|
|
Model: request.Model,
|
|
Stream: request.Stream,
|
|
Messages: messages,
|
|
Temperature: request.Temperature,
|
|
TopP: request.TopP,
|
|
Stop: Stop,
|
|
Tools: request.Tools,
|
|
ToolChoice: request.ToolChoice,
|
|
THINKING: request.THINKING,
|
|
}
|
|
if request.MaxTokens != nil || request.MaxCompletionTokens != nil {
|
|
maxTokens := request.GetMaxTokens()
|
|
out.MaxTokens = &maxTokens
|
|
}
|
|
return out
|
|
}
|