@@ -158,6 +158,32 @@ export class AssistantStream
158
158
} ;
159
159
}
160
160
161
+ static fromReadableStream ( stream : ReadableStream ) : AssistantStream {
162
+ const runner = new AssistantStream ( ) ;
163
+ runner . _run ( ( ) => runner . _fromReadableStream ( stream ) ) ;
164
+ return runner ;
165
+ }
166
+
167
+ protected async _fromReadableStream (
168
+ readableStream : ReadableStream ,
169
+ options ?: Core . RequestOptions ,
170
+ ) : Promise < Run > {
171
+ const signal = options ?. signal ;
172
+ if ( signal ) {
173
+ if ( signal . aborted ) this . controller . abort ( ) ;
174
+ signal . addEventListener ( 'abort' , ( ) => this . controller . abort ( ) ) ;
175
+ }
176
+ this . _connected ( ) ;
177
+ const stream = Stream . fromReadableStream < AssistantStreamEvent > ( readableStream , this . controller ) ;
178
+ for await ( const event of stream ) {
179
+ this . #handleEvent( event ) ;
180
+ }
181
+ if ( stream . controller . signal ?. aborted ) {
182
+ throw new APIUserAbortError ( ) ;
183
+ }
184
+ return this . _addRun ( this . #endRequest( ) ) ;
185
+ }
186
+
161
187
toReadableStream ( ) : ReadableStream {
162
188
const stream = new Stream ( this [ Symbol . asyncIterator ] . bind ( this ) , this . controller ) ;
163
189
return stream . toReadableStream ( ) ;
@@ -385,7 +411,7 @@ export class AssistantStream
385
411
throw new OpenAIError ( `stream has ended, this shouldn't happen` ) ;
386
412
}
387
413
388
- if ( ! this . #finalRun) throw Error ( 'Final run has been been received' ) ;
414
+ if ( ! this . #finalRun) throw Error ( 'Final run has not been received' ) ;
389
415
390
416
return this . #finalRun;
391
417
}
0 commit comments