Skip to content

Commit 6a583b9

Browse files
Merge pull request #1 from axinc-ai/masa8/issue86
Avoid Unhandled exceptions being raised
2 parents 1f8e675 + f8e8871 commit 6a583b9

File tree

1 file changed

+24
-55
lines changed

1 file changed

+24
-55
lines changed

lib/src/core/networking/client.dart

Lines changed: 24 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -339,52 +339,30 @@ abstract class OpenAINetworkingClient {
339339
required T Function(Map<String, dynamic>) onSuccess,
340340
required Map<String, dynamic> body,
341341
http.Client? client,
342-
}) {
343-
final controller = StreamController<T>();
344-
342+
}) async* {
345343
try {
346344
final clientForUse = client ?? _streamingHttpClient();
347-
348345
final uri = Uri.parse(to);
349-
350346
final headers = HeadersBuilder.build();
351-
352347
final httpMethod = OpenAIStrings.postMethod;
353-
354348
final request = http.Request(httpMethod, uri);
355-
356349
request.headers.addAll(headers);
357-
358350
request.body = jsonEncode(body);
359351

360-
Future<void> close() {
361-
return Future.wait([
362-
if (client == null) Future.delayed(Duration.zero, clientForUse.close),
363-
controller.close(),
364-
]);
365-
}
366-
367352
OpenAILogger.logStartRequest(to);
353+
try {
354+
final respond = await clientForUse.send(request);
368355

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 {
379357
OpenAILogger.startReadStreamResponse();
380-
381358
final stream = respond.stream
382359
.transform(utf8.decoder)
383360
.transform(openAIChatStreamLineSplitter);
384361

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)) {
388366
final data = value;
389367
respondData += data;
390368

@@ -398,14 +376,10 @@ abstract class OpenAINetworkingClient {
398376
final String data = line.substring(6);
399377
if (data.contains(OpenAIStrings.streamResponseEnd)) {
400378
OpenAILogger.streamResponseDone();
401-
402-
return;
379+
break;
403380
}
404-
405381
final decoded = jsonDecode(data) as Map<String, dynamic>;
406-
407-
controller.add(onSuccess(decoded));
408-
382+
yield onSuccess(decoded);
409383
continue;
410384
}
411385

@@ -422,29 +396,24 @@ abstract class OpenAINetworkingClient {
422396
final statusCode = respond.statusCode;
423397
final exception = RequestFailedException(message, statusCode);
424398

425-
controller.addError(exception);
399+
yield* Stream<T>.error(error); // Error cases sent from openai
426400
}
427401
}
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+
}
443414
} catch (e) {
444-
controller.addError(e);
415+
yield* Stream<T>.error(e); //Error cases in making request
445416
}
446-
447-
return controller.stream;
448417
}
449418

450419
static Future imageEditForm<T>({

0 commit comments

Comments
 (0)