From 1061354b2f52dfd4a0664dc4af22c64e52b726a9 Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Sat, 22 Nov 2025 13:49:23 +0800 Subject: [PATCH] fix: handle empty and non-JSON SSE chunks safely --- internal/runtime/executor/antigravity_executor.go | 7 ++++++- .../openai/chat-completions/antigravity_openai_response.go | 4 ---- .../openai/chat-completions/gemini-cli_openai_response.go | 4 ---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/internal/runtime/executor/antigravity_executor.go b/internal/runtime/executor/antigravity_executor.go index 726b5202..477828d6 100644 --- a/internal/runtime/executor/antigravity_executor.go +++ b/internal/runtime/executor/antigravity_executor.go @@ -172,7 +172,12 @@ func (e *AntigravityExecutor) ExecuteStream(ctx context.Context, auth *cliproxya // Only retain usage statistics in the terminal chunk line = FilterSSEUsageMetadata(line) - chunks := sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), translated, bytes.Clone(line), ¶m) + payload := jsonPayload(line) + if payload == nil { + continue + } + + chunks := sdktranslator.TranslateStream(ctx, to, from, req.Model, bytes.Clone(opts.OriginalRequest), translated, bytes.Clone(payload), ¶m) for i := range chunks { out <- cliproxyexecutor.StreamChunk{Payload: []byte(chunks[i])} } diff --git a/internal/translator/antigravity/openai/chat-completions/antigravity_openai_response.go b/internal/translator/antigravity/openai/chat-completions/antigravity_openai_response.go index 99c327b5..c70daaf2 100644 --- a/internal/translator/antigravity/openai/chat-completions/antigravity_openai_response.go +++ b/internal/translator/antigravity/openai/chat-completions/antigravity_openai_response.go @@ -45,10 +45,6 @@ func ConvertAntigravityResponseToOpenAI(_ context.Context, _ string, originalReq } } - if len(bytes.TrimSpace(rawJSON)) == 0 { - return []string{} - } - if bytes.Equal(rawJSON, []byte("[DONE]")) { return []string{} } diff --git a/internal/translator/gemini-cli/openai/chat-completions/gemini-cli_openai_response.go b/internal/translator/gemini-cli/openai/chat-completions/gemini-cli_openai_response.go index 7cb49a68..73df7a7c 100644 --- a/internal/translator/gemini-cli/openai/chat-completions/gemini-cli_openai_response.go +++ b/internal/translator/gemini-cli/openai/chat-completions/gemini-cli_openai_response.go @@ -45,10 +45,6 @@ func ConvertCliResponseToOpenAI(_ context.Context, _ string, originalRequestRawJ } } - if len(bytes.TrimSpace(rawJSON)) == 0 { - return []string{} - } - if bytes.Equal(rawJSON, []byte("[DONE]")) { return []string{} }