@@ -339,52 +339,30 @@ abstract class OpenAINetworkingClient {
339
339
required T Function (Map <String , dynamic >) onSuccess,
340
340
required Map <String , dynamic > body,
341
341
http.Client ? client,
342
- }) {
343
- final controller = StreamController <T >();
344
-
342
+ }) async * {
345
343
try {
346
344
final clientForUse = client ?? _streamingHttpClient ();
347
-
348
345
final uri = Uri .parse (to);
349
-
350
346
final headers = HeadersBuilder .build ();
351
-
352
347
final httpMethod = OpenAIStrings .postMethod;
353
-
354
348
final request = http.Request (httpMethod, uri);
355
-
356
349
request.headers.addAll (headers);
357
-
358
350
request.body = jsonEncode (body);
359
351
360
- Future <void > close () {
361
- return Future .wait ([
362
- if (client == null ) Future .delayed (Duration .zero, clientForUse.close),
363
- controller.close (),
364
- ]);
365
- }
366
-
367
352
OpenAILogger .logStartRequest (to);
353
+ try {
354
+ final respond = await clientForUse.send (request);
368
355
369
- clientForUse
370
- .send (request)
371
- // .timeout(
372
- // OpenAIConfig.requestsTimeOut,
373
- // onTimeout: () {
374
- // throw TimeoutException("Request timed out");
375
- // },
376
- // )
377
- .then (
378
- (respond) {
356
+ try {
379
357
OpenAILogger .startReadStreamResponse ();
380
-
381
358
final stream = respond.stream
382
359
.transform (utf8.decoder)
383
360
.transform (openAIChatStreamLineSplitter);
384
361
385
- String respondData = "" ;
386
- stream.where ((event) => event.isNotEmpty).listen (
387
- (value) {
362
+ try {
363
+ String respondData = "" ;
364
+ await for (final value
365
+ in stream.where ((event) => event.isNotEmpty)) {
388
366
final data = value;
389
367
respondData += data;
390
368
@@ -398,14 +376,10 @@ abstract class OpenAINetworkingClient {
398
376
final String data = line.substring (6 );
399
377
if (data.contains (OpenAIStrings .streamResponseEnd)) {
400
378
OpenAILogger .streamResponseDone ();
401
-
402
- return ;
379
+ break ;
403
380
}
404
-
405
381
final decoded = jsonDecode (data) as Map <String , dynamic >;
406
-
407
- controller.add (onSuccess (decoded));
408
-
382
+ yield onSuccess (decoded);
409
383
continue ;
410
384
}
411
385
@@ -422,29 +396,24 @@ abstract class OpenAINetworkingClient {
422
396
final statusCode = respond.statusCode;
423
397
final exception = RequestFailedException (message, statusCode);
424
398
425
- controller. addError (exception);
399
+ yield * Stream < T >. error (error); // Error cases sent from openai
426
400
}
427
401
}
428
- },
429
- onDone: () {
430
- close ();
431
- },
432
- onError: (error, stackTrace) {
433
- controller.addError (error, stackTrace);
434
- },
435
- );
436
- },
437
- onError: (error, stackTrace) {
438
- controller.addError (error, stackTrace);
439
- },
440
- ).catchError ((e) {
441
- controller.addError (e);
442
- });
402
+ } // end of await for
403
+ } catch (error, stackTrace) {
404
+ yield * Stream <T >.error (
405
+ error, stackTrace); // Error cases in handling stream
406
+ }
407
+ } catch (error, stackTrace) {
408
+ yield * Stream <T >.error (error,
409
+ stackTrace); // Error cases in decoding stream from response
410
+ }
411
+ } catch (e) {
412
+ yield * Stream <T >.error (e); // Error cases in getting response
413
+ }
443
414
} catch (e) {
444
- controller. addError (e);
415
+ yield * Stream < T >. error (e); //Error cases in making request
445
416
}
446
-
447
- return controller.stream;
448
417
}
449
418
450
419
static Future imageEditForm <T >({
0 commit comments