v2/docs/performance/PERFORMANCE-METRICS-GUIDE.md
The performance.json file has been enhanced with comprehensive metrics for tracking memory operations, mode usage, and ReasoningBank-specific performance.
{
"startTime": 1234567890,
"sessionId": "session-1234567890",
"lastActivity": 1234567890,
"sessionDuration": 12345
}
Tracks when the session started, unique session ID, last activity timestamp, and total session duration in milliseconds.
{
"memoryMode": {
"reasoningbankOperations": 45,
"basicOperations": 12,
"autoModeSelections": 50,
"modeOverrides": 7,
"currentMode": "auto"
}
}
Tracks which memory mode (ReasoningBank vs Basic/JSON) is being used, how often AUTO MODE selects each, and manual overrides.
{
"operations": {
"store": { "count": 20, "totalDuration": 1234, "errors": 0 },
"retrieve": { "count": 45, "totalDuration": 2345, "errors": 1 },
"query": { "count": 30, "totalDuration": 15000, "errors": 0 },
"list": { "count": 10, "totalDuration": 500, "errors": 0 },
"delete": { "count": 3, "totalDuration": 200, "errors": 0 },
"search": { "count": 25, "totalDuration": 12000, "errors": 0 },
"init": { "count": 1, "totalDuration": 500, "errors": 0 }
}
}
Detailed breakdown of each operation type with count, total duration, and error count.
{
"performance": {
"avgOperationDuration": 450.5,
"minOperationDuration": 10,
"maxOperationDuration": 5000,
"slowOperations": 3,
"fastOperations": 100,
"totalOperationTime": 45050
}
}
avgOperationDuration: Average time per operation (ms)minOperationDuration: Fastest operation time (ms)maxOperationDuration: Slowest operation time (ms)slowOperations: Count of operations > 5000msfastOperations: Count of operations < 100mstotalOperationTime: Cumulative time for all operations (ms){
"storage": {
"totalEntries": 150,
"reasoningbankEntries": 120,
"basicEntries": 30,
"databaseSize": 2048000,
"lastBackup": 1234567890,
"growthRate": 12.5
}
}
totalEntries: Total memory entries across all modesreasoningbankEntries: Entries in ReasoningBank databasebasicEntries: Entries in JSON storagedatabaseSize: Database file size in byteslastBackup: Timestamp of last backupgrowthRate: Entries per hour growth rate{
"errors": {
"total": 5,
"byType": {
"timeout": 2,
"connection": 1,
"validation": 2
},
"byOperation": {
"query": 3,
"store": 2
},
"recent": [
{
"operation": "query",
"type": "timeout",
"timestamp": 1234567890,
"mode": "reasoningbank"
}
]
}
}
Comprehensive error tracking by type, operation, and recent error history.
{
"reasoningbank": {
"semanticSearches": 45,
"sqlFallbacks": 12,
"embeddingGenerated": 40,
"consolidations": 3,
"avgQueryTime": 450.5,
"cacheHits": 25,
"cacheMisses": 20
}
}
semanticSearches: Number of semantic vector searchessqlFallbacks: Number of SQL fallback queries (when semantic returns empty)embeddingGenerated: Number of text embeddings createdconsolidations: Number of memory consolidation runsavgQueryTime: Average query execution time (ms)cacheHits: Successful cache retrievalscacheMisses: Cache misses requiring computationimport { trackMemoryOperation } from './performance-metrics.js';
// Track a successful query
const startTime = Date.now();
const result = await queryMemory('search term');
const duration = Date.now() - startTime;
await trackMemoryOperation('query', 'reasoningbank', duration, true);
// Track a failed operation with error
try {
await storeMemory(data);
} catch (error) {
const duration = Date.now() - startTime;
await trackMemoryOperation('store', 'basic', duration, false, 'validation_error');
}
import { trackModeSelection } from './performance-metrics.js';
// AUTO MODE selection
const mode = await detectMemoryMode();
await trackModeSelection(mode, true); // true = automatic selection
// Manual override
if (flags.reasoningbank) {
await trackModeSelection('reasoningbank', false); // false = manual override
}
import { trackReasoningBankOperation } from './performance-metrics.js';
// Track semantic search
const startTime = Date.now();
const results = await semanticSearch(query);
const duration = Date.now() - startTime;
if (results.length === 0) {
// Semantic search returned empty, using SQL fallback
await trackReasoningBankOperation('sql_fallback', duration);
} else {
await trackReasoningBankOperation('semantic_search', duration);
}
// Track cache hits/misses
if (cacheHit) {
await trackReasoningBankOperation('cache_hit', 0);
} else {
await trackReasoningBankOperation('cache_miss', duration);
}
import { getMemoryPerformanceSummary } from './performance-metrics.js';
const summary = await getMemoryPerformanceSummary();
console.log('Session:', summary.session);
console.log('Mode Usage:', summary.mode);
console.log('Operations:', summary.operations);
console.log('Performance:', summary.performance);
console.log('Storage:', summary.storage);
console.log('ReasoningBank:', summary.reasoningbank);
console.log('Errors:', summary.errors);
The summary includes calculated metrics like:
These tracking functions should be integrated into:
Memory Command (src/cli/simple-commands/memory.js)
ReasoningBank Adapter (src/reasoningbank/reasoningbank-adapter.js)
Session Hooks (hooks system)
Potential additions: