From c95fb55c51fc6d10df8ba0ef697ce5bd2b1ca99d Mon Sep 17 00:00:00 2001 From: Xyfacai Date: Mon, 9 Jun 2025 11:27:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20message=20=E8=BD=AC=20any=20=E5=90=8E?= =?UTF-8?q?=EF=BC=8CImageUrl=E5=88=A4=E6=96=AD=20panic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dto/openai_request.go | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/dto/openai_request.go b/dto/openai_request.go index fcb0fe36..7b6b4091 100644 --- a/dto/openai_request.go +++ b/dto/openai_request.go @@ -132,21 +132,50 @@ type MediaContent struct { func (m *MediaContent) GetImageMedia() *MessageImageUrl { if m.ImageUrl != nil { - return m.ImageUrl.(*MessageImageUrl) + if _, ok := m.ImageUrl.(*MessageImageUrl); ok { + return m.ImageUrl.(*MessageImageUrl) + } + if itemMap, ok := m.ImageUrl.(map[string]any); ok { + out := &MessageImageUrl{ + Url: common.Interface2String(itemMap["url"]), + Detail: common.Interface2String(itemMap["detail"]), + MimeType: common.Interface2String(itemMap["mime_type"]), + } + return out + } } return nil } func (m *MediaContent) GetInputAudio() *MessageInputAudio { if m.InputAudio != nil { - return m.InputAudio.(*MessageInputAudio) + if _, ok := m.InputAudio.(*MessageInputAudio); ok { + return m.InputAudio.(*MessageInputAudio) + } + if itemMap, ok := m.InputAudio.(map[string]any); ok { + out := &MessageInputAudio{ + Data: common.Interface2String(itemMap["data"]), + Format: common.Interface2String(itemMap["format"]), + } + return out + } } return nil } func (m *MediaContent) GetFile() *MessageFile { if m.File != nil { - return m.File.(*MessageFile) + if _, ok := m.File.(*MessageFile); ok { + return m.File.(*MessageFile) + } + if itemMap, ok := m.File.(map[string]any); ok { + out := &MessageFile{ + FileName: common.Interface2String(itemMap["file_name"]), + FileData: common.Interface2String(itemMap["file_data"]), + FileId: common.Interface2String(itemMap["file_id"]), + } + return out + } } return nil } @@ -286,6 +315,12 @@ func (m *Message) ParseContent() []MediaContent { } for _, contentItemAny := range arrayContent { + mediaItem, ok := contentItemAny.(MediaContent) + if ok { + contentList = append(contentList, mediaItem) + continue + } + contentItem, ok := contentItemAny.(map[string]any) if !ok { continue