search method

List<Memory> search(
  1. String query, {
  2. int maxResults = 10,
})

Searches episodic memories whose content contains query tokens.

Results are ranked by: strength × recency × recall frequency.

Implementation

List<Memory> search(String query, {int maxResults = 10}) {
  final tokens = _tokenise(query);
  if (tokens.isEmpty) return [];

  final scored = <MapEntry<Memory, double>>[];
  for (final memory in _store.values) {
    final score = _scoreMemory(memory, tokens);
    if (score > 0.0) scored.add(MapEntry(memory, score));
  }

  scored.sort((a, b) => b.value.compareTo(a.value));

  // Reinforce recalled memories
  final results = scored.take(maxResults).map((e) {
    e.key.reinforce(amount: 0.05);
    return e.key;
  }).toList();

  _logger.debug(
      'Episodic search "$query": ${results.length} result(s)');
  return results;
}