chat method
Sends a prompt
to the specified profileId
.
Implementation
Observable<String> chat(String profileId, String prompt) {
final clientRequestId = generateId();
var accumulatedValue = '';
final subject = Subject<String>();
final tokenSequence = Subject<(String value, bool complete)>();
_ongoingChatExecutions[clientRequestId] = tokenSequence;
tokenSequence.concatMap((r) {
final (value, complete) = r;
if (complete) {
return just((value, complete));
}
return just(value)
.delayTime(Duration(milliseconds: 5))
.map((char) => (char, false));
}).takeWhile((r) {
final (_, complete) = r;
return !complete;
}, inclusive: true).subscribe(Observer(
next: (r) {
final (value, _) = r;
accumulatedValue += value;
subject.next(accumulatedValue);
},
error: (e, stack) => subject.error(e, stack),
complete: () => subject.complete(),
));
_rpcManager
.post(
'ai/assistant/chat',
AiAssistantRequest.chat(
profileId: profileId,
integrationId: _integrationId,
clientId: _clientIdService.clientId,
clientRequestId: clientRequestId,
prompt: prompt))
.catchError((e, stack) => subject.error(e, stack));
return subject
.finalize(() => _ongoingChatExecutions.remove(clientRequestId))
.share();
}