Przeglądaj źródła

refactor: update ClaudeMessageSource struct to include optional Url field and adjust media source handling in relay-claude #993

CaIon 8 miesięcy temu
rodzic
commit
aaa41a8074
2 zmienionych plików z 7 dodań i 12 usunięć
  1. 3 2
      dto/claude.go
  2. 4 10
      relay/channel/claude/relay-claude.go

+ 3 - 2
dto/claude.go

@@ -70,8 +70,9 @@ func (c *ClaudeMediaMessage) ParseMediaContent() []ClaudeMediaMessage {
 
 type ClaudeMessageSource struct {
 	Type      string `json:"type"`
-	MediaType string `json:"media_type"`
-	Data      any    `json:"data"`
+	MediaType string `json:"media_type,omitempty"`
+	Data      any    `json:"data,omitempty"`
+	Url       string `json:"url,omitempty"`
 }
 
 type ClaudeMessage struct {

+ 4 - 10
relay/channel/claude/relay-claude.go

@@ -246,23 +246,17 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*dto.Cla
 					} else {
 						imageUrl := mediaMessage.GetImageMedia()
 						claudeMediaMessage.Type = "image"
-						claudeMediaMessage.Source = &dto.ClaudeMessageSource{
-							Type: "base64",
-						}
+						claudeMediaMessage.Source = &dto.ClaudeMessageSource{}
 						// 判断是否是url
 						if strings.HasPrefix(imageUrl.Url, "http") {
-							// 是url,获取图片的类型和base64编码的数据
-							fileData, err := service.GetFileBase64FromUrl(imageUrl.Url)
-							if err != nil {
-								return nil, fmt.Errorf("get file base64 from url failed: %s", err.Error())
-							}
-							claudeMediaMessage.Source.MediaType = fileData.MimeType
-							claudeMediaMessage.Source.Data = fileData.Base64Data
+							claudeMediaMessage.Source.Type = "url"
+							claudeMediaMessage.Source.Url = imageUrl.Url
 						} else {
 							_, format, base64String, err := service.DecodeBase64ImageData(imageUrl.Url)
 							if err != nil {
 								return nil, err
 							}
+							claudeMediaMessage.Source.Type = "base64"
 							claudeMediaMessage.Source.MediaType = "image/" + format
 							claudeMediaMessage.Source.Data = base64String
 						}