Content _aggregate()

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