Class: SmartBrain::Retrievers::MemoryRetriever
- Inherits:
-
Object
- Object
- SmartBrain::Retrievers::MemoryRetriever
- Defined in:
- lib/smart_brain/retrievers/memory_retriever.rb
Instance Method Summary collapse
-
#initialize(config:) ⇒ MemoryRetriever
constructor
A new instance of MemoryRetriever.
-
#retrieve(query:, memory_store:, session_id:, recent_turns:, entities:, refs:, scope_ids: nil, limit: nil) ⇒ Object
Memory evidence is resolved by the store itself: - MemoryStore::Postgres#search_memory → ts_rank-ranked FTS - MemoryStore::InMemory#search_memory → ExactRetriever over active items Turn matching stays in-memory over the recent window (small), and relational matching (entities/refs) stays in-memory as before.
Constructor Details
#initialize(config:) ⇒ MemoryRetriever
Returns a new instance of MemoryRetriever.
9 10 11 12 13 |
# File 'lib/smart_brain/retrievers/memory_retriever.rb', line 9 def initialize(config:) @config = config @exact = ExactRetriever.new @relational = RelationalRetriever.new(config: config) end |
Instance Method Details
#retrieve(query:, memory_store:, session_id:, recent_turns:, entities:, refs:, scope_ids: nil, limit: nil) ⇒ Object
Memory evidence is resolved by the store itself:
- MemoryStore::Postgres#search_memory → ts_rank-ranked FTS
- MemoryStore::InMemory#search_memory → ExactRetriever over active items
Turn matching stays in-memory over the recent window (small), and relational matching (entities/refs) stays in-memory as before.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/smart_brain/retrievers/memory_retriever.rb', line 20 def retrieve(query:, memory_store:, session_id:, recent_turns:, entities:, refs:, scope_ids: nil, limit: nil) limit ||= config.composition.fetch(:evidence_max_items, 12) ids = Array(scope_ids).compact memory_hits = if ids.empty? memory_store.search_memory(query: query, session_id: session_id, limit: limit) else ids.flat_map do |scope_id| memory_store.search_memory(query: query, scope_ids: [scope_id], limit: limit) end end turn_hits = exact.retrieve(query: query, memory_items: [], recent_turns: recent_turns, limit: limit) relational_hits = relational.retrieve(query: query, entities: entities, refs: refs, limit: limit) graph_hits = graph_evidence( query: query, entities: entities, memory_store: memory_store, session_id: session_id, scope_ids: scope_ids ) (memory_hits + turn_hits + relational_hits + graph_hits) .sort_by { |h| -h.fetch(:score, 0.0) } end |