Stream sendMessageStream()

in pkgs/google_generative_ai/lib/src/chat.dart [101:126]


  Stream<GenerateContentResponse> sendMessageStream(Content message) {
    final controller = StreamController<GenerateContentResponse>(sync: true);
    _mutex.acquire().then((lock) async {
      try {
        final responses = _generateContentStream(_history.followedBy([message]),
            safetySettings: _safetySettings,
            generationConfig: _generationConfig);
        final content = <Content>[];
        await for (final response in responses) {
          if (response.candidates case [final candidate, ...]) {
            content.add(candidate.content);
          }
          controller.add(response);
        }
        if (content.isNotEmpty) {
          _history.add(message);
          _history.add(_aggregate(content));
        }
      } catch (e, s) {
        controller.addError(e, s);
      }
      lock.release();
      unawaited(controller.close());
    });
    return controller.stream;
  }