From b2e8437791db5c46052d604c9c60785f0f4c3f48 Mon Sep 17 00:00:00 2001 From: liyunfei <2716499331@qq.com> Date: Mon, 23 Jun 2025 17:42:26 +0800 Subject: [PATCH] feat: add audio support for Gemini channel --- dto/openai_request.go | 5 +++-- relay/channel/gemini/dto.go | 5 +++++ relay/channel/gemini/relay-gemini.go | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dto/openai_request.go b/dto/openai_request.go index 71dd9ad1833e..c15192909e12 100644 --- a/dto/openai_request.go +++ b/dto/openai_request.go @@ -134,8 +134,9 @@ type MessageImageUrl struct { } type MessageInputAudio struct { - Data string `json:"data"` //base64 - Format string `json:"format"` + Data string `json:"data"` //base64 + Format string `json:"format"` + Fps float64 `json:"fps,omitempty"` } const ( diff --git a/relay/channel/gemini/dto.go b/relay/channel/gemini/dto.go index a20d06cae88b..2d6483cbb58a 100644 --- a/relay/channel/gemini/dto.go +++ b/relay/channel/gemini/dto.go @@ -43,6 +43,10 @@ type GeminiFileData struct { FileUri string `json:"fileUri,omitempty"` } +type GeminiVideoMetadata struct { + Fps float64 `json:"fps"` +} + type GeminiPart struct { Text string `json:"text,omitempty"` InlineData *GeminiInlineData `json:"inlineData,omitempty"` @@ -51,6 +55,7 @@ type GeminiPart struct { FileData *GeminiFileData `json:"fileData,omitempty"` ExecutableCode *GeminiPartExecutableCode `json:"executableCode,omitempty"` CodeExecutionResult *GeminiPartCodeExecutionResult `json:"codeExecutionResult,omitempty"` + VideoMetadata *GeminiVideoMetadata `json:"videoMetadata,omitempty"` } type GeminiChatContent struct { diff --git a/relay/channel/gemini/relay-gemini.go b/relay/channel/gemini/relay-gemini.go index 82ac7f120b03..e2289f24460a 100644 --- a/relay/channel/gemini/relay-gemini.go +++ b/relay/channel/gemini/relay-gemini.go @@ -223,6 +223,9 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) (*GeminiChatReque MimeType: audioData.Format, Data: audioData.Data, }, + VideoMetadata: &GeminiVideoMetadata{ + Fps: audioData.Fps, + }, }) } else if part.Type == dto.ContentTypeYoutube { parts = append(parts, GeminiPart{