@@ -2,6 +2,7 @@ import { OpenAIError } from './error';
22import { type ReadableStream } from './internal/shim-types' ;
33import { makeReadableStream } from './internal/shims' ;
44import { LineDecoder } from './internal/decoders/line' ;
5+ import { ReadableStreamToAsyncIterable } from './internal/shims' ;
56
67import { APIError } from './error' ;
78
@@ -97,7 +98,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
9798 async function * iterLines ( ) : AsyncGenerator < string , void , unknown > {
9899 const lineDecoder = new LineDecoder ( ) ;
99100
100- const iter = readableStreamAsyncIterable < Bytes > ( readableStream ) ;
101+ const iter = ReadableStreamToAsyncIterable < Bytes > ( readableStream ) ;
101102 for await ( const chunk of iter ) {
102103 for ( const line of lineDecoder . decode ( chunk ) ) {
103104 yield line ;
@@ -211,7 +212,7 @@ export async function* _iterSSEMessages(
211212 const sseDecoder = new SSEDecoder ( ) ;
212213 const lineDecoder = new LineDecoder ( ) ;
213214
214- const iter = readableStreamAsyncIterable < Bytes > ( response . body ) ;
215+ const iter = ReadableStreamToAsyncIterable < Bytes > ( response . body ) ;
215216 for await ( const sseChunk of iterSSEChunks ( iter ) ) {
216217 for ( const line of lineDecoder . decode ( sseChunk ) ) {
217218 const sse = sseDecoder . decode ( line ) ;
@@ -364,36 +365,3 @@ function partition(str: string, delimiter: string): [string, string, string] {
364365
365366 return [ str , '' , '' ] ;
366367}
367-
368- /**
369- * Most browsers don't yet have async iterable support for ReadableStream,
370- * and Node has a very different way of reading bytes from its "ReadableStream".
371- *
372- * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
373- */
374- export function readableStreamAsyncIterable < T > ( stream : any ) : AsyncIterableIterator < T > {
375- if ( stream [ Symbol . asyncIterator ] ) return stream ;
376-
377- const reader = stream . getReader ( ) ;
378- return {
379- async next ( ) {
380- try {
381- const result = await reader . read ( ) ;
382- if ( result ?. done ) reader . releaseLock ( ) ; // release lock when stream becomes closed
383- return result ;
384- } catch ( e ) {
385- reader . releaseLock ( ) ; // release lock when stream becomes errored
386- throw e ;
387- }
388- } ,
389- async return ( ) {
390- const cancelPromise = reader . cancel ( ) ;
391- reader . releaseLock ( ) ;
392- await cancelPromise ;
393- return { done : true , value : undefined } ;
394- } ,
395- [ Symbol . asyncIterator ] ( ) {
396- return this ;
397- } ,
398- } ;
399- }
0 commit comments