symfonic.memory.backends.in_memory¶
in_memory ¶
In-memory backends for testing and prototyping.
InMemoryGraphBackend ¶
GraphBackend over dicts keyed by (tenant_id, node_id/edge_id).
Source code in src/symfonic/memory/backends/in_memory.py
add_edge
async
¶
Add an edge; native endpoints must already be live and visible.
Source code in src/symfonic/memory/backends/in_memory.py
add_node
async
¶
Stamp ownership; native writes cannot replace another owner.
Source code in src/symfonic/memory/backends/in_memory.py
delete_edge
async
¶
Delete an edge visible on this scope's exact ancestor chain.
Source code in src/symfonic/memory/backends/in_memory.py
delete_node
async
¶
Delete a node, optionally cascading to connected edges.
Source code in src/symfonic/memory/backends/in_memory.py
delete_subtree
async
¶
Erase owned subtree, edges and cursors in one non-yielding operation.
Source code in src/symfonic/memory/backends/in_memory.py
get_neighbors
async
¶
get_neighbors(scope: StorageScope, node_id: NodeId, relationship: str | None = None) -> list[MemoryNode]
Get nodes connected to the given node by edges.
Source code in src/symfonic/memory/backends/in_memory.py
get_node
async
¶
Get a node by ID on its visible ancestor chain.
Source code in src/symfonic/memory/backends/in_memory.py
patch_owned_node
async
¶
patch_owned_node(scope: StorageScope, node_id: NodeId, expected: OwnedNodeVersion, properties: dict[str, Any]) -> MemoryNode | None
Merge properties only if exact owner, incarnation and revision match.
Source code in src/symfonic/memory/backends/in_memory.py
query_edges
async
¶
query_edges(scope: StorageScope, filters: dict[str, Any] | None = None, limit: int | None = 50, offset: int = 0) -> list[MemoryEdge]
Query tenant edges, optionally restricted to induced endpoints.
Source code in src/symfonic/memory/backends/in_memory.py
query_nodes
async
¶
query_nodes(scope: StorageScope, filters: dict[str, Any], limit: int | None = 50) -> list[MemoryNode]
Filter visible nodes; None is unlimited and zero returns no rows.
Source code in src/symfonic/memory/backends/in_memory.py
query_subtree
async
¶
query_subtree(scope: StorageScope, filters: dict[str, Any], limit: int | None = None) -> list[MemoryNode]
Filter owned nodes at or below scope.
Source code in src/symfonic/memory/backends/in_memory.py
read_owned_node
async
¶
Return a detached exact-owner row with its immutable stored guard.
Source code in src/symfonic/memory/backends/in_memory.py
transaction ¶
All of a batch, or none of it -- see :mod:.in_memory_transaction.
traverse
async
¶
BFS traversal from start node up to max_depth.
Source code in src/symfonic/memory/backends/in_memory.py
update_node
async
¶
Partial update of node properties.
Source code in src/symfonic/memory/backends/in_memory.py
upsert_edge
async
¶
Insert or increment an edge matching scope, endpoints, and relation.
Source code in src/symfonic/memory/backends/in_memory.py
InMemoryVectorBackend ¶
In-memory implementation of the VectorBackend protocol.
Stores embeddings in a list and uses brute-force cosine similarity for search. Suitable for testing only.
Source code in src/symfonic/memory/backends/in_memory_vector.py
add
async
¶
add(scope: StorageScope, ids: list[str], embeddings: list[list[float]], metadatas: list[dict[str, Any]], documents: list[str]) -> None
Add vectors with metadata to the store.
v8.0: stamps the materialised scope_path into the metadata bag so
the prefix-isolation filter (§5.d) can run on every search.
Source code in src/symfonic/memory/backends/in_memory_vector.py
add_owned_batch
async
¶
Validate every native owner before changing vectors; never awaits.
Source code in src/symfonic/memory/backends/in_memory_vector.py
count
async
¶
Return the total number of stored vectors for the tenant.
Source code in src/symfonic/memory/backends/in_memory_vector.py
delete
async
¶
Delete vectors by their IDs.
Source code in src/symfonic/memory/backends/in_memory_vector.py
search
async
¶
search(scope: StorageScope, query_embedding: list[float], top_k: int = 5, *, allowed_scope_paths: tuple[str, ...] | None = None) -> list[dict[str, Any]]
Brute-force cosine similarity search.
v8.0: ALWAYS-ON prefix-isolation (§5.d) — only entries whose stored
scope_path is a prefix of the query path are scored. Dual-reads
pre-v8.0 metadata (no scope_path) as a 1-level root path.