From d5751dad054b1b7fb26b987e56c9b665619e35bc Mon Sep 17 00:00:00 2001 From: Bryce Dorn Date: Thu, 1 Jun 2023 19:02:04 +0200 Subject: [PATCH] add polyfill for readable stream async iterable support --- package-lock.json | 15 ++++++++++++--- package.json | 9 +++++++-- src/chat-stream-handler.ts | 21 ++++++++++++++++++++- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1bced4d..1d0b813 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "openai-streaming-hooks", - "version": "1.0.4", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openai-streaming-hooks", - "version": "1.0.4", + "version": "2.0.0", "license": "MIT", "dependencies": { - "react": "^18.2.0" + "react": "^18.2.0", + "web-streams-polyfill": "^3.2.1" }, "devDependencies": { "@testing-library/react": "^14.0.0", @@ -5669,6 +5670,14 @@ "node": ">=14" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 38a48ff..05db927 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,11 @@ "test:coverage": "vitest run --coverage", "prettier": "prettier --write ." }, - "keywords": ["react", "react-hooks", "openai"], + "keywords": [ + "react", + "react-hooks", + "openai" + ], "author": "jonrhall", "contributors": [ { @@ -25,7 +29,8 @@ ], "license": "MIT", "dependencies": { - "react": "^18.2.0" + "react": "^18.2.0", + "web-streams-polyfill": "^3.2.1" }, "devDependencies": { "@testing-library/react": "^14.0.0", diff --git a/src/chat-stream-handler.ts b/src/chat-stream-handler.ts index 807f398..b795344 100644 --- a/src/chat-stream-handler.ts +++ b/src/chat-stream-handler.ts @@ -1,3 +1,5 @@ +import { ReadableStream } from "web-streams-polyfill/ponyfill"; + import type { OpenAIStreamingParams, OpenAIChatMessage, @@ -60,7 +62,24 @@ export const openAiStreamingDataHandler = async ( let content = ''; let role = ''; - for await (const newData of response.body as unknown as NodeJS.ReadableStream) { + const reader = response.body.getReader(); + const stream = new ReadableStream({ + start(controller) { + return pump(); + async function pump(): Promise { + return reader.read().then(({ done, value }) => { + if (done) { + controller.close(); + return; + } + controller.enqueue(value); + return pump(); + }); + } + }, + }); + + for await (const newData of stream) { // Decode the data const decodedData = textDecoder.decode(newData as Buffer); // Split the data into lines to process