From b01807291414a877c9d3293e16a2638714dee9c3 Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Tue, 23 Sep 2025 21:22:41 +0800 Subject: [PATCH] fix(gemini): trim "data:" prefix in raw JSON and resolve variable shadowing in stream translation --- internal/runtime/executor/gemini_web_executor.go | 4 ++-- .../gemini/openai/chat-completions/gemini_openai_response.go | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/runtime/executor/gemini_web_executor.go b/internal/runtime/executor/gemini_web_executor.go index a6cab1e9..bb43850b 100644 --- a/internal/runtime/executor/gemini_web_executor.go +++ b/internal/runtime/executor/gemini_web_executor.go @@ -95,13 +95,13 @@ func (e *GeminiWebExecutor) ExecuteStream(ctx context.Context, auth *cliproxyaut defer mutex.Unlock() } for _, line := range lines { - lines := sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), req.Payload, bytes.Clone([]byte(line)), ¶m) + lines = sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), req.Payload, bytes.Clone([]byte(line)), ¶m) for _, l := range lines { out <- cliproxyexecutor.StreamChunk{Payload: []byte(l)} } } for _, line := range done { - lines := sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), req.Payload, bytes.Clone([]byte(line)), ¶m) + lines = sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), req.Payload, bytes.Clone([]byte(line)), ¶m) for _, l := range lines { out <- cliproxyexecutor.StreamChunk{Payload: []byte(l)} } diff --git a/internal/translator/gemini/openai/chat-completions/gemini_openai_response.go b/internal/translator/gemini/openai/chat-completions/gemini_openai_response.go index f7c23b78..ab6cc19e 100644 --- a/internal/translator/gemini/openai/chat-completions/gemini_openai_response.go +++ b/internal/translator/gemini/openai/chat-completions/gemini_openai_response.go @@ -42,6 +42,10 @@ func ConvertGeminiResponseToOpenAI(_ context.Context, _ string, originalRequestR } } + if bytes.HasPrefix(rawJSON, []byte("data:")) { + rawJSON = bytes.TrimSpace(rawJSON[5:]) + } + if bytes.Equal(rawJSON, []byte("[DONE]")) { return []string{} }