diff --git a/backend/internal/pkg/antigravity/gemini_types.go b/backend/internal/pkg/antigravity/gemini_types.go index 033dccbd5d..4fd7882adc 100644 --- a/backend/internal/pkg/antigravity/gemini_types.go +++ b/backend/internal/pkg/antigravity/gemini_types.go @@ -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 函数调用配置 diff --git a/backend/internal/pkg/antigravity/request_transformer_test.go b/backend/internal/pkg/antigravity/request_transformer_test.go index ea95cc7ea6..008e54724a 100644 --- a/backend/internal/pkg/antigravity/request_transformer_test.go +++ b/backend/internal/pkg/antigravity/request_transformer_test.go @@ -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) + }) +} +