agentdb 3.0.0-alpha.11 → 3.0.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +54 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.js +125 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
- package/dist/src/cli/agentdb-cli.js +0 -0
- package/dist/src/controllers/ReflexionMemory.d.ts +50 -0
- package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
- package/dist/src/controllers/ReflexionMemory.js +258 -0
- package/dist/src/controllers/ReflexionMemory.js.map +1 -1
- package/dist/src/controllers/index.d.ts +2 -0
- package/dist/src/controllers/index.d.ts.map +1 -1
- package/dist/src/controllers/index.js +2 -0
- package/dist/src/controllers/index.js.map +1 -1
- package/dist/src/controllers/prerequisites.d.ts +76 -0
- package/dist/src/controllers/prerequisites.d.ts.map +1 -0
- package/dist/src/controllers/prerequisites.js +235 -0
- package/dist/src/controllers/prerequisites.js.map +1 -0
- package/dist/src/db-fallback.d.ts.map +1 -1
- package/dist/src/db-fallback.js +55 -45
- package/dist/src/db-fallback.js.map +1 -1
- package/package.json +1 -1
- package/dist/schemas/frontier-schema.sql +0 -378
- package/dist/schemas/schema.sql +0 -382
- package/dist/src/backends/index.cjs +0 -6
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +0 -93
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +0 -1
- package/dist/src/backends/ruvector/GuardedVectorBackend.js +0 -182
- package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +0 -1
- package/dist/src/consensus/RaftConsensus.d.ts +0 -220
- package/dist/src/consensus/RaftConsensus.d.ts.map +0 -1
- package/dist/src/consensus/RaftConsensus.js +0 -762
- package/dist/src/consensus/RaftConsensus.js.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.d.ts +0 -197
- package/dist/src/controllers/HierarchicalMemory.d.ts.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.js +0 -519
- package/dist/src/controllers/HierarchicalMemory.js.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.d.ts +0 -142
- package/dist/src/controllers/MemoryConsolidation.d.ts.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.js +0 -479
- package/dist/src/controllers/MemoryConsolidation.js.map +0 -1
- package/dist/src/controllers/QUICConnection.d.ts +0 -122
- package/dist/src/controllers/QUICConnection.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnection.js +0 -329
- package/dist/src/controllers/QUICConnection.js.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.d.ts +0 -83
- package/dist/src/controllers/QUICConnectionPool.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.js +0 -256
- package/dist/src/controllers/QUICConnectionPool.js.map +0 -1
- package/dist/src/controllers/QUICStreamManager.d.ts +0 -114
- package/dist/src/controllers/QUICStreamManager.d.ts.map +0 -1
- package/dist/src/controllers/QUICStreamManager.js +0 -267
- package/dist/src/controllers/QUICStreamManager.js.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.d.ts +0 -82
- package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.js +0 -243
- package/dist/src/controllers/StreamingEmbeddingService.js.map +0 -1
- package/dist/src/controllers/index.cjs +0 -6
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
- package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
- package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
- package/dist/src/coordination/index.d.ts +0 -10
- package/dist/src/coordination/index.d.ts.map +0 -1
- package/dist/src/coordination/index.js +0 -10
- package/dist/src/coordination/index.js.map +0 -1
- package/dist/src/index.cjs +0 -6
- package/dist/src/optimizations/RVFOptimizer.d.ts +0 -226
- package/dist/src/optimizations/RVFOptimizer.d.ts.map +0 -1
- package/dist/src/optimizations/RVFOptimizer.js +0 -541
- package/dist/src/optimizations/RVFOptimizer.js.map +0 -1
- package/dist/src/security/AttestationLog.d.ts +0 -70
- package/dist/src/security/AttestationLog.d.ts.map +0 -1
- package/dist/src/security/AttestationLog.js +0 -174
- package/dist/src/security/AttestationLog.js.map +0 -1
- package/dist/src/security/MutationGuard.d.ts +0 -83
- package/dist/src/security/MutationGuard.d.ts.map +0 -1
- package/dist/src/security/MutationGuard.js +0 -364
- package/dist/src/security/MutationGuard.js.map +0 -1
- package/dist/src/security/index.cjs +0 -6
- package/dist/src/security/index.d.ts +0 -15
- package/dist/src/security/index.d.ts.map +0 -1
- package/dist/src/security/index.js +0 -18
- package/dist/src/security/index.js.map +0 -1
- package/dist/src/services/GNNService.d.ts +0 -173
- package/dist/src/services/GNNService.d.ts.map +0 -1
- package/dist/src/services/GNNService.js +0 -639
- package/dist/src/services/GNNService.js.map +0 -1
- package/dist/src/services/GraphTransformerService.d.ts +0 -80
- package/dist/src/services/GraphTransformerService.d.ts.map +0 -1
- package/dist/src/services/GraphTransformerService.js +0 -369
- package/dist/src/services/GraphTransformerService.js.map +0 -1
- package/dist/src/services/SemanticRouter.d.ts +0 -83
- package/dist/src/services/SemanticRouter.d.ts.map +0 -1
- package/dist/src/services/SemanticRouter.js +0 -160
- package/dist/src/services/SemanticRouter.js.map +0 -1
- package/dist/src/services/SonaTrajectoryService.d.ts +0 -224
- package/dist/src/services/SonaTrajectoryService.d.ts.map +0 -1
- package/dist/src/services/SonaTrajectoryService.js +0 -539
- package/dist/src/services/SonaTrajectoryService.js.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.d.ts +0 -93
- package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.js +0 -241
- package/dist/src/utils/LegacyAttentionAdapter.js.map +0 -1
- package/dist/src/utils/vector-math.d.ts +0 -29
- package/dist/src/utils/vector-math.d.ts.map +0 -1
- package/dist/src/utils/vector-math.js +0 -66
- package/dist/src/utils/vector-math.js.map +0 -1
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RVFOptimizer - RuVector Format Optimization Patterns
|
|
3
|
-
*
|
|
4
|
-
* Implements RVF (RuVector Format) optimization patterns for AgentDB:
|
|
5
|
-
* - Embedding compression via quantization (4/8/16-bit)
|
|
6
|
-
* - Deduplication of near-identical embeddings
|
|
7
|
-
* - Memory pruning based on confidence and age
|
|
8
|
-
* - Batch embedding with configurable queue and timer
|
|
9
|
-
* - LRU caching for frequently accessed embeddings
|
|
10
|
-
* - 4-bit INT4 quantization for 8x memory compression (ADR-065)
|
|
11
|
-
* - Adaptive quantization based on importance scores
|
|
12
|
-
* - Progressive compression with automatic promotion/demotion
|
|
13
|
-
* - Multi-level caching with zero-copy hot paths
|
|
14
|
-
*
|
|
15
|
-
* Performance targets (ADR-062, ADR-065):
|
|
16
|
-
* - 10-100x speedup via batch embedding
|
|
17
|
-
* - 8x memory reduction via 4-bit quantization (vs 4x with 8-bit)
|
|
18
|
-
* - 20-50% storage reduction via deduplication
|
|
19
|
-
* - <5% quality degradation with adaptive quantization
|
|
20
|
-
*/
|
|
21
|
-
export class RVFOptimizer {
|
|
22
|
-
config;
|
|
23
|
-
cache = new Map();
|
|
24
|
-
batchQueue = [];
|
|
25
|
-
batchTimer;
|
|
26
|
-
// Multi-level cache (L1: 4-bit hot, L2: 8-bit warm, L3: 16-bit cold)
|
|
27
|
-
l1Cache = new Map();
|
|
28
|
-
l2Cache = new Map();
|
|
29
|
-
l3Cache = new Map();
|
|
30
|
-
// Progressive compression tracking
|
|
31
|
-
importanceScores = new Map(); // 0-1 importance
|
|
32
|
-
compressionMetrics = new Map();
|
|
33
|
-
// Cache statistics
|
|
34
|
-
cacheStats = {
|
|
35
|
-
l1: { hits: 0, misses: 0 },
|
|
36
|
-
l2: { hits: 0, misses: 0 },
|
|
37
|
-
l3: { hits: 0, misses: 0 },
|
|
38
|
-
};
|
|
39
|
-
constructor(config = {}) {
|
|
40
|
-
this.config = {
|
|
41
|
-
compression: {
|
|
42
|
-
enabled: config.compression?.enabled ?? true,
|
|
43
|
-
quantizeBits: config.compression?.quantizeBits ?? 8,
|
|
44
|
-
deduplicationThreshold: config.compression?.deduplicationThreshold ?? 0.98,
|
|
45
|
-
adaptive: config.compression?.adaptive ?? true,
|
|
46
|
-
progressive: config.compression?.progressive ?? true,
|
|
47
|
-
},
|
|
48
|
-
pruning: {
|
|
49
|
-
enabled: config.pruning?.enabled ?? true,
|
|
50
|
-
minConfidence: config.pruning?.minConfidence ?? 0.3,
|
|
51
|
-
maxAge: config.pruning?.maxAge ?? 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
52
|
-
},
|
|
53
|
-
batching: {
|
|
54
|
-
enabled: config.batching?.enabled ?? true,
|
|
55
|
-
batchSize: config.batching?.batchSize ?? 32,
|
|
56
|
-
maxWaitMs: config.batching?.maxWaitMs ?? 10,
|
|
57
|
-
},
|
|
58
|
-
caching: {
|
|
59
|
-
enabled: config.caching?.enabled ?? true,
|
|
60
|
-
maxSize: config.caching?.maxSize ?? 10000,
|
|
61
|
-
ttl: config.caching?.ttl ?? 60 * 60 * 1000, // 1 hour
|
|
62
|
-
multiLevel: config.caching?.multiLevel ?? true,
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* 4-bit INT4 quantization for 8x memory compression.
|
|
68
|
-
*
|
|
69
|
-
* ADR-065: Implements aggressive 4-bit quantization with:
|
|
70
|
-
* - 16 levels per component (0-15)
|
|
71
|
-
* - Min-max normalization per vector
|
|
72
|
-
* - 8x compression ratio (32-bit → 4-bit)
|
|
73
|
-
*
|
|
74
|
-
* @returns Compressed embedding with quality metrics
|
|
75
|
-
*/
|
|
76
|
-
quantize4Bit(embedding) {
|
|
77
|
-
const originalSize = embedding.length * 4; // 4 bytes per float32
|
|
78
|
-
const bits = 4;
|
|
79
|
-
const maxValue = 15; // 2^4 - 1
|
|
80
|
-
// Find min/max for normalization
|
|
81
|
-
let min = embedding[0];
|
|
82
|
-
let max = embedding[0];
|
|
83
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
84
|
-
if (embedding[i] < min)
|
|
85
|
-
min = embedding[i];
|
|
86
|
-
if (embedding[i] > max)
|
|
87
|
-
max = embedding[i];
|
|
88
|
-
}
|
|
89
|
-
const range = max - min || 1e-10;
|
|
90
|
-
// Quantize to 4-bit integers, then reconstruct
|
|
91
|
-
const compressed = new Array(embedding.length);
|
|
92
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
93
|
-
const scaled = (embedding[i] - min) / range;
|
|
94
|
-
const quantized = Math.round(scaled * maxValue);
|
|
95
|
-
compressed[i] = (quantized / maxValue) * range + min;
|
|
96
|
-
}
|
|
97
|
-
// Calculate quality (cosine similarity vs original)
|
|
98
|
-
const quality = this.cosineSimilarity(embedding, compressed);
|
|
99
|
-
const compressedSize = embedding.length * 0.5; // 4 bits = 0.5 bytes
|
|
100
|
-
const metrics = {
|
|
101
|
-
originalSize,
|
|
102
|
-
compressedSize,
|
|
103
|
-
compressionRatio: originalSize / compressedSize,
|
|
104
|
-
qualityScore: quality,
|
|
105
|
-
quantizationBits: 4,
|
|
106
|
-
adaptiveBoost: 0,
|
|
107
|
-
};
|
|
108
|
-
return { compressed, metrics };
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Adaptive quantization: adjust bit depth based on importance score.
|
|
112
|
-
*
|
|
113
|
-
* ADR-065: High-importance embeddings get higher bit depth:
|
|
114
|
-
* - importance > 0.8: 16-bit (minimal quality loss)
|
|
115
|
-
* - importance 0.5-0.8: 8-bit (balanced)
|
|
116
|
-
* - importance < 0.5: 4-bit (max compression)
|
|
117
|
-
*/
|
|
118
|
-
adaptiveQuantize(embedding, importance = 0.5) {
|
|
119
|
-
if (!this.config.compression.adaptive) {
|
|
120
|
-
return this.quantize4Bit(embedding);
|
|
121
|
-
}
|
|
122
|
-
// Select bit depth based on importance
|
|
123
|
-
let quantizeBits;
|
|
124
|
-
if (importance > 0.8) {
|
|
125
|
-
quantizeBits = 16;
|
|
126
|
-
}
|
|
127
|
-
else if (importance > 0.5) {
|
|
128
|
-
quantizeBits = 8;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
quantizeBits = 4;
|
|
132
|
-
}
|
|
133
|
-
const originalSize = embedding.length * 4;
|
|
134
|
-
const maxValue = Math.pow(2, quantizeBits) - 1;
|
|
135
|
-
let min = embedding[0];
|
|
136
|
-
let max = embedding[0];
|
|
137
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
138
|
-
if (embedding[i] < min)
|
|
139
|
-
min = embedding[i];
|
|
140
|
-
if (embedding[i] > max)
|
|
141
|
-
max = embedding[i];
|
|
142
|
-
}
|
|
143
|
-
const range = max - min || 1e-10;
|
|
144
|
-
const compressed = new Array(embedding.length);
|
|
145
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
146
|
-
const scaled = (embedding[i] - min) / range;
|
|
147
|
-
const quantized = Math.round(scaled * maxValue);
|
|
148
|
-
compressed[i] = (quantized / maxValue) * range + min;
|
|
149
|
-
}
|
|
150
|
-
const quality = this.cosineSimilarity(embedding, compressed);
|
|
151
|
-
const compressedSize = embedding.length * (quantizeBits / 8);
|
|
152
|
-
const metrics = {
|
|
153
|
-
originalSize,
|
|
154
|
-
compressedSize,
|
|
155
|
-
compressionRatio: originalSize / compressedSize,
|
|
156
|
-
qualityScore: quality,
|
|
157
|
-
quantizationBits: quantizeBits,
|
|
158
|
-
adaptiveBoost: importance,
|
|
159
|
-
};
|
|
160
|
-
return { compressed, metrics };
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Progressive compression: automatically promote/demote based on access patterns.
|
|
164
|
-
*
|
|
165
|
-
* ADR-065: Multi-level caching:
|
|
166
|
-
* - L1 (4-bit): Hot embeddings (accessed frequently)
|
|
167
|
-
* - L2 (8-bit): Warm embeddings (moderate access)
|
|
168
|
-
* - L3 (16-bit): Cold embeddings (rare access)
|
|
169
|
-
*
|
|
170
|
-
* Automatic promotion on cache hits, demotion on age.
|
|
171
|
-
*/
|
|
172
|
-
progressiveCompress(key, embedding, accessCount = 0) {
|
|
173
|
-
if (!this.config.compression.progressive || !this.config.caching.multiLevel) {
|
|
174
|
-
const result = this.quantize4Bit(embedding);
|
|
175
|
-
return { ...result, cacheLevel: 'L1' };
|
|
176
|
-
}
|
|
177
|
-
// Determine cache level based on access count
|
|
178
|
-
let cacheLevel;
|
|
179
|
-
let quantizeBits;
|
|
180
|
-
if (accessCount >= 10) {
|
|
181
|
-
cacheLevel = 'L1';
|
|
182
|
-
quantizeBits = 4; // Hot: max compression
|
|
183
|
-
}
|
|
184
|
-
else if (accessCount >= 3) {
|
|
185
|
-
cacheLevel = 'L2';
|
|
186
|
-
quantizeBits = 8; // Warm: balanced
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
cacheLevel = 'L3';
|
|
190
|
-
quantizeBits = 16; // Cold: preserve quality
|
|
191
|
-
}
|
|
192
|
-
// Quantize using the determined bit depth
|
|
193
|
-
const originalSize = embedding.length * 4;
|
|
194
|
-
const maxValue = Math.pow(2, quantizeBits) - 1;
|
|
195
|
-
let min = embedding[0];
|
|
196
|
-
let max = embedding[0];
|
|
197
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
198
|
-
if (embedding[i] < min)
|
|
199
|
-
min = embedding[i];
|
|
200
|
-
if (embedding[i] > max)
|
|
201
|
-
max = embedding[i];
|
|
202
|
-
}
|
|
203
|
-
const range = max - min || 1e-10;
|
|
204
|
-
const compressed = new Array(embedding.length);
|
|
205
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
206
|
-
const scaled = (embedding[i] - min) / range;
|
|
207
|
-
const quantized = Math.round(scaled * maxValue);
|
|
208
|
-
compressed[i] = (quantized / maxValue) * range + min;
|
|
209
|
-
}
|
|
210
|
-
const quality = this.cosineSimilarity(embedding, compressed);
|
|
211
|
-
const compressedSize = embedding.length * (quantizeBits / 8);
|
|
212
|
-
const metrics = {
|
|
213
|
-
originalSize,
|
|
214
|
-
compressedSize,
|
|
215
|
-
compressionRatio: originalSize / compressedSize,
|
|
216
|
-
qualityScore: quality,
|
|
217
|
-
quantizationBits: quantizeBits,
|
|
218
|
-
adaptiveBoost: accessCount / 10,
|
|
219
|
-
};
|
|
220
|
-
return { compressed, cacheLevel, metrics };
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Zero-copy compression using Int8Array for hot paths.
|
|
224
|
-
*
|
|
225
|
-
* ADR-065: For frequently accessed embeddings, use typed arrays
|
|
226
|
-
* to avoid allocation overhead and enable SIMD optimizations.
|
|
227
|
-
*/
|
|
228
|
-
zeroCopyCompress4Bit(embedding) {
|
|
229
|
-
const maxValue = 15;
|
|
230
|
-
let min = embedding[0];
|
|
231
|
-
let max = embedding[0];
|
|
232
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
233
|
-
if (embedding[i] < min)
|
|
234
|
-
min = embedding[i];
|
|
235
|
-
if (embedding[i] > max)
|
|
236
|
-
max = embedding[i];
|
|
237
|
-
}
|
|
238
|
-
const range = max - min || 1e-10;
|
|
239
|
-
// Store as nibbles (4-bit) but use Int8Array for efficiency
|
|
240
|
-
// Each byte stores 2 values: high nibble + low nibble
|
|
241
|
-
const compressed = new Int8Array(Math.ceil(embedding.length / 2));
|
|
242
|
-
for (let i = 0; i < embedding.length; i += 2) {
|
|
243
|
-
const scaled1 = (embedding[i] - min) / range;
|
|
244
|
-
const quantized1 = Math.round(scaled1 * maxValue);
|
|
245
|
-
let quantized2 = 0;
|
|
246
|
-
if (i + 1 < embedding.length) {
|
|
247
|
-
const scaled2 = (embedding[i + 1] - min) / range;
|
|
248
|
-
quantized2 = Math.round(scaled2 * maxValue);
|
|
249
|
-
}
|
|
250
|
-
// Pack two 4-bit values into one byte
|
|
251
|
-
compressed[Math.floor(i / 2)] = (quantized1 << 4) | quantized2;
|
|
252
|
-
}
|
|
253
|
-
return compressed;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Measure quality degradation from compression.
|
|
257
|
-
*
|
|
258
|
-
* @returns Quality metrics: cosine similarity, MSE, max error
|
|
259
|
-
*/
|
|
260
|
-
measureQuality(original, compressed) {
|
|
261
|
-
const cosineSim = this.cosineSimilarity(original, compressed);
|
|
262
|
-
// Mean squared error
|
|
263
|
-
let mse = 0;
|
|
264
|
-
let maxError = 0;
|
|
265
|
-
for (let i = 0; i < original.length; i++) {
|
|
266
|
-
const error = Math.abs(original[i] - compressed[i]);
|
|
267
|
-
mse += error * error;
|
|
268
|
-
if (error > maxError)
|
|
269
|
-
maxError = error;
|
|
270
|
-
}
|
|
271
|
-
mse /= original.length;
|
|
272
|
-
return {
|
|
273
|
-
cosineSimilarity: cosineSim,
|
|
274
|
-
mse,
|
|
275
|
-
maxError,
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Get multi-level cache statistics.
|
|
280
|
-
*/
|
|
281
|
-
getCacheLevels() {
|
|
282
|
-
const l1HitRate = this.cacheStats.l1.hits + this.cacheStats.l1.misses > 0
|
|
283
|
-
? this.cacheStats.l1.hits / (this.cacheStats.l1.hits + this.cacheStats.l1.misses)
|
|
284
|
-
: 0;
|
|
285
|
-
const l2HitRate = this.cacheStats.l2.hits + this.cacheStats.l2.misses > 0
|
|
286
|
-
? this.cacheStats.l2.hits / (this.cacheStats.l2.hits + this.cacheStats.l2.misses)
|
|
287
|
-
: 0;
|
|
288
|
-
const l3HitRate = this.cacheStats.l3.hits + this.cacheStats.l3.misses > 0
|
|
289
|
-
? this.cacheStats.l3.hits / (this.cacheStats.l3.hits + this.cacheStats.l3.misses)
|
|
290
|
-
: 0;
|
|
291
|
-
return [
|
|
292
|
-
{ name: 'L1', maxSize: 1000, quantizeBits: 4, hitRate: l1HitRate, entries: this.l1Cache.size },
|
|
293
|
-
{ name: 'L2', maxSize: 5000, quantizeBits: 8, hitRate: l2HitRate, entries: this.l2Cache.size },
|
|
294
|
-
{ name: 'L3', maxSize: 10000, quantizeBits: 16, hitRate: l3HitRate, entries: this.l3Cache.size },
|
|
295
|
-
];
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Compress embeddings using quantization.
|
|
299
|
-
*
|
|
300
|
-
* Maps each component to an N-bit integer range then reconstructs
|
|
301
|
-
* the approximate float value. This reduces memory per vector by
|
|
302
|
-
* up to 8x (float32 -> 4-bit) while retaining search accuracy.
|
|
303
|
-
*/
|
|
304
|
-
compressEmbedding(embedding) {
|
|
305
|
-
if (!this.config.compression.enabled)
|
|
306
|
-
return embedding;
|
|
307
|
-
const bits = this.config.compression.quantizeBits;
|
|
308
|
-
const maxValue = Math.pow(2, bits) - 1;
|
|
309
|
-
let min = embedding[0];
|
|
310
|
-
let max = embedding[0];
|
|
311
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
312
|
-
if (embedding[i] < min)
|
|
313
|
-
min = embedding[i];
|
|
314
|
-
if (embedding[i] > max)
|
|
315
|
-
max = embedding[i];
|
|
316
|
-
}
|
|
317
|
-
const range = max - min || 1e-10;
|
|
318
|
-
const result = new Array(embedding.length);
|
|
319
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
320
|
-
const scaled = (embedding[i] - min) / range;
|
|
321
|
-
const quantized = Math.round(scaled * maxValue);
|
|
322
|
-
result[i] = (quantized / maxValue) * range + min;
|
|
323
|
-
}
|
|
324
|
-
return result;
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Compress a Float32Array embedding (zero-copy friendly).
|
|
328
|
-
*/
|
|
329
|
-
compressFloat32(embedding) {
|
|
330
|
-
if (!this.config.compression.enabled)
|
|
331
|
-
return embedding;
|
|
332
|
-
const bits = this.config.compression.quantizeBits;
|
|
333
|
-
const maxValue = Math.pow(2, bits) - 1;
|
|
334
|
-
let min = embedding[0];
|
|
335
|
-
let max = embedding[0];
|
|
336
|
-
for (let i = 1; i < embedding.length; i++) {
|
|
337
|
-
if (embedding[i] < min)
|
|
338
|
-
min = embedding[i];
|
|
339
|
-
if (embedding[i] > max)
|
|
340
|
-
max = embedding[i];
|
|
341
|
-
}
|
|
342
|
-
const range = max - min || 1e-10;
|
|
343
|
-
const result = new Float32Array(embedding.length);
|
|
344
|
-
for (let i = 0; i < embedding.length; i++) {
|
|
345
|
-
const scaled = (embedding[i] - min) / range;
|
|
346
|
-
const quantized = Math.round(scaled * maxValue);
|
|
347
|
-
result[i] = (quantized / maxValue) * range + min;
|
|
348
|
-
}
|
|
349
|
-
return result;
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Deduplicate similar embeddings by cosine similarity.
|
|
353
|
-
*
|
|
354
|
-
* Scans the list and removes items whose embedding is above
|
|
355
|
-
* the deduplication threshold compared to an already-kept item.
|
|
356
|
-
* Keeps the higher-confidence entry when duplicates are found.
|
|
357
|
-
*/
|
|
358
|
-
deduplicate(embeddings) {
|
|
359
|
-
if (!this.config.compression.enabled)
|
|
360
|
-
return embeddings;
|
|
361
|
-
const threshold = this.config.compression.deduplicationThreshold;
|
|
362
|
-
const unique = [];
|
|
363
|
-
let duplicates = 0;
|
|
364
|
-
for (const item of embeddings) {
|
|
365
|
-
let isDuplicate = false;
|
|
366
|
-
for (const existing of unique) {
|
|
367
|
-
const similarity = this.cosineSimilarity(item.embedding, existing.embedding);
|
|
368
|
-
if (similarity >= threshold) {
|
|
369
|
-
isDuplicate = true;
|
|
370
|
-
duplicates++;
|
|
371
|
-
break;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
if (!isDuplicate) {
|
|
375
|
-
unique.push(item);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
if (duplicates > 0) {
|
|
379
|
-
console.log(`[RVFOptimizer] Deduplicated ${embeddings.length} -> ${unique.length} (${duplicates} duplicates removed)`);
|
|
380
|
-
}
|
|
381
|
-
return unique;
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Identify memories that should be pruned based on confidence and age.
|
|
385
|
-
*
|
|
386
|
-
* Returns an array of IDs that are below the minimum confidence
|
|
387
|
-
* threshold or older than the maximum allowed age.
|
|
388
|
-
*/
|
|
389
|
-
pruneMemories(memories) {
|
|
390
|
-
if (!this.config.pruning.enabled)
|
|
391
|
-
return [];
|
|
392
|
-
const now = Date.now();
|
|
393
|
-
const toPrune = [];
|
|
394
|
-
for (const memory of memories) {
|
|
395
|
-
const age = now - memory.timestamp;
|
|
396
|
-
if (memory.confidence < this.config.pruning.minConfidence ||
|
|
397
|
-
age > this.config.pruning.maxAge) {
|
|
398
|
-
toPrune.push(memory.id);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
if (toPrune.length > 0) {
|
|
402
|
-
console.log(`[RVFOptimizer] Identified ${toPrune.length} memories for pruning`);
|
|
403
|
-
}
|
|
404
|
-
return toPrune;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Batch embedding generation for 10-100x throughput improvement.
|
|
408
|
-
*
|
|
409
|
-
* Queues individual embed requests and flushes them either when
|
|
410
|
-
* the batch reaches `batchSize` or after `maxWaitMs` milliseconds.
|
|
411
|
-
* Uses the provided `embedFn` callback for the actual embedding.
|
|
412
|
-
*/
|
|
413
|
-
async batchEmbed(query, embedFn) {
|
|
414
|
-
if (!this.config.batching.enabled) {
|
|
415
|
-
return await embedFn(query);
|
|
416
|
-
}
|
|
417
|
-
// Check cache first
|
|
418
|
-
if (this.config.caching.enabled) {
|
|
419
|
-
const cached = this.cache.get(query);
|
|
420
|
-
if (cached && Date.now() - cached.timestamp < this.config.caching.ttl) {
|
|
421
|
-
return cached.embedding;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
// Add to batch queue
|
|
425
|
-
return new Promise((resolve, reject) => {
|
|
426
|
-
this.batchQueue.push({ query, resolve, reject });
|
|
427
|
-
if (this.batchQueue.length >= this.config.batching.batchSize) {
|
|
428
|
-
this.processBatch(embedFn);
|
|
429
|
-
}
|
|
430
|
-
else if (!this.batchTimer) {
|
|
431
|
-
this.batchTimer = setTimeout(() => {
|
|
432
|
-
this.processBatch(embedFn);
|
|
433
|
-
}, this.config.batching.maxWaitMs);
|
|
434
|
-
}
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Flush any pending batch items immediately.
|
|
439
|
-
*/
|
|
440
|
-
async flush(embedFn) {
|
|
441
|
-
if (this.batchQueue.length > 0) {
|
|
442
|
-
await this.processBatch(embedFn);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Clear the embedding cache.
|
|
447
|
-
*/
|
|
448
|
-
clearCache() {
|
|
449
|
-
this.cache.clear();
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Get optimizer statistics.
|
|
453
|
-
*/
|
|
454
|
-
getStats() {
|
|
455
|
-
const stats = {
|
|
456
|
-
config: this.config,
|
|
457
|
-
cacheSize: this.cache.size,
|
|
458
|
-
batchQueueSize: this.batchQueue.length,
|
|
459
|
-
};
|
|
460
|
-
// Add multi-level cache stats if enabled
|
|
461
|
-
if (this.config.caching.multiLevel) {
|
|
462
|
-
const l1HitRate = this.cacheStats.l1.hits + this.cacheStats.l1.misses > 0
|
|
463
|
-
? this.cacheStats.l1.hits / (this.cacheStats.l1.hits + this.cacheStats.l1.misses)
|
|
464
|
-
: 0;
|
|
465
|
-
const l2HitRate = this.cacheStats.l2.hits + this.cacheStats.l2.misses > 0
|
|
466
|
-
? this.cacheStats.l2.hits / (this.cacheStats.l2.hits + this.cacheStats.l2.misses)
|
|
467
|
-
: 0;
|
|
468
|
-
const l3HitRate = this.cacheStats.l3.hits + this.cacheStats.l3.misses > 0
|
|
469
|
-
? this.cacheStats.l3.hits / (this.cacheStats.l3.hits + this.cacheStats.l3.misses)
|
|
470
|
-
: 0;
|
|
471
|
-
stats.multiLevelCache = {
|
|
472
|
-
l1: { size: this.l1Cache.size, ...this.cacheStats.l1, hitRate: l1HitRate },
|
|
473
|
-
l2: { size: this.l2Cache.size, ...this.cacheStats.l2, hitRate: l2HitRate },
|
|
474
|
-
l3: { size: this.l3Cache.size, ...this.cacheStats.l3, hitRate: l3HitRate },
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
// Add compression metrics if available
|
|
478
|
-
if (this.compressionMetrics.size > 0) {
|
|
479
|
-
let totalRatio = 0;
|
|
480
|
-
let totalQuality = 0;
|
|
481
|
-
this.compressionMetrics.forEach(m => {
|
|
482
|
-
totalRatio += m.compressionRatio;
|
|
483
|
-
totalQuality += m.qualityScore;
|
|
484
|
-
});
|
|
485
|
-
stats.compressionMetrics = {
|
|
486
|
-
avgCompressionRatio: totalRatio / this.compressionMetrics.size,
|
|
487
|
-
avgQualityScore: totalQuality / this.compressionMetrics.size,
|
|
488
|
-
totalCompressed: this.compressionMetrics.size,
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
return stats;
|
|
492
|
-
}
|
|
493
|
-
// ---------------------------------------------------------------------------
|
|
494
|
-
// Private
|
|
495
|
-
// ---------------------------------------------------------------------------
|
|
496
|
-
async processBatch(embedFn) {
|
|
497
|
-
if (this.batchTimer) {
|
|
498
|
-
clearTimeout(this.batchTimer);
|
|
499
|
-
this.batchTimer = undefined;
|
|
500
|
-
}
|
|
501
|
-
const batch = this.batchQueue.splice(0, this.config.batching.batchSize);
|
|
502
|
-
if (batch.length === 0)
|
|
503
|
-
return;
|
|
504
|
-
try {
|
|
505
|
-
const results = await Promise.all(batch.map(item => embedFn(item.query)));
|
|
506
|
-
for (let i = 0; i < batch.length; i++) {
|
|
507
|
-
const embedding = results[i];
|
|
508
|
-
batch[i].resolve(embedding);
|
|
509
|
-
if (this.config.caching.enabled) {
|
|
510
|
-
this.cache.set(batch[i].query, {
|
|
511
|
-
embedding,
|
|
512
|
-
timestamp: Date.now(),
|
|
513
|
-
});
|
|
514
|
-
// Evict oldest entry if cache exceeds max size
|
|
515
|
-
if (this.cache.size > this.config.caching.maxSize) {
|
|
516
|
-
const oldest = this.cache.keys().next().value;
|
|
517
|
-
if (oldest !== undefined) {
|
|
518
|
-
this.cache.delete(oldest);
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
catch (error) {
|
|
525
|
-
batch.forEach(item => item.reject(error));
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
cosineSimilarity(a, b) {
|
|
529
|
-
let dotProduct = 0;
|
|
530
|
-
let normA = 0;
|
|
531
|
-
let normB = 0;
|
|
532
|
-
for (let i = 0; i < a.length; i++) {
|
|
533
|
-
dotProduct += a[i] * b[i];
|
|
534
|
-
normA += a[i] * a[i];
|
|
535
|
-
normB += b[i] * b[i];
|
|
536
|
-
}
|
|
537
|
-
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
538
|
-
return denom > 0 ? dotProduct / denom : 0;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
//# sourceMappingURL=RVFOptimizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RVFOptimizer.js","sourceRoot":"","sources":["../../../src/optimizations/RVFOptimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ADR-060: Attestation Log
|
|
3
|
-
*
|
|
4
|
-
* Append-only audit log for every MutationProof and MutationDenial.
|
|
5
|
-
* Backed by a better-sqlite3 (or sql.js) compatible database instance.
|
|
6
|
-
*
|
|
7
|
-
* The caller is responsible for opening the database and passing it in.
|
|
8
|
-
* This class only creates the table schema if it does not exist yet.
|
|
9
|
-
*/
|
|
10
|
-
import type { MutationProof, MutationDenial } from './MutationGuard.js';
|
|
11
|
-
export interface DatabaseLike {
|
|
12
|
-
exec(sql: string): void;
|
|
13
|
-
prepare(sql: string): {
|
|
14
|
-
run(...params: unknown[]): {
|
|
15
|
-
changes?: number;
|
|
16
|
-
};
|
|
17
|
-
all(...params: unknown[]): unknown[];
|
|
18
|
-
get(...params: unknown[]): unknown;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
export interface AttestationQueryOptions {
|
|
22
|
-
agentId?: string;
|
|
23
|
-
namespace?: string;
|
|
24
|
-
status?: 'proved' | 'denied';
|
|
25
|
-
since?: number;
|
|
26
|
-
limit?: number;
|
|
27
|
-
}
|
|
28
|
-
export interface DenialPattern {
|
|
29
|
-
code: string;
|
|
30
|
-
count: number;
|
|
31
|
-
lastSeen: number;
|
|
32
|
-
}
|
|
33
|
-
export interface AttestationStats {
|
|
34
|
-
total: number;
|
|
35
|
-
proved: number;
|
|
36
|
-
denied: number;
|
|
37
|
-
uniqueAgents: number;
|
|
38
|
-
oldestTs: number;
|
|
39
|
-
}
|
|
40
|
-
export declare class AttestationLog {
|
|
41
|
-
private readonly db;
|
|
42
|
-
constructor(db: DatabaseLike);
|
|
43
|
-
/**
|
|
44
|
-
* Record a successful mutation proof.
|
|
45
|
-
*/
|
|
46
|
-
record(proof: MutationProof): void;
|
|
47
|
-
/**
|
|
48
|
-
* Record a denied mutation.
|
|
49
|
-
*/
|
|
50
|
-
recordDenial(denial: MutationDenial, agentId: string, namespace: string): void;
|
|
51
|
-
/**
|
|
52
|
-
* Query attestation records with optional filters.
|
|
53
|
-
* All filters use parameterized queries to prevent injection.
|
|
54
|
-
*/
|
|
55
|
-
query(opts?: AttestationQueryOptions): any[];
|
|
56
|
-
/**
|
|
57
|
-
* Aggregate denial patterns grouped by denial_code.
|
|
58
|
-
*/
|
|
59
|
-
getDenialPatterns(since?: number): DenialPattern[];
|
|
60
|
-
/**
|
|
61
|
-
* Delete attestation records older than the given age in milliseconds.
|
|
62
|
-
* Returns the number of deleted rows.
|
|
63
|
-
*/
|
|
64
|
-
prune(olderThanMs: number): number;
|
|
65
|
-
/**
|
|
66
|
-
* Summary statistics for the attestation log.
|
|
67
|
-
*/
|
|
68
|
-
getStats(): AttestationStats;
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=AttestationLog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AttestationLog.d.ts","sourceRoot":"","sources":["../../../src/security/AttestationLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMxE,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAChD,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;KACpC,CAAC;CACH;AAgCD,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAEtB,EAAE,EAAE,YAAY;IAW5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAmBlC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAmB9E;;;OAGG;IACH,KAAK,CAAC,IAAI,GAAE,uBAA4B,GAAG,GAAG,EAAE;IAuChD;;OAEG;IACH,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAgClD;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQlC;;OAEG;IACH,QAAQ,IAAI,gBAAgB;CAmB7B"}
|