chat method

Observable<String> chat(
  1. String profileId,
  2. String prompt
)

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();
}