sendMessageStream method
Sends a message to the conversation and streams the response.
Implementation
Stream<Message> sendMessageStream(
Message message, {
Map<String, Object?>? extraContext,
}) {
late StreamController<Message> controller;
var isCanceled = false;
controller = StreamController<Message>(
onListen: () {
sendMessageWithCallback(
message,
_ForwardingMessageCallback(
onMessage: (chunk) {
if (!isCanceled) {
controller.add(chunk);
}
},
onDone: () {
if (!isCanceled) {
unawaited(controller.close());
}
},
onError: (error, stackTrace) {
if (!isCanceled) {
controller.addError(error, stackTrace);
unawaited(controller.close());
}
},
),
extraContext: extraContext,
).ignore();
},
onCancel: () async {
isCanceled = true;
await cancel();
},
);
return controller.stream;
}