The retrieve() method returns a list of QuerySolution objects:
from remem.utils.misc_utils import QuerySolution# Each QuerySolution contains:result = results[0]result.question # str: Original queryresult.docs # List[str]: Retrieved passagesresult.doc_scores # List[float]: Relevance scoresresult.graph_seeds # List: Facts used as graph seedsresult.doc_metadata # List[Dict]: Metadata for each passage
# Via config (default for all retrievals)config = BaseConfig( retrieval_top_k=200 # Retrieve top 200 passages)# Or per-queryresults = remem.retrieve(queries, num_to_retrieve=50)
config = BaseConfig( linking_top_k=5, # Entities to link at each retrieval step synonymy_edge_topk=2047, # KNN neighbors for synonym detection synonymy_edge_sim_threshold=0.8 # Synonym similarity threshold)
config = BaseConfig( passage_node_weight=0.05, # Multiplicative factor for passage nodes in PPR damping=0.5 # Random walk damping (higher = more local))
If no relevant facts are found after reranking, REMem automatically falls back to dense passage retrieval (DPR) using only embeddings.
# From remem.py:523-529if len(top_k_triples) == 0: logger.info("No triple found after reranking, return DPR results") sorted_chunk_ids, sorted_chunk_scores = self.dense_passage_retrieval(query)else: # Use query-to-triple to search on the graph sorted_chunk_ids, sorted_chunk_scores = self.graph_search_with_fact_entities(...)
Retrieved passages include metadata when available:
results = remem.retrieve(queries)for result in results: for doc, metadata in zip(result.docs[:5], result.doc_metadata[:5]): if metadata: print(f"Date: {metadata.get('date')}") print(f"Role: {metadata.get('role')}") print(f"Content: {metadata.get('content')}")