diff --git a/internal/runtime/executor/antigravity_executor.go b/internal/runtime/executor/antigravity_executor.go index 94b84647..1d959d6a 100644 --- a/internal/runtime/executor/antigravity_executor.go +++ b/internal/runtime/executor/antigravity_executor.go @@ -669,20 +669,6 @@ func geminiToAntigravity(modelName string, payload []byte) []byte { } } - gjson.Get(template, "request.contents").ForEach(func(key, content gjson.Result) bool { - if content.Get("role").String() == "model" { - content.Get("parts").ForEach(func(partKey, part gjson.Result) bool { - if part.Get("functionCall").Exists() { - template, _ = sjson.Set(template, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") - } else if part.Get("thoughtSignature").Exists() { - template, _ = sjson.Set(template, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") - } - return true - }) - } - return true - }) - if strings.HasPrefix(modelName, "claude-sonnet-") { gjson.Get(template, "request.tools").ForEach(func(key, tool gjson.Result) bool { tool.Get("functionDeclarations").ForEach(func(funKey, funcDecl gjson.Result) bool { diff --git a/internal/translator/antigravity/gemini/antigravity_gemini_request.go b/internal/translator/antigravity/gemini/antigravity_gemini_request.go index b79e9a44..30bc3830 100644 --- a/internal/translator/antigravity/gemini/antigravity_gemini_request.go +++ b/internal/translator/antigravity/gemini/antigravity_gemini_request.go @@ -98,6 +98,20 @@ func ConvertGeminiRequestToAntigravity(_ string, inputRawJSON []byte, _ bool) [] } } + gjson.GetBytes(rawJSON, "request.contents").ForEach(func(key, content gjson.Result) bool { + if content.Get("role").String() == "model" { + content.Get("parts").ForEach(func(partKey, part gjson.Result) bool { + if part.Get("functionCall").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } else if part.Get("thoughtSignature").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } + return true + }) + } + return true + }) + return common.AttachDefaultSafetySettings(rawJSON, "request.safetySettings") } diff --git a/internal/translator/gemini-cli/gemini/gemini-cli_gemini_request.go b/internal/translator/gemini-cli/gemini/gemini-cli_gemini_request.go index e252a765..5008d584 100644 --- a/internal/translator/gemini-cli/gemini/gemini-cli_gemini_request.go +++ b/internal/translator/gemini-cli/gemini/gemini-cli_gemini_request.go @@ -98,6 +98,20 @@ func ConvertGeminiRequestToGeminiCLI(_ string, inputRawJSON []byte, _ bool) []by } } + gjson.GetBytes(rawJSON, "request.contents").ForEach(func(key, content gjson.Result) bool { + if content.Get("role").String() == "model" { + content.Get("parts").ForEach(func(partKey, part gjson.Result) bool { + if part.Get("functionCall").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } else if part.Get("thoughtSignature").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("request.contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } + return true + }) + } + return true + }) + return common.AttachDefaultSafetySettings(rawJSON, "request.safetySettings") } diff --git a/internal/translator/gemini/gemini-cli/gemini_gemini-cli_request.go b/internal/translator/gemini/gemini-cli/gemini_gemini-cli_request.go index d5a15281..3b70bd3e 100644 --- a/internal/translator/gemini/gemini-cli/gemini_gemini-cli_request.go +++ b/internal/translator/gemini/gemini-cli/gemini_gemini-cli_request.go @@ -46,5 +46,19 @@ func ConvertGeminiCLIRequestToGemini(_ string, inputRawJSON []byte, _ bool) []by } } + gjson.GetBytes(rawJSON, "contents").ForEach(func(key, content gjson.Result) bool { + if content.Get("role").String() == "model" { + content.Get("parts").ForEach(func(partKey, part gjson.Result) bool { + if part.Get("functionCall").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } else if part.Get("thoughtSignature").Exists() { + rawJSON, _ = sjson.SetBytes(rawJSON, fmt.Sprintf("contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } + return true + }) + } + return true + }) + return common.AttachDefaultSafetySettings(rawJSON, "safetySettings") } diff --git a/internal/translator/gemini/gemini/gemini_gemini_request.go b/internal/translator/gemini/gemini/gemini_gemini_request.go index 685cc66f..c4aa5029 100644 --- a/internal/translator/gemini/gemini/gemini_gemini_request.go +++ b/internal/translator/gemini/gemini/gemini_gemini_request.go @@ -72,6 +72,20 @@ func ConvertGeminiRequestToGemini(_ string, inputRawJSON []byte, _ bool) []byte return true }) + gjson.GetBytes(out, "contents").ForEach(func(key, content gjson.Result) bool { + if content.Get("role").String() == "model" { + content.Get("parts").ForEach(func(partKey, part gjson.Result) bool { + if part.Get("functionCall").Exists() { + out, _ = sjson.SetBytes(out, fmt.Sprintf("contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } else if part.Get("thoughtSignature").Exists() { + out, _ = sjson.SetBytes(out, fmt.Sprintf("contents.%d.parts.%d.thoughtSignature", key.Int(), partKey.Int()), "skip_thought_signature_validator") + } + return true + }) + } + return true + }) + out = common.AttachDefaultSafetySettings(out, "safetySettings") return out