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";