From eb2549a7827501bbfd8dce4ccf68d1a4f415d3c4 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Thu, 16 Oct 2025 06:41:04 +0800 Subject: [PATCH] fix(gemini): update response template to omit finishReason until known --- .../translator/openai/gemini/openai_gemini_response.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/translator/openai/gemini/openai_gemini_response.go b/internal/translator/openai/gemini/openai_gemini_response.go index 583d86a3..02e754ac 100644 --- a/internal/translator/openai/gemini/openai_gemini_response.go +++ b/internal/translator/openai/gemini/openai_gemini_response.go @@ -97,8 +97,8 @@ func ConvertOpenAIResponseToGemini(_ context.Context, _ string, originalRequestR var results []string choices.ForEach(func(choiceIndex, choice gjson.Result) bool { - // Base Gemini response template - template := `{"candidates":[{"content":{"parts":[],"role":"model"},"finishReason":"STOP","index":0}]}` + // Base Gemini response template without finishReason; set when known + template := `{"candidates":[{"content":{"parts":[],"role":"model"},"index":0}]}` // Set model if available if model := root.Get("model"); model.Exists() { @@ -514,8 +514,8 @@ func tryParseNumber(s string) (interface{}, bool) { func ConvertOpenAIResponseToGeminiNonStream(_ context.Context, _ string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, _ *any) string { root := gjson.ParseBytes(rawJSON) - // Base Gemini response template - out := `{"candidates":[{"content":{"parts":[],"role":"model"},"finishReason":"STOP","index":0}]}` + // Base Gemini response template without finishReason; set when known + out := `{"candidates":[{"content":{"parts":[],"role":"model"},"index":0}]}` // Set model if available if model := root.Get("model"); model.Exists() {