From 8d5891a382d7746685b30c9ea91f2c9d4a792e13 Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Mon, 2 Mar 2026 10:28:26 -0300 Subject: [PATCH] fix: sanitize tool schemas for Gemini provider (#173) - Added cleanJSONSchemaForAntigravity() to openaiToGeminiBase() tool conversion - Both OpenAI-format and Claude-format tool parameters are now sanitized - Also sanitized response_format json_schema using the same function - Removes unsupported JSON Schema keywords (additionalProperties, $schema, etc.) - All Gemini paths (standard, CLI, Antigravity) now consistently sanitize schemas --- open-sse/translator/request/openai-to-gemini.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/open-sse/translator/request/openai-to-gemini.ts b/open-sse/translator/request/openai-to-gemini.ts index dcc06dca80..6f3ca2ab65 100644 --- a/open-sse/translator/request/openai-to-gemini.ts +++ b/open-sse/translator/request/openai-to-gemini.ts @@ -180,7 +180,9 @@ function openaiToGeminiBase(model, body, stream) { functionDeclarations.push({ name: t.name, description: t.description || "", - parameters: t.input_schema || { type: "object", properties: {} }, + parameters: cleanJSONSchemaForAntigravity( + t.input_schema || { type: "object", properties: {} } + ), }); } // OpenAI format @@ -189,7 +191,9 @@ function openaiToGeminiBase(model, body, stream) { functionDeclarations.push({ name: fn.name, description: fn.description || "", - parameters: fn.parameters || { type: "object", properties: {} }, + parameters: cleanJSONSchemaForAntigravity( + fn.parameters || { type: "object", properties: {} } + ), }); } } @@ -206,9 +210,7 @@ function openaiToGeminiBase(model, body, stream) { // Extract the schema (may be nested under .schema key) const schema = body.response_format.json_schema.schema || body.response_format.json_schema; if (schema && typeof schema === "object") { - // Remove unsupported keywords for Gemini (it uses a subset of JSON Schema) - const { $schema, additionalProperties, ...cleanSchema } = schema; - result.generationConfig.responseSchema = cleanSchema; + result.generationConfig.responseSchema = cleanJSONSchemaForAntigravity(schema); } } else if (body.response_format.type === "json_object") { result.generationConfig.responseMimeType = "application/json";