From d0acecb2abfd8d73fde02612db6edaf43ab8715b Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Sat, 23 Mar 2024 17:08:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20GLM-4V=20=E7=9A=84=20Vision=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E9=97=AE=E9=A2=98=20(close=20#136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/channel/zhipu_4v/relay-zhipu_v4.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/relay/channel/zhipu_4v/relay-zhipu_v4.go b/relay/channel/zhipu_4v/relay-zhipu_v4.go index 34b4792..06f306f 100644 --- a/relay/channel/zhipu_4v/relay-zhipu_v4.go +++ b/relay/channel/zhipu_4v/relay-zhipu_v4.go @@ -74,6 +74,25 @@ func getZhipuToken(apikey string) string { 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.ImageUrl.(dto.MessageImageUrl) + // 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 + } + } + messageRaw, _ := json.Marshal(mediaMessages) + message.Content = messageRaw + } messages = append(messages, dto.Message{ Role: message.Role, Content: message.Content, @@ -138,7 +157,7 @@ func streamResponseZhipu2OpenAI(zhipuResponse *ZhipuV4StreamResponse) *dto.ChatC Id: zhipuResponse.Id, Object: "chat.completion.chunk", Created: zhipuResponse.Created, - Model: "glm-4", + Model: "glm-4v", Choices: []dto.ChatCompletionsStreamResponseChoice{choice}, } return &response