diff --git a/internal/runtime/executor/antigravity_executor.go b/internal/runtime/executor/antigravity_executor.go index 0fa664d6..c41d8d0e 100644 --- a/internal/runtime/executor/antigravity_executor.go +++ b/internal/runtime/executor/antigravity_executor.go @@ -544,12 +544,21 @@ func geminiToAntigravity(modelName string, payload []byte) []byte { template, _ = sjson.Delete(template, "request.safetySettings") template, _ = sjson.Set(template, "request.toolConfig.functionCallingConfig.mode", "VALIDATED") + template, _ = sjson.Delete(template, "request.generationConfig.maxOutputTokens") + if !strings.HasPrefix(modelName, "gemini-3-") { + if thinkingLevel := gjson.Get(template, "request.generationConfig.thinkingConfig.thinkingLevel"); thinkingLevel.Exists() { + template, _ = sjson.Delete(template, "request.generationConfig.thinkingConfig.thinkingLevel") + template, _ = sjson.Set(template, "request.generationConfig.thinkingConfig.thinkingBudget", -1) + } + } 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 }) diff --git a/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go b/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go index ff77e4da..ce221863 100644 --- a/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go +++ b/internal/translator/gemini/openai/responses/gemini_openai-responses_response.go @@ -433,12 +433,18 @@ func ConvertGeminiResponseToOpenAIResponses(_ context.Context, modelName string, // output tokens if v := um.Get("candidatesTokenCount"); v.Exists() { completed, _ = sjson.Set(completed, "response.usage.output_tokens", v.Int()) + } else { + completed, _ = sjson.Set(completed, "response.usage.output_tokens", 0) } if v := um.Get("thoughtsTokenCount"); v.Exists() { completed, _ = sjson.Set(completed, "response.usage.output_tokens_details.reasoning_tokens", v.Int()) + } else { + completed, _ = sjson.Set(completed, "response.usage.output_tokens_details.reasoning_tokens", 0) } if v := um.Get("totalTokenCount"); v.Exists() { completed, _ = sjson.Set(completed, "response.usage.total_tokens", v.Int()) + } else { + completed, _ = sjson.Set(completed, "response.usage.total_tokens", 0) } }