diff --git a/relay/channel/gemini/dto.go b/relay/channel/gemini/dto.go index 771a616a9..8c93073f3 100644 --- a/relay/channel/gemini/dto.go +++ b/relay/channel/gemini/dto.go @@ -34,6 +34,7 @@ type GeminiChatSafetySettings struct { } type GeminiChatTools struct { + GoogleSearch any `json:"googleSearch,omitempty"` FunctionDeclarations any `json:"functionDeclarations,omitempty"` } diff --git a/relay/channel/gemini/relay-gemini.go b/relay/channel/gemini/relay-gemini.go index df2629763..2e45e44cc 100644 --- a/relay/channel/gemini/relay-gemini.go +++ b/relay/channel/gemini/relay-gemini.go @@ -45,13 +45,25 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques } if textRequest.Tools != nil { functions := make([]dto.FunctionCall, 0, len(textRequest.Tools)) + googleSearch := false for _, tool := range textRequest.Tools { + if tool.Function.Name == "googleSearch" { + googleSearch = true + continue + } functions = append(functions, tool.Function) } - geminiRequest.Tools = []GeminiChatTools{ - { - FunctionDeclarations: functions, - }, + if len(functions) > 0 { + geminiRequest.Tools = []GeminiChatTools{ + { + FunctionDeclarations: functions, + }, + } + } + if googleSearch { + geminiRequest.Tools = append(geminiRequest.Tools, GeminiChatTools{ + GoogleSearch: make(map[string]string), + }) } } else if textRequest.Functions != nil { geminiRequest.Tools = []GeminiChatTools{ @@ -134,7 +146,6 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) *GeminiChatReques shouldAddDummyModelMessage = false } } - return &geminiRequest }