@@ -5,6 +5,8 @@ import { findDoubleNewlineIndex, LineDecoder } from '../internal/decoders/line';
55import { ReadableStreamToAsyncIterable } from '../internal/shims' ;
66import { isAbortError } from '../internal/errors' ;
77import { encodeUTF8 } from '../internal/utils/bytes' ;
8+ import { loggerFor } from '../internal/utils/log' ;
9+ import type { OpenAI } from '../client' ;
810
911import { APIError } from './error' ;
1012
@@ -18,16 +20,24 @@ export type ServerSentEvent = {
1820
1921export class Stream < Item > implements AsyncIterable < Item > {
2022 controller : AbortController ;
23+ #client: OpenAI | undefined ;
2124
2225 constructor (
2326 private iterator : ( ) => AsyncIterator < Item > ,
2427 controller : AbortController ,
28+ client ?: OpenAI ,
2529 ) {
2630 this . controller = controller ;
31+ this . #client = client ;
2732 }
2833
29- static fromSSEResponse < Item > ( response : Response , controller : AbortController ) : Stream < Item > {
34+ static fromSSEResponse < Item > (
35+ response : Response ,
36+ controller : AbortController ,
37+ client ?: OpenAI ,
38+ ) : Stream < Item > {
3039 let consumed = false ;
40+ const logger = client ? loggerFor ( client ) : console ;
3141
3242 async function * iterator ( ) : AsyncIterator < Item , any , undefined > {
3343 if ( consumed ) {
@@ -54,8 +64,8 @@ export class Stream<Item> implements AsyncIterable<Item> {
5464 try {
5565 data = JSON . parse ( sse . data ) ;
5666 } catch ( e ) {
57- console . error ( `Could not parse message into JSON:` , sse . data ) ;
58- console . error ( `From chunk:` , sse . raw ) ;
67+ logger . error ( `Could not parse message into JSON:` , sse . data ) ;
68+ logger . error ( `From chunk:` , sse . raw ) ;
5969 throw e ;
6070 }
6171
@@ -91,14 +101,18 @@ export class Stream<Item> implements AsyncIterable<Item> {
91101 }
92102 }
93103
94- return new Stream ( iterator , controller ) ;
104+ return new Stream ( iterator , controller , client ) ;
95105 }
96106
97107 /**
98108 * Generates a Stream from a newline-separated ReadableStream
99109 * where each item is a JSON value.
100110 */
101- static fromReadableStream < Item > ( readableStream : ReadableStream , controller : AbortController ) : Stream < Item > {
111+ static fromReadableStream < Item > (
112+ readableStream : ReadableStream ,
113+ controller : AbortController ,
114+ client ?: OpenAI ,
115+ ) : Stream < Item > {
102116 let consumed = false ;
103117
104118 async function * iterLines ( ) : AsyncGenerator < string , void , unknown > {
@@ -138,7 +152,7 @@ export class Stream<Item> implements AsyncIterable<Item> {
138152 }
139153 }
140154
141- return new Stream ( iterator , controller ) ;
155+ return new Stream ( iterator , controller , client ) ;
142156 }
143157
144158 [ Symbol . asyncIterator ] ( ) : AsyncIterator < Item > {
@@ -168,8 +182,8 @@ export class Stream<Item> implements AsyncIterable<Item> {
168182 } ;
169183
170184 return [
171- new Stream ( ( ) => teeIterator ( left ) , this . controller ) ,
172- new Stream ( ( ) => teeIterator ( right ) , this . controller ) ,
185+ new Stream ( ( ) => teeIterator ( left ) , this . controller , this . #client ) ,
186+ new Stream ( ( ) => teeIterator ( right ) , this . controller , this . #client ) ,
173187 ] ;
174188 }
175189
0 commit comments