extractFromConversation method

List<MemoryCandidate> extractFromConversation(
  1. List<Map<String, dynamic>> messages
)

Extract memory candidates from a list of conversation messages.

Each message is expected to be a map with at least a role and content key.

Implementation

List<MemoryCandidate> extractFromConversation(
  List<Map<String, dynamic>> messages,
) {
  final candidates = <MemoryCandidate>[];

  for (final msg in messages) {
    final content = msg['content']?.toString() ?? '';
    if (content.length < 10) continue;

    // User-explicit memories.
    if (_isExplicitMemory(content)) {
      candidates.add(
        MemoryCandidate(
          content: _cleanExplicitMemory(content),
          source: ExtractionSource.userExplicit,
          category: classifyMemory(content).category,
          confidence: 0.95,
          reasoning: 'User explicitly asked to remember this.',
        ),
      );
      continue;
    }

    candidates.addAll(_matchPatterns(content, ExtractionSource.conversation));
  }

  return _filterAndCap(candidates);
}