concat method
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');
}
}