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