Class: Llmemory::Retrieval::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/llmemory/retrieval/engine.rb

Constant Summary collapse

RELEVANCE_THRESHOLD =
0.7

Instance Method Summary collapse

Constructor Details

#initialize(memory, llm: nil) ⇒ Engine

Returns a new instance of Engine.



13
14
15
16
17
18
19
20
# File 'lib/llmemory/retrieval/engine.rb', line 13

def initialize(memory, llm: nil)
  @memory = memory
  @llm = llm || Llmemory::LLM.client
  @ranker = TemporalRanker.new
  @assembler = ContextAssembler.new
  @bm25_scorer = Bm25Scorer.new
  @mmr_reranker = MmrReranker.new(lambda: Llmemory.configuration.mmr_lambda)
end

Instance Method Details

#retrieve_for_inference(user_message, user_id: nil, max_tokens: nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/llmemory/retrieval/engine.rb', line 22

def retrieve_for_inference(user_message, user_id: nil, max_tokens: nil)
  user_id ||= @memory.respond_to?(:user_id) ? @memory.user_id : nil
  search_query = generate_query(user_message)
  candidates = fetch_candidates(search_query, user_id)
  candidates = apply_hybrid_scoring(candidates, search_query) if Llmemory.configuration.hybrid_search_enabled

  relevant = filter_by_relevance(candidates, user_message)
  ranked = @ranker.rank(relevant)
  ranked = @mmr_reranker.rerank(ranked) if Llmemory.configuration.mmr_enabled
  @assembler.assemble(ranked, max_tokens: max_tokens)
end