From 50683e66004b8aaac3294b641bcf5e057a2e6efa Mon Sep 17 00:00:00 2001 From: Chris Staley Date: Thu, 2 Apr 2026 16:41:10 -0600 Subject: [PATCH] =?UTF-8?q?fix(gemini):=20correct=20misleading=20SAFETY=20?= =?UTF-8?q?comment=20=E2=80=94=20partial=20SSE=20content=20is=20unavoidabl?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The comment claimed "leave no text content" but any text chunks streamed before the SAFETY finish reason have already been emitted. Updated to accurately describe the behavior. --- open-sse/translator/response/gemini-to-claude.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/open-sse/translator/response/gemini-to-claude.ts b/open-sse/translator/response/gemini-to-claude.ts index 7e5bb94e6f..a9b438ab05 100644 --- a/open-sse/translator/response/gemini-to-claude.ts +++ b/open-sse/translator/response/gemini-to-claude.ts @@ -172,9 +172,9 @@ export function geminiToClaudeResponse(chunk, state) { } else if (reason === "max_tokens" || reason === "length") { stopReason = "max_tokens"; } else if (reason === "safety" || reason === "recitation" || reason === "blocklist") { - // Content was blocked by Gemini safety filters — map to end_turn but leave - // no text content so the client sees an empty response rather than silently - // appearing normal. The caller can inspect the raw finishReason if needed. + // Content blocked by Gemini safety. Any text streamed before this finish + // reason has already been emitted to the client — this is unavoidable in + // SSE streaming. Map to end_turn (Claude has no "content blocked" reason). stopReason = "end_turn"; } else { stopReason = "end_turn";