stripImagesFromMessages function
Strip image and document blocks from user messages before compaction.
Images are not needed for generating a conversation summary and can cause the compaction API call itself to hit the prompt-too-long limit. Replaces image blocks with a text marker so the summary still notes that an image was shared.
Implementation
List<Message> stripImagesFromMessages(List<Message> messages) {
return messages.map((message) {
if (message.role != MessageRole.user) return message;
bool hasMediaBlock = false;
final newContent = <ContentBlock>[];
for (final block in message.content) {
if (block is ImageBlock) {
hasMediaBlock = true;
newContent.add(const TextBlock('[image]'));
} else if (block is ToolResultBlock) {
// Tool results are text-only in our model, so pass through.
newContent.add(block);
} else {
newContent.add(block);
}
}
if (!hasMediaBlock) return message;
return Message(
id: message.id,
role: message.role,
content: newContent,
stopReason: message.stopReason,
usage: message.usage,
);
}).toList();
}