sendMessageStream method
Stream<Message>
sendMessageStream(
- ConversationHandle conversation,
- String messageJson, {
- String? extraContextJson,
override
Implementation
@override
Stream<Message> sendMessageStream(
ConversationHandle conversation,
String messageJson, {
String? extraContextJson,
}) {
if (extraContextJson != null) {
return Stream.error(
UnsupportedError(
'Per-message extraContext is not supported by the LiteRT-LM JS SDK. '
'Use ConversationConfig.extraContext on web.',
),
);
}
final jsConversation = conversation as _WebConversationHandle;
late StreamController<Message> controller;
JSObject? streamCallback;
controller = StreamController<Message>(
onListen: () {
final onChunk = ((JSAny chunk) {
controller.add(Message.fromJsonString(_stringifyJson(chunk)));
}).toJS;
final onError = ((JSAny error) {
controller.addError(LiteRtLmException(error.toString()));
unawaited(controller.close());
}).toJS;
final onDone = (() {
unawaited(controller.close());
}).toJS;
streamCallback = _startMessageStream(
jsConversation.conversation,
_parseJson(messageJson),
onChunk,
onError,
onDone,
);
},
onCancel: () {
final callback = streamCallback;
if (callback != null) {
callback.callMethod<JSAny?>('cancel'.toJS);
}
return null;
},
);
return controller.stream;
}