GitHub
Memory System

Memory Observer

Provides monitoring, metrics, and visualization for the memory system.

Storage: SQL (memory_access_logs), Prometheus

Purpose

The Memory Observer ensures the system is not a "black box". It provides visibility into how memory is being accessed, modified, and evolved over time.

Key Features

  • Real-time Streams: Pushes access events to Redis streams for live dashboards.
  • Graph Visualization: Exports GraphML snapshots for UI rendering of memory structures.

Functional Deep Dive

Logging

Logs every memory access to SQL memory_access_logs and updates memory_ttl timestamps to delay pruning for active items.

Metrics

Updates Prometheus counters (access frequency, latency) and gauges (total item counts, storage savings from deduplication).

Streaming

Pushes real-time access events to Redis streams, allowing admin dashboards to show a live "pulse" of the memory system.

API Reference

Memory Observer provides endpoints for monitoring and metrics.

MethodEndpointDescription
POST/api/memory/v1/observability/logLog memory access
GET/api/memory/v1/observability/statsGet memory statistics
GET/api/memory/v1/observability/access-logsQuery access logs
GET/api/memory/v1/observability/metricsGet Prometheus metrics
GET/api/memory/v1/observability/health/moduleGet module health
POST/api/memory/v1/observability/visualizeGenerate KG visualization

SDK Reference

The Functor SDK provides a Python interface for observability operations.

Monitoring and Metrics

from functor_sdk import FunctorClient
client = FunctorClient(api_key="your-api-key")
# Log memory access
client.memory.observability.log_access(
item_id="item_123",
item_type="episode",
access_type="read",
user_id="user_456",
session_id="session_789"
)
# Get memory statistics
stats = client.memory.observability.get_stats(
kg_name="user_knowledge",
time_window_hours=24
)
# Query access logs
logs = client.memory.observability.get_access_logs(
user_id="user_456",
item_type="episode",
limit=100
)
# Get Prometheus metrics
metrics = client.memory.observability.get_metrics()
# Get module health
health = client.memory.observability.get_module_health(module="episodic")
# Visualize knowledge graph
viz = client.memory.observability.visualize(
kg_name="user_knowledge",
format="json"
)