fix(chat): disable buffering for sse stream responses
This commit is contained in:
parent
c5fce7359b
commit
cd9cadbb61
@ -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");
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user