Files
webapp-conversation/app/api/utils/stream.ts
2023-06-10 14:04:40 +08:00

26 lines
780 B
TypeScript

export async function OpenAIStream(res: { body: any }) {
const reader = res.body.getReader()
const stream = new ReadableStream({
// https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams
// https://github.com/whichlight/chatgpt-api-streaming/blob/master/pages/api/OpenAIStream.ts
start(controller) {
return pump()
function pump() {
return reader.read().then(({ done, value }: any) => {
// When no more data needs to be consumed, close the stream
if (done) {
controller.close()
return
}
// Enqueue the next data chunk into our target stream
controller.enqueue(value)
return pump()
})
}
},
})
return stream
}