Class: Mneme::PassiveRecall

Inherits:
Object
  • Object
show all
Defined in:
lib/mneme/passive_recall.rb

Overview

Passive recall — automatic memory surfacing triggered by Goal updates. When goals are created or updated, searches message history for related context and enqueues phantom tool_call/tool_response pairs via the PendingMessage pipeline.

Phantom pairs are promoted into real Message records by Session#promote_pending_messages! between agent loop rounds, then ride the conveyor belt like regular messages — cached as part of the stable prefix, compressed by Mneme on eviction.

Examples:

Trigger after a goal update

Mneme::PassiveRecall.new(session).call

Constant Summary collapse

TOOL_PAIR_OVERHEAD_TOKENS =

Estimated token overhead for a tool_use wrapper (name + input fields).

50

Instance Method Summary collapse

Constructor Details

#initialize(session) ⇒ PassiveRecall

Returns a new instance of PassiveRecall.

Parameters:

  • session (Session)

    the session whose goals drive recall



21
22
23
# File 'lib/mneme/passive_recall.rb', line 21

def initialize(session)
  @session = session
end

Instance Method Details

#callInteger

Searches message history using active goal descriptions as queries. Enqueues phantom recall pairs for new results not already recalled.

Returns:

  • (Integer)

    number of pending messages created



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/mneme/passive_recall.rb', line 29

def call
  goals = @session.goals.active.root.includes(:sub_goals)
  return 0 if goals.empty?

  search_terms = build_search_terms(goals)
  return 0 if search_terms.blank?

  results = Mneme::Search.query(search_terms, limit: Anima::Settings.recall_max_results)
  results = filter_duplicates(results)

  enqueue_pending_messages(results)
end