batchExtract method
Run extraction over an entire session history and return ranked, deduplicated candidates.
Implementation
List<MemoryCandidate> batchExtract(
List<Map<String, dynamic>> sessionHistory, {
List<String> existingMemories = const [],
}) {
final all = <MemoryCandidate>[];
for (final entry in sessionHistory) {
final type = entry['type']?.toString();
switch (type) {
case 'message':
final messages = entry['messages'];
if (messages is List<Map<String, dynamic>>) {
all.addAll(extractFromConversation(messages));
}
case 'tool_output':
final tool = entry['tool']?.toString() ?? '';
final output = entry['output']?.toString() ?? '';
all.addAll(extractFromToolOutput(tool, output));
case 'code_change':
final diff = entry['diff']?.toString() ?? '';
final desc = entry['description']?.toString() ?? '';
all.addAll(extractFromCodeChange(diff, desc));
}
}
final deduped = deduplicateMemories(all, existingMemories);
return rankMemories(deduped);
}