symfonic.memory.retrieval.engine¶
engine ¶
RetrievalEngine -- multi-layer query planning and retrieval.
Coordinates vector search, graph traversal, and multi-signal scoring to retrieve the most relevant memory entries across enabled layers.
RetrievalEngine ¶
RetrievalEngine(
graph_store: GraphMemoryStore,
vector_backend: VectorBackend,
scorer: RetrievalScorer,
traversal: GraphTraversal,
config: OrchestratorConfig,
)
Cross-layer retrieval engine with multi-signal scoring.
Combines vector similarity search with graph-aware re-ranking to surface the most relevant memory entries.
Source code in src/symfonic/memory/retrieval/engine.py
retrieve
async
¶
retrieve(
scope: TenantScope,
query: str,
layers: set[MemoryLayer] | None = None,
top_k: int | None = None,
embedding_provider: EmbeddingProvider | None = None,
query_context_node: NodeId | None = None,
) -> list[MemoryEntry]
Retrieve the most relevant memory entries for a query.
Steps: 1. Embed the query via embedding_provider. 2. Search vector_backend for candidate nodes (2x top_k). 3. Normalize all results into CandidateNode models. 4. Score candidates via the RetrievalScorer. 5. Filter by layers if specified. 6. Return top_k results as MemoryEntry list.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scope
|
TenantScope
|
Tenant scope for isolation. |
required |
query
|
str
|
Natural language query. |
required |
layers
|
set[MemoryLayer] | None
|
Optional set of layers to filter results. |
None
|
top_k
|
int | None
|
Number of results to return (defaults to config.default_top_k). |
None
|
embedding_provider
|
EmbeddingProvider | None
|
Provider for query embedding. |
None
|
query_context_node
|
NodeId | None
|
Optional node for graph proximity scoring. |
None
|
Returns:
| Type | Description |
|---|---|
list[MemoryEntry]
|
Sorted list of MemoryEntry instances. |
Source code in src/symfonic/memory/retrieval/engine.py
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | |
retrieve_by_graph
async
¶
retrieve_by_graph(
scope: TenantScope,
start_node: NodeId,
max_depth: int = 2,
) -> list[MemoryEntry]
Graph-first retrieval via BFS traversal.
Results are also normalized via CandidateNode for consistent scoring.