in pkgs/google_generative_ai/lib/src/chat.dart [133:166]
Content _aggregate(List<Content> contents) {
assert(contents.isNotEmpty);
final role = contents.first.role ?? 'model';
final textBuffer = StringBuffer();
// If non-null, only a single text part has been seen.
TextPart? previousText;
final parts = <Part>[];
void addBufferedText() {
if (textBuffer.isEmpty) return;
if (previousText case final singleText?) {
parts.add(singleText);
previousText = null;
} else {
parts.add(TextPart(textBuffer.toString()));
}
textBuffer.clear();
}
for (final content in contents) {
for (final part in content.parts) {
if (part case TextPart(:final text)) {
if (text.isNotEmpty) {
previousText = textBuffer.isEmpty ? part : null;
textBuffer.write(text);
}
} else {
addBufferedText();
parts.add(part);
}
}
}
addBufferedText();
return Content(role, parts);
}