Memory System
Multi-Tenant Manager
Ensures data isolation, security, and quota management for SaaS deployments.
Storage: All DBs (Namespaced)
Purpose
The Multi-Tenant Manager guarantees that data from Tenant A serves only Tenant A. It enforces strict isolation across all memory storage layers (Vector, Graph, SQL).
Key Features
- Label Security: Injects Tenant Labels into every Neo4j query to partition the graph.
- RBAC: Graph-based role checks (
:User-[:HAS_ROLE]->:Tenant). - Quotas: Enforces storage limits per tenant to prevent noisy neighbor issues.
Functional Deep Dive
Label Security
In Neo4j, every node created is tagged with a Tenant Label (e.g., :Tenant_A). All retrieval queries automatically inject this label constraint, ensuring users never see data from other tenants.
Vector Filtering
In Qdrant, payload filters strictly enforce tenant_id match for every search operation.
Isolation Diagram
API Reference
Multi-Tenant Manager provides endpoints for tenant isolation and quotas.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/memory/v1/tenants | Create tenant |
| GET | /api/memory/v1/tenants | List all tenants |
| GET | /api/memory/v1/tenants/tenant_id | Get tenant details |
| PUT | /api/memory/v1/tenants/tenant_id | Update tenant |
| DELETE | /api/memory/v1/tenants/tenant_id | Delete tenant |
| GET | /api/memory/v1/tenants/tenant_id/usage | Get tenant usage |
| POST | /api/memory/v1/tenants/tenant_id/quota | Update quotas |
| POST | /api/memory/v1/tenants/tenant_id/batch-ingest | Batch ingest |
SDK Reference
The Functor SDK provides a Python interface for multi-tenant operations.