fix(gemini): support includeServerSideToolInvocations in GeminiToolConfig

- Add IncludeServerSideToolInvocations field to GeminiToolConfig to prevent dropping client tool settings.
- Fix HTTP 400 error when mixing built-in tools (e.g. Google Search) with function calling on Gemini 3.6/3.7 models.
- Add serialization/deserialization unit test TestGeminiToolConfig_IncludeServerSideToolInvocations.

Fixes #5709
This commit is contained in:
Tamseno
2026-08-17 15:23:49 +08:00
parent e330c243a8
commit 3c3bb2fa19
2 changed files with 26 additions and 1 deletions
@@ -112,7 +112,8 @@ type GeminiImageSearch struct {
// GeminiToolConfig Gemini 工具配置
type GeminiToolConfig struct {
FunctionCallingConfig *GeminiFunctionCallingConfig `json:"functionCallingConfig,omitempty"`
FunctionCallingConfig *GeminiFunctionCallingConfig `json:"functionCallingConfig,omitempty"`
IncludeServerSideToolInvocations *bool `json:"includeServerSideToolInvocations,omitempty"`
}
// GeminiFunctionCallingConfig 函数调用配置
@@ -565,3 +565,27 @@ func TestTransformClaudeToGeminiWithOptions_PreservesWebSearchAlongsideFunctions
require.Equal(t, "get_weather", req.Request.Tools[0].FunctionDeclarations[0].Name)
require.NotNil(t, req.Request.Tools[1].GoogleSearch)
}
func TestGeminiToolConfig_IncludeServerSideToolInvocations(t *testing.T) {
t.Run("serialize and deserialize toolConfig with includeServerSideToolInvocations", func(t *testing.T) {
trueVal := true
cfg := GeminiToolConfig{
FunctionCallingConfig: &GeminiFunctionCallingConfig{
Mode: "VALIDATED",
},
IncludeServerSideToolInvocations: &trueVal,
}
data, err := json.Marshal(cfg)
require.NoError(t, err)
require.Contains(t, string(data), `"includeServerSideToolInvocations":true`)
var decoded GeminiToolConfig
err = json.Unmarshal(data, &decoded)
require.NoError(t, err)
require.NotNil(t, decoded.IncludeServerSideToolInvocations)
require.True(t, *decoded.IncludeServerSideToolInvocations)
require.Equal(t, "VALIDATED", decoded.FunctionCallingConfig.Mode)
})
}