| 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; | |
| } |