fix(chat): disable buffering for sse stream responses
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-02-19 01:04:19 +08:00
parent c5fce7359b
commit cd9cadbb61

View File

@ -223,6 +223,17 @@ function writeAssistantTextChunk(
return messageId;
}
function createSseResponse(stream: ReadableStream) {
return new Response(stream.pipeThrough(new JsonToSseTransformStream()), {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache, no-transform",
Connection: "keep-alive",
"X-Accel-Buffering": "no",
},
});
}
function startStreamKeepalive(writer: StreamWriter, label: string, intervalMs = 15000) {
const timer = setInterval(() => {
safeWriteStreamChunk(
@ -1417,7 +1428,7 @@ export async function POST(request: Request) {
});
},
});
return new Response(duplicateStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(duplicateStream);
}
inFlightChatRequests.set(requestDedupKey, now);
acquiredInFlightLock = true;
@ -2104,7 +2115,7 @@ export async function POST(request: Request) {
});
},
});
return new Response(duplicateStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(duplicateStream);
}
const streamId = generateUUID();
@ -2173,7 +2184,7 @@ export async function POST(request: Request) {
},
});
return new Response(clarificationStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(clarificationStream);
}
let finalMergedUsage: AppUsage | undefined;
@ -2672,7 +2683,7 @@ export async function POST(request: Request) {
},
});
return new Response(geminiStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(geminiStream);
}
// ========== Gemini 处理结束 ==========
@ -3010,7 +3021,7 @@ export async function POST(request: Request) {
},
});
return new Response(alibabaStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(alibabaStream);
}
// ========== 阿里云图片生成处理结束 ==========
@ -3342,7 +3353,7 @@ export async function POST(request: Request) {
},
});
return new Response(volcanoStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(volcanoStream);
}
// ========== 火山引擎视觉处理结束 ==========
@ -3488,7 +3499,7 @@ export async function POST(request: Request) {
},
});
return new Response(qianwenVideoStream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(qianwenVideoStream);
}
// ========== 千问/FAL 视频处理结束 ==========
@ -4267,7 +4278,7 @@ export async function POST(request: Request) {
// );
// }
return new Response(stream.pipeThrough(new JsonToSseTransformStream()));
return createSseResponse(stream);
} catch (error) {
const vercelId = request.headers.get("x-vercel-id");