From dce00141ce84dc040eb359509911f89654bbbfcd Mon Sep 17 00:00:00 2001 From: CaIon Date: Wed, 15 Oct 2025 18:21:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=B4=E6=97=B6=E5=85=BC=E5=AE=B9aws?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=93=BE=E6=8E=A5=E5=AA=92=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dto/claude.go | 4 ++++ relay/channel/aws/adaptor.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/dto/claude.go b/dto/claude.go index 3ad04bc23..c6e5c3ecd 100644 --- a/dto/claude.go +++ b/dto/claude.go @@ -148,6 +148,10 @@ func (c *ClaudeMessage) SetStringContent(content string) { c.Content = content } +func (c *ClaudeMessage) SetContent(content any) { + c.Content = content +} + func (c *ClaudeMessage) ParseContent() ([]ClaudeMediaMessage, error) { return common.Any2Type[[]ClaudeMediaMessage](c.Content) } diff --git a/relay/channel/aws/adaptor.go b/relay/channel/aws/adaptor.go index 70736ec20..655eee132 100644 --- a/relay/channel/aws/adaptor.go +++ b/relay/channel/aws/adaptor.go @@ -10,6 +10,7 @@ import ( "github.com/QuantumNous/new-api/relay/channel" "github.com/QuantumNous/new-api/relay/channel/claude" relaycommon "github.com/QuantumNous/new-api/relay/common" + "github.com/QuantumNous/new-api/service" "github.com/QuantumNous/new-api/types" "github.com/aws/aws-sdk-go-v2/service/bedrockruntime" "github.com/pkg/errors" @@ -38,6 +39,37 @@ func (a *Adaptor) ConvertGeminiRequest(*gin.Context, *relaycommon.RelayInfo, *dt } func (a *Adaptor) ConvertClaudeRequest(c *gin.Context, info *relaycommon.RelayInfo, request *dto.ClaudeRequest) (any, error) { + for i, message := range request.Messages { + updated := false + if !message.IsStringContent() { + content, err := message.ParseContent() + if err != nil { + return nil, errors.Wrap(err, "failed to parse message content") + } + for i2, mediaMessage := range content { + if mediaMessage.Source != nil { + if mediaMessage.Source.Type == "url" { + fileData, err := service.GetFileBase64FromUrl(c, mediaMessage.Source.Url, "formatting image for Claude") + if err != nil { + return nil, fmt.Errorf("get file base64 from url failed: %s", err.Error()) + } + mediaMessage.Source.MediaType = fileData.MimeType + mediaMessage.Source.Data = fileData.Base64Data + mediaMessage.Source.Url = "" + mediaMessage.Source.Type = "base64" + content[i2] = mediaMessage + updated = true + } + } + } + if updated { + message.SetContent(content) + } + } + if updated { + request.Messages[i] = message + } + } return request, nil }