44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
import { loadStreams } from '@/util/chat-store';
|
|
import { createUIMessageStream, JsonToSseTransformStream } from 'ai';
|
|
import { after } from 'next/server';
|
|
import { createResumableStreamContext } from 'resumable-stream';
|
|
|
|
// Allow streaming responses up to 30 seconds
|
|
export const maxDuration = 30;
|
|
|
|
export async function GET(
|
|
request: Request,
|
|
{ params }: { params: Promise<{ id: string }> },
|
|
) {
|
|
const { id } = await params;
|
|
|
|
if (!id) {
|
|
return new Response('id is required', { status: 400 });
|
|
}
|
|
|
|
const streamIds = await loadStreams(id);
|
|
|
|
if (!streamIds.length) {
|
|
return new Response(null, { status: 204 });
|
|
}
|
|
|
|
const recentStreamId = streamIds.at(-1);
|
|
|
|
if (!recentStreamId) {
|
|
return new Response(null, { status: 204 });
|
|
}
|
|
|
|
const streamContext = createResumableStreamContext({
|
|
waitUntil: after,
|
|
});
|
|
|
|
const resumedStream =
|
|
await streamContext.resumeExistingStream(recentStreamId);
|
|
|
|
if (!resumedStream) {
|
|
return new Response(null, { status: 204 });
|
|
}
|
|
|
|
return new Response(resumedStream);
|
|
}
|