concat method

  1. @override
HumanChatMessage concat(
  1. ChatMessage other
)
override

Merges this message with another by concatenating the content.

Implementation

@override
HumanChatMessage concat(final ChatMessage other) {
  if (other is! HumanChatMessage) {
    return this;
  }

  final thisContent = content;
  final otherContent = other.content;

  if (thisContent is ChatMessageContentText) {
    return switch (otherContent) {
      ChatMessageContentText(text: final text) => HumanChatMessage(
          content: ChatMessageContent.text(thisContent.text + text),
        ),
      final ChatMessageContentImage image => HumanChatMessage(
          content: ChatMessageContentMultiModal(parts: [thisContent, image]),
        ),
      final ChatMessageContentMultiModal multiModal => HumanChatMessage(
          content: ChatMessageContentMultiModal(
            parts: [thisContent, ...multiModal.parts],
          ),
        ),
    };
  } else if (thisContent is ChatMessageContentImage) {
    return switch (otherContent) {
      final ChatMessageContentText text => HumanChatMessage(
          content: ChatMessageContentMultiModal(parts: [thisContent, text]),
        ),
      final ChatMessageContentImage image => HumanChatMessage(
          content: ChatMessageContentMultiModal(parts: [thisContent, image]),
        ),
      final ChatMessageContentMultiModal multiModal => HumanChatMessage(
          content: ChatMessageContentMultiModal(
            parts: [thisContent, ...multiModal.parts],
          ),
        ),
    };
  } else if (thisContent is ChatMessageContentMultiModal) {
    return switch (otherContent) {
      final ChatMessageContentText text => HumanChatMessage(
          content: ChatMessageContentMultiModal(
            parts: [...thisContent.parts, text],
          ),
        ),
      final ChatMessageContentImage image => HumanChatMessage(
          content: ChatMessageContentMultiModal(
            parts: [...thisContent.parts, image],
          ),
        ),
      final ChatMessageContentMultiModal multiModal => HumanChatMessage(
          content: ChatMessageContentMultiModal(
            parts: [...thisContent.parts, ...multiModal.parts],
          ),
        ),
    };
  } else {
    throw ArgumentError('Unknown ChatMessageContent type: $thisContent');
  }
}