countUserPromptsInMessages function
Count user messages with visible text content in a list of non-sidechain messages. Excludes tool_result blocks, terminal output, and empty messages.
Callers should pass messages already filtered to exclude sidechain messages.
Implementation
int countUserPromptsInMessages(List<PromptCountMessage> messages) {
var count = 0;
for (final message in messages) {
if (message.type != 'user') {
continue;
}
final content = message.content;
if (content == null) {
continue;
}
bool hasUserText = false;
if (content is String) {
if (_isTerminalOutput(content)) {
continue;
}
hasUserText = content.trim().isNotEmpty;
} else if (content is List) {
hasUserText = content.any((block) {
if (block is! Map<String, dynamic>) {
return false;
}
final blockType = block['type'];
if (blockType == 'text') {
final text = block['text'];
return text is String && !_isTerminalOutput(text);
}
return blockType == 'image' || blockType == 'document';
});
}
if (hasUserText) {
count++;
}
}
return count;
}