diff --git a/src-tauri/src/proxy/handlers/gemini.rs b/src-tauri/src/proxy/handlers/gemini.rs index 9fa2c2a33..6c80d474d 100644 --- a/src-tauri/src/proxy/handlers/gemini.rs +++ b/src-tauri/src/proxy/handlers/gemini.rs @@ -343,7 +343,9 @@ pub async fn handle_generate( Some(Ok(b)) => b, Some(Err(e)) => { error!("[Gemini-SSE] Connection error: {}", e); - yield Err(format!("Stream error: {}", e)); + // Yield error as SSE content to prevent hyper aborting chunked encoding (TransferEncodingError) + let error_msg = format!("{}", e).replace('"', "'"); + yield Ok(Bytes::from(format!("data: {{\"error\":{{\"message\":\"{}\",\"type\":\"stream_error\"}}}}\n\n", error_msg))); break; } None => break, diff --git a/src-tauri/src/proxy/mappers/claude/mod.rs b/src-tauri/src/proxy/mappers/claude/mod.rs index 9ae853006..a59cc438b 100644 --- a/src-tauri/src/proxy/mappers/claude/mod.rs +++ b/src-tauri/src/proxy/mappers/claude/mod.rs @@ -82,7 +82,9 @@ where } } Err(e) => { - yield Err(format!("Stream error: {}", e)); + // Yield error as SSE content to prevent hyper aborting chunked encoding (TransferEncodingError) + let error_msg = format!("{}", e).replace('"', "'"); + yield Ok(Bytes::from(format!("event: error\ndata: {{\"error\":{{\"message\":\"{}\",\"type\":\"stream_error\"}}}}\n\n", error_msg))); break; } }