56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package zhipu_4v
|
||
|
||
import (
|
||
"one-api/dto"
|
||
"strings"
|
||
)
|
||
|
||
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)
|
||
}
|
||
return &dto.GeneralOpenAIRequest{
|
||
Model: request.Model,
|
||
Stream: request.Stream,
|
||
Messages: messages,
|
||
Temperature: request.Temperature,
|
||
TopP: request.TopP,
|
||
MaxTokens: request.GetMaxTokens(),
|
||
Stop: Stop,
|
||
Tools: request.Tools,
|
||
ToolChoice: request.ToolChoice,
|
||
THINKING: request.THINKING,
|
||
}
|
||
}
|