agentdb 2.0.0-alpha.1 → 2.0.0-alpha.2
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/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/lib/config-manager.d.ts.map +1 -1
- package/dist/src/cli/lib/config-manager.js.map +1 -1
- package/dist/src/cli/lib/history-tracker.d.ts.map +1 -1
- package/dist/src/cli/lib/history-tracker.js +7 -1
- package/dist/src/cli/lib/history-tracker.js.map +1 -1
- package/examples/README.md +105 -0
- package/examples/quickstart.js +43 -0
- package/package.json +6 -2
- package/simulation/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/.claude-flow/metrics/performance.json +87 -0
- package/simulation/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/COMPLETION-STATUS.md +139 -0
- package/simulation/FINAL-RESULTS.md +414 -0
- package/simulation/FINAL-STATUS.md +281 -0
- package/simulation/INTEGRATION-COMPLETE.md +452 -0
- package/simulation/MIGRATION-STATUS.md +231 -0
- package/simulation/OPTIMIZATION-RESULTS.md +397 -0
- package/simulation/PHASE1-COMPLETE.md +163 -0
- package/simulation/README.md +848 -0
- package/simulation/SIMULATION-RESULTS.md +239 -0
- package/simulation/cli.ts +78 -0
- package/simulation/configs/default.json +37 -0
- package/simulation/data/advanced/aidefence.graph +0 -0
- package/simulation/data/advanced/bmssp.graph +0 -0
- package/simulation/data/advanced/consciousness.graph +0 -0
- package/simulation/data/advanced/goalie.graph +0 -0
- package/simulation/data/advanced/psycho-symbolic.graph +0 -0
- package/simulation/data/advanced/research-swarm.graph +0 -0
- package/simulation/data/advanced/sublinear.graph +0 -0
- package/simulation/data/advanced/temporal.graph +0 -0
- package/simulation/data/causal.graph +0 -0
- package/simulation/data/graph-traversal.graph +0 -0
- package/simulation/data/lean-agentic.graph +0 -0
- package/simulation/data/reflexion.graph +0 -0
- package/simulation/data/skills.graph +0 -0
- package/simulation/data/stock-market.graph +0 -0
- package/simulation/data/strange-loops.graph +0 -0
- package/simulation/data/swarm.graph +0 -0
- package/simulation/data/voting-consensus.graph +0 -0
- package/simulation/docs/CLI-INTEGRATION-PLAN.md +1038 -0
- package/simulation/docs/COMPREHENSIVE-LATENT-SPACE-COMPLETION.md +354 -0
- package/simulation/docs/DOCUMENTATION-INDEX.md +226 -0
- package/simulation/docs/IMPLEMENTATION-COMPLETE.md +521 -0
- package/simulation/docs/OPTIMIZATION-SUMMARY.md +279 -0
- package/simulation/docs/README.md +229 -0
- package/simulation/docs/SWARM-5-INTEGRATION-SUMMARY.md +528 -0
- package/simulation/docs/TESTING-SUMMARY.md +304 -0
- package/simulation/docs/architecture/EXTENSION-API.md +868 -0
- package/simulation/docs/architecture/INTEGRATION-ARCHITECTURE.md +1138 -0
- package/simulation/docs/architecture/OPTIMIZATION-STRATEGY.md +778 -0
- package/simulation/docs/architecture/SIMULATION-ARCHITECTURE.md +892 -0
- package/simulation/docs/guides/CLI-REFERENCE.md +896 -0
- package/simulation/docs/guides/CUSTOM-SIMULATIONS.md +931 -0
- package/simulation/docs/guides/DEPLOYMENT.md +832 -0
- package/simulation/docs/guides/IMPLEMENTATION-SUMMARY.md +544 -0
- package/simulation/docs/guides/MIGRATION-GUIDE.md +591 -0
- package/simulation/docs/guides/QUICK-START.md +361 -0
- package/simulation/docs/guides/README.md +736 -0
- package/simulation/docs/guides/TROUBLESHOOTING.md +817 -0
- package/simulation/docs/guides/WIZARD-GUIDE.md +869 -0
- package/simulation/docs/reports/latent-space/MASTER-SYNTHESIS.md +345 -0
- package/simulation/docs/reports/latent-space/README.md +132 -0
- package/simulation/docs/reports/latent-space/attention-analysis-RESULTS.md +238 -0
- package/simulation/docs/reports/latent-space/clustering-analysis-RESULTS.md +210 -0
- package/simulation/docs/reports/latent-space/hnsw-exploration-RESULTS.md +332 -0
- package/simulation/docs/reports/latent-space/hypergraph-exploration-RESULTS.md +37 -0
- package/simulation/docs/reports/latent-space/neural-augmentation-RESULTS.md +69 -0
- package/simulation/docs/reports/latent-space/quantum-hybrid-RESULTS.md +91 -0
- package/simulation/docs/reports/latent-space/self-organizing-hnsw-RESULTS.md +51 -0
- package/simulation/docs/reports/latent-space/traversal-optimization-RESULTS.md +238 -0
- package/simulation/reports/README.md +397 -0
- package/simulation/reports/advanced-simulations-performance.md +1241 -0
- package/simulation/reports/aidefence-integration-2025-11-30T01-36-53-486Z.json +30 -0
- package/simulation/reports/architecture-analysis.md +1396 -0
- package/simulation/reports/basic-scenarios-performance.md +1840 -0
- package/simulation/reports/bmssp-integration-2025-11-30T01-36-27-193Z.json +30 -0
- package/simulation/reports/bmssp-integration-2025-11-30T03-38-12-887Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-29T23-35-21-795Z.json +36 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-58-42-862Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-59-12-546Z.json +40 -0
- package/simulation/reports/consciousness-explorer-2025-11-30T01-36-51-269Z.json +31 -0
- package/simulation/reports/core-benchmarks.md +727 -0
- package/simulation/reports/goalie-integration-2025-11-30T01-36-52-377Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-35-35-279Z.json +78 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-37-36-697Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-03-59-716Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-05-10-984Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-16-334Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-53-312Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-07-51-075Z.json +24 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-08-22-179Z.json +42 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-29T23-37-23-804Z.json +148 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T01-31-24-401Z.json +31 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T03-38-01-470Z.json +31 -0
- package/simulation/reports/multi-agent-swarm-2025-11-29T23-35-28-093Z.json +78 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-03-54-062Z.json +42 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-05-06-092Z.json +42 -0
- package/simulation/reports/psycho-symbolic-reasoner-2025-11-30T01-36-50-180Z.json +30 -0
- package/simulation/reports/quality-metrics.md +727 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-35-09-774Z.json +48 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-37-16-934Z.json +36 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-07-49-259Z.json +30 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-09-29-319Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-28-37-659Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T01-31-30-690Z.json +29 -0
- package/simulation/reports/reflexion-learning-2025-11-30T03-38-06-937Z.json +29 -0
- package/simulation/reports/research-foundations.md +2004 -0
- package/simulation/reports/research-swarm-2025-11-30T01-36-54-647Z.json +30 -0
- package/simulation/reports/scalability-deployment.md +2404 -0
- package/simulation/reports/skill-evolution-2025-11-29T23-35-15-945Z.json +36 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-17-995Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-48-441Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-05-00-554Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-11-436Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-51-979Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-07-32-695Z.json +40 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-11-43-865Z.json +56 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-28-57-495Z.json +56 -0
- package/simulation/reports/strange-loops-2025-11-29T23-37-30-621Z.json +78 -0
- package/simulation/reports/strange-loops-2025-11-30T00-07-55-415Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-09-35-133Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-48-50-744Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-54-48-044Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-27-633Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-59-135Z.json +42 -0
- package/simulation/reports/sublinear-solver-2025-11-30T01-36-33-134Z.json +30 -0
- package/simulation/reports/temporal-lead-solver-2025-11-30T01-36-38-628Z.json +30 -0
- package/simulation/reports/use-cases-applications.md +2212 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-11-37-199Z.json +58 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-28-47-735Z.json +58 -0
- package/simulation/runner.ts +300 -0
- package/simulation/scenarios/README-advanced/aidefence-integration.md +63 -0
- package/simulation/scenarios/README-advanced/bmssp-integration.md +58 -0
- package/simulation/scenarios/README-advanced/consciousness-explorer.md +53 -0
- package/simulation/scenarios/README-advanced/goalie-integration.md +61 -0
- package/simulation/scenarios/README-advanced/psycho-symbolic-reasoner.md +55 -0
- package/simulation/scenarios/README-advanced/research-swarm.md +63 -0
- package/simulation/scenarios/README-advanced/sublinear-solver.md +58 -0
- package/simulation/scenarios/README-advanced/temporal-lead-solver.md +55 -0
- package/simulation/scenarios/README-basic/causal-reasoning.md +39 -0
- package/simulation/scenarios/README-basic/graph-traversal.md +41 -0
- package/simulation/scenarios/README-basic/lean-agentic-swarm.md +122 -0
- package/simulation/scenarios/README-basic/multi-agent-swarm.md +34 -0
- package/simulation/scenarios/README-basic/reflexion-learning.md +41 -0
- package/simulation/scenarios/README-basic/skill-evolution.md +38 -0
- package/simulation/scenarios/README-basic/stock-market-emergence.md +28 -0
- package/simulation/scenarios/README-basic/strange-loops.md +36 -0
- package/simulation/scenarios/README-basic/voting-system-consensus.md +28 -0
- package/simulation/scenarios/README.md +438 -0
- package/simulation/scenarios/aidefence-integration.ts +165 -0
- package/simulation/scenarios/bmssp-integration.ts +137 -0
- package/simulation/scenarios/causal-reasoning.ts +143 -0
- package/simulation/scenarios/consciousness-explorer.ts +139 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/performance.json +87 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/scenarios/domain-examples/README.md +525 -0
- package/simulation/scenarios/domain-examples/e-commerce-recommendations.ts +220 -0
- package/simulation/scenarios/domain-examples/index.ts +81 -0
- package/simulation/scenarios/domain-examples/iot-sensor-networks.ts +290 -0
- package/simulation/scenarios/domain-examples/medical-imaging.ts +181 -0
- package/simulation/scenarios/domain-examples/robotics-navigation.ts +214 -0
- package/simulation/scenarios/domain-examples/scientific-research.ts +250 -0
- package/simulation/scenarios/domain-examples/trading-systems.ts +138 -0
- package/simulation/scenarios/goalie-integration.ts +161 -0
- package/simulation/scenarios/graph-traversal.ts +129 -0
- package/simulation/scenarios/latent-space/OPTIMIZATION-COMPLETE.md +287 -0
- package/simulation/scenarios/latent-space/README-attention-analysis.md +170 -0
- package/simulation/scenarios/latent-space/README-clustering-analysis.md +239 -0
- package/simulation/scenarios/latent-space/README-hnsw-exploration.md +199 -0
- package/simulation/scenarios/latent-space/README-hypergraph-exploration.md +279 -0
- package/simulation/scenarios/latent-space/README-neural-augmentation.md +267 -0
- package/simulation/scenarios/latent-space/README-quantum-hybrid.md +276 -0
- package/simulation/scenarios/latent-space/README-self-organizing-hnsw.md +244 -0
- package/simulation/scenarios/latent-space/README-traversal-optimization.md +212 -0
- package/simulation/scenarios/latent-space/attention-analysis.ts +598 -0
- package/simulation/scenarios/latent-space/clustering-analysis.ts +796 -0
- package/simulation/scenarios/latent-space/hnsw-exploration.ts +526 -0
- package/simulation/scenarios/latent-space/hypergraph-exploration.ts +706 -0
- package/simulation/scenarios/latent-space/index.ts +47 -0
- package/simulation/scenarios/latent-space/neural-augmentation.ts +604 -0
- package/simulation/scenarios/latent-space/quantum-hybrid.ts +508 -0
- package/simulation/scenarios/latent-space/self-organizing-hnsw.ts +680 -0
- package/simulation/scenarios/latent-space/traversal-optimization.ts +782 -0
- package/simulation/scenarios/lean-agentic-swarm.ts +182 -0
- package/simulation/scenarios/multi-agent-swarm.ts +146 -0
- package/simulation/scenarios/psycho-symbolic-reasoner.ts +136 -0
- package/simulation/scenarios/reflexion-learning.ts +132 -0
- package/simulation/scenarios/research-swarm.ts +187 -0
- package/simulation/scenarios/skill-evolution.ts +135 -0
- package/simulation/scenarios/stock-market-emergence.ts +323 -0
- package/simulation/scenarios/strange-loops.ts +175 -0
- package/simulation/scenarios/sublinear-solver.ts +108 -0
- package/simulation/scenarios/temporal-lead-solver.ts +121 -0
- package/simulation/scenarios/voting-system-consensus.ts +251 -0
- package/simulation/tests/latent-space/attention-analysis.test.ts +204 -0
- package/simulation/tests/latent-space/clustering-analysis.test.ts +281 -0
- package/simulation/tests/latent-space/hnsw-exploration.test.ts +253 -0
- package/simulation/tests/latent-space/hypergraph-exploration.test.ts +295 -0
- package/simulation/tests/latent-space/neural-augmentation.test.ts +326 -0
- package/simulation/tests/latent-space/quantum-hybrid.test.ts +307 -0
- package/simulation/tests/latent-space/self-organizing-hnsw.test.ts +291 -0
- package/simulation/tests/latent-space/traversal-optimization.test.ts +261 -0
- package/simulation/types.ts +177 -0
- package/simulation/utils/PerformanceOptimizer.ts +269 -0
- package/src/cli/lib/history-tracker.ts +7 -1
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HNSW Exploration Simulation Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests hierarchical navigable small world graph structure,
|
|
5
|
+
* small-world properties, and sub-millisecond search performance.
|
|
6
|
+
*
|
|
7
|
+
* Target Metrics:
|
|
8
|
+
* - M=32 configuration (optimal)
|
|
9
|
+
* - Small-world index σ=2.84 (range: 2.5-3.5)
|
|
10
|
+
* - Clustering coefficient: 0.39
|
|
11
|
+
* - Average path length: O(log N)
|
|
12
|
+
* - 8.2x speedup vs hnswlib
|
|
13
|
+
* - <100μs latency (target: 61μs p50)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { describe, it, expect, beforeAll } from 'vitest';
|
|
17
|
+
import { hnswExplorationScenario } from '../../scenarios/latent-space/hnsw-exploration';
|
|
18
|
+
import type { SimulationReport } from '../../types';
|
|
19
|
+
|
|
20
|
+
describe('HNSWExploration', () => {
|
|
21
|
+
let report: SimulationReport;
|
|
22
|
+
|
|
23
|
+
beforeAll(async () => {
|
|
24
|
+
report = await hnswExplorationScenario.run(hnswExplorationScenario.config);
|
|
25
|
+
}, 120000); // 120s timeout for large graphs
|
|
26
|
+
|
|
27
|
+
describe('Optimal M Configuration', () => {
|
|
28
|
+
it('should use M=32 for best performance', () => {
|
|
29
|
+
const best = report.summary.bestPerformance;
|
|
30
|
+
expect(best.M).toBe(32);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should test multiple M values', () => {
|
|
34
|
+
const mValues = hnswExplorationScenario.config.hnswParams.map(p => p.M);
|
|
35
|
+
expect(mValues).toContain(16);
|
|
36
|
+
expect(mValues).toContain(32);
|
|
37
|
+
expect(mValues).toContain(64);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('should use appropriate efConstruction', () => {
|
|
41
|
+
const best = report.summary.bestPerformance;
|
|
42
|
+
expect(best.efConstruction).toBeGreaterThanOrEqual(200);
|
|
43
|
+
expect(best.efConstruction).toBeLessThanOrEqual(800);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('Small-World Properties', () => {
|
|
48
|
+
it('should achieve small-world index in range 2.5-3.5', () => {
|
|
49
|
+
const topology = report.metrics.graphTopology;
|
|
50
|
+
expect(topology.averageSmallWorldIndex).toBeGreaterThan(2.5);
|
|
51
|
+
expect(topology.averageSmallWorldIndex).toBeLessThan(3.5);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('should target σ=2.84', () => {
|
|
55
|
+
const topology = report.metrics.graphTopology;
|
|
56
|
+
expect(topology.averageSmallWorldIndex).toBeCloseTo(2.84, 0.5);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should have clustering coefficient ~0.39', () => {
|
|
60
|
+
const topology = report.metrics.graphTopology;
|
|
61
|
+
expect(topology.averageClusteringCoeff).toBeCloseTo(0.39, 0.15);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should maintain clustering coefficient >0.3', () => {
|
|
65
|
+
const topology = report.metrics.graphTopology;
|
|
66
|
+
expect(topology.averageClusteringCoeff).toBeGreaterThan(0.3);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
describe('Average Path Length', () => {
|
|
71
|
+
it('should scale as O(log N)', () => {
|
|
72
|
+
const results = report.detailedResults as any[];
|
|
73
|
+
const largeGraph = results.find(r => r.vectorCount === 100000);
|
|
74
|
+
|
|
75
|
+
if (largeGraph) {
|
|
76
|
+
const expectedPath = Math.log2(largeGraph.vectorCount) * 1.5;
|
|
77
|
+
expect(largeGraph.graphMetrics.averagePathLength).toBeLessThan(expectedPath);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should have efficient navigation paths', () => {
|
|
82
|
+
const results = report.detailedResults as any[];
|
|
83
|
+
results.forEach(r => {
|
|
84
|
+
const maxExpectedPath = Math.log2(r.vectorCount) * 2;
|
|
85
|
+
expect(r.graphMetrics.averagePathLength).toBeLessThan(maxExpectedPath);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('Search Performance', () => {
|
|
91
|
+
it('should achieve 8.2x speedup vs hnswlib', () => {
|
|
92
|
+
const ruvector = (report.detailedResults as any[]).find(
|
|
93
|
+
r => r.backend === 'ruvector-gnn'
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
if (ruvector) {
|
|
97
|
+
expect(ruvector.speedupVsBaseline).toBeGreaterThan(2.0);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should target 8x+ speedup', () => {
|
|
102
|
+
const ruvector = (report.detailedResults as any[]).find(
|
|
103
|
+
r => r.backend === 'ruvector-gnn' && r.vectorCount === 100000
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
if (ruvector) {
|
|
107
|
+
expect(ruvector.speedupVsBaseline).toBeCloseTo(8.2, 3);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should achieve sub-millisecond latency', () => {
|
|
112
|
+
const results = report.detailedResults as any[];
|
|
113
|
+
const hasSubMs = results.some(r => {
|
|
114
|
+
const latencies = r.graphMetrics.searchLatencyUs || [];
|
|
115
|
+
return latencies.some((l: any) => l.p99 < 1000);
|
|
116
|
+
});
|
|
117
|
+
expect(hasSubMs).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('should target 61μs p50 latency', () => {
|
|
121
|
+
const best = report.summary.bestPerformance;
|
|
122
|
+
const latencies = (best as any).graphMetrics?.searchLatencyUs || [];
|
|
123
|
+
|
|
124
|
+
if (latencies.length > 0) {
|
|
125
|
+
const p50 = latencies.find((l: any) => l.k === 10)?.p50 || 0;
|
|
126
|
+
expect(p50).toBeLessThan(100);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('should maintain high QPS', () => {
|
|
131
|
+
const search = report.metrics.searchPerformance;
|
|
132
|
+
expect(search.bestQPS).toBeGreaterThan(1000);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe('Recall Quality', () => {
|
|
137
|
+
it('should achieve >95% recall@10', () => {
|
|
138
|
+
const results = report.detailedResults as any[];
|
|
139
|
+
results.forEach(r => {
|
|
140
|
+
const recall10 = r.recallAtK.find((rec: any) => rec.k === 10);
|
|
141
|
+
if (recall10) {
|
|
142
|
+
expect(recall10.recall).toBeGreaterThan(0.95);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('should test multiple k values', () => {
|
|
148
|
+
const kValues = hnswExplorationScenario.config.kValues;
|
|
149
|
+
expect(kValues).toContain(1);
|
|
150
|
+
expect(kValues).toContain(10);
|
|
151
|
+
expect(kValues).toContain(100);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe('Graph Topology', () => {
|
|
156
|
+
it('should have hierarchical layer structure', () => {
|
|
157
|
+
const results = report.detailedResults as any[];
|
|
158
|
+
results.forEach(r => {
|
|
159
|
+
expect(r.graphMetrics.layers).toBeGreaterThan(1);
|
|
160
|
+
expect(r.graphMetrics.nodesPerLayer.length).toBe(r.graphMetrics.layers);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should have exponential layer decay', () => {
|
|
165
|
+
const results = report.detailedResults as any[];
|
|
166
|
+
const sample = results[0];
|
|
167
|
+
|
|
168
|
+
if (sample) {
|
|
169
|
+
const layers = sample.graphMetrics.nodesPerLayer;
|
|
170
|
+
for (let i = 1; i < layers.length; i++) {
|
|
171
|
+
expect(layers[i]).toBeLessThan(layers[i - 1]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should track connectivity distribution', () => {
|
|
177
|
+
const results = report.detailedResults as any[];
|
|
178
|
+
results.forEach(r => {
|
|
179
|
+
expect(r.graphMetrics.connectivityDistribution).toBeDefined();
|
|
180
|
+
expect(r.graphMetrics.connectivityDistribution.length).toBe(r.graphMetrics.layers);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
describe('Backend Comparison', () => {
|
|
186
|
+
it('should test ruvector-gnn backend', () => {
|
|
187
|
+
const backends = hnswExplorationScenario.config.backends;
|
|
188
|
+
expect(backends).toContain('ruvector-gnn');
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('should test hnswlib baseline', () => {
|
|
192
|
+
const backends = hnswExplorationScenario.config.backends;
|
|
193
|
+
expect(backends).toContain('hnswlib');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('should compare backend performance', () => {
|
|
197
|
+
const comparison = report.metrics.backendComparison;
|
|
198
|
+
expect(Array.isArray(comparison)).toBe(true);
|
|
199
|
+
expect(comparison.length).toBeGreaterThan(0);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
describe('Parameter Sensitivity', () => {
|
|
204
|
+
it('should analyze M parameter impact', () => {
|
|
205
|
+
const sensitivity = report.metrics.parameterSensitivity;
|
|
206
|
+
expect(sensitivity.MImpact).toBeDefined();
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('should analyze efConstruction impact', () => {
|
|
210
|
+
const sensitivity = report.metrics.parameterSensitivity;
|
|
211
|
+
expect(sensitivity.efConstructionImpact).toBeDefined();
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('should analyze efSearch impact', () => {
|
|
215
|
+
const sensitivity = report.metrics.parameterSensitivity;
|
|
216
|
+
expect(sensitivity.efSearchImpact).toBeDefined();
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe('Target Validation', () => {
|
|
221
|
+
it('should meet 2-4x speedup target', () => {
|
|
222
|
+
const targetsMet = report.summary.targetsMet;
|
|
223
|
+
expect(targetsMet).toBe(true);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('should validate small-world properties', () => {
|
|
227
|
+
const topology = report.metrics.graphTopology;
|
|
228
|
+
expect(topology.averageSmallWorldIndex).toBeGreaterThan(1.0);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('Report Generation', () => {
|
|
233
|
+
it('should generate complete analysis', () => {
|
|
234
|
+
expect(report.analysis).toBeDefined();
|
|
235
|
+
expect(report.analysis).toContain('HNSW');
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it('should provide actionable recommendations', () => {
|
|
239
|
+
expect(report.recommendations).toBeDefined();
|
|
240
|
+
expect(report.recommendations.length).toBeGreaterThan(0);
|
|
241
|
+
expect(report.recommendations.some(r => r.includes('M='))).toBe(true);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
it('should generate visualizations', () => {
|
|
245
|
+
expect(report.artifacts.graphVisualizations).toBeDefined();
|
|
246
|
+
expect(report.artifacts.performanceCharts).toBeDefined();
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('should complete within timeout', () => {
|
|
250
|
+
expect(report.executionTimeMs).toBeLessThan(120000);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hypergraph Exploration Simulation Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests hypergraph structures for multi-agent relationships,
|
|
5
|
+
* complex patterns, and Cypher query performance.
|
|
6
|
+
*
|
|
7
|
+
* Target Metrics:
|
|
8
|
+
* - Hyperedge creation (3+ nodes)
|
|
9
|
+
* - Compression ratio >3x (target: 3.7x)
|
|
10
|
+
* - Neo4j Cypher queries <15ms
|
|
11
|
+
* - Multi-agent collaboration modeling
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { describe, it, expect, beforeAll } from 'vitest';
|
|
15
|
+
import { hypergraphExplorationScenario } from '../../scenarios/latent-space/hypergraph-exploration';
|
|
16
|
+
import type { SimulationReport } from '../../types';
|
|
17
|
+
|
|
18
|
+
describe('HypergraphExploration', () => {
|
|
19
|
+
let report: SimulationReport;
|
|
20
|
+
|
|
21
|
+
beforeAll(async () => {
|
|
22
|
+
report = await hypergraphExplorationScenario.run(hypergraphExplorationScenario.config);
|
|
23
|
+
}, 90000); // 90s timeout
|
|
24
|
+
|
|
25
|
+
describe('Hyperedge Structure', () => {
|
|
26
|
+
it('should create 3+ node hyperedges', () => {
|
|
27
|
+
const avgSize = report.summary.avgHyperedgeSize;
|
|
28
|
+
expect(avgSize).toBeGreaterThan(3.0);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should target 3.5-4.5 average hyperedge size', () => {
|
|
32
|
+
const avgSize = report.summary.avgHyperedgeSize;
|
|
33
|
+
expect(avgSize).toBeGreaterThan(3.0);
|
|
34
|
+
expect(avgSize).toBeLessThan(5.0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should test size distribution', () => {
|
|
38
|
+
const dist = hypergraphExplorationScenario.config.hyperedgeSizeDistribution;
|
|
39
|
+
expect(dist.size3).toBe(0.50);
|
|
40
|
+
expect(dist.size4).toBe(0.30);
|
|
41
|
+
expect(dist.size5Plus).toBe(0.20);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should have varied hyperedge sizes', () => {
|
|
45
|
+
const results = report.detailedResults as any[];
|
|
46
|
+
results.forEach(r => {
|
|
47
|
+
expect(r.metrics.maxHyperedgeSize).toBeGreaterThanOrEqual(3);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('Compression Ratio', () => {
|
|
53
|
+
it('should compress >3x vs standard graph', () => {
|
|
54
|
+
const results = report.detailedResults as any[];
|
|
55
|
+
results.forEach(r => {
|
|
56
|
+
if (r.comparison?.compressionRatio) {
|
|
57
|
+
expect(r.comparison.compressionRatio).toBeGreaterThan(3.0);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should target 3.7x compression', () => {
|
|
63
|
+
const results = report.detailedResults as any[];
|
|
64
|
+
const compressions = results
|
|
65
|
+
.filter(r => r.comparison?.compressionRatio)
|
|
66
|
+
.map(r => r.comparison.compressionRatio);
|
|
67
|
+
|
|
68
|
+
if (compressions.length > 0) {
|
|
69
|
+
const avg = compressions.reduce((a, b) => a + b, 0) / compressions.length;
|
|
70
|
+
expect(avg).toBeCloseTo(3.7, 1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should reduce edge count significantly', () => {
|
|
75
|
+
const results = report.detailedResults as any[];
|
|
76
|
+
results.forEach(r => {
|
|
77
|
+
if (r.comparison) {
|
|
78
|
+
expect(r.comparison.hypergraphEdges).toBeLessThan(r.comparison.standardGraphEdges);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe('Cypher Query Performance', () => {
|
|
85
|
+
it('should execute queries <15ms average', () => {
|
|
86
|
+
const avgLatency = report.summary.avgQueryLatency;
|
|
87
|
+
expect(avgLatency).toBeLessThan(15);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should support find-collaborators query', () => {
|
|
91
|
+
const queryTypes = hypergraphExplorationScenario.config.queryTypes;
|
|
92
|
+
expect(queryTypes).toContain('find-collaborators');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('should support trace-dependencies query', () => {
|
|
96
|
+
const queryTypes = hypergraphExplorationScenario.config.queryTypes;
|
|
97
|
+
expect(queryTypes).toContain('trace-dependencies');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should support pattern-match query', () => {
|
|
101
|
+
const queryTypes = hypergraphExplorationScenario.config.queryTypes;
|
|
102
|
+
expect(queryTypes).toContain('pattern-match');
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('should execute all query types', () => {
|
|
106
|
+
const results = report.detailedResults as any[];
|
|
107
|
+
results.forEach(r => {
|
|
108
|
+
if (r.metrics.cypherQueryLatencyMs) {
|
|
109
|
+
expect(r.metrics.cypherQueryLatencyMs).toBeGreaterThan(0);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe('Multi-Agent Collaboration', () => {
|
|
116
|
+
it('should model collaboration groups', () => {
|
|
117
|
+
const avgGroups = report.summary.avgCollaborationGroups;
|
|
118
|
+
expect(avgGroups).toBeGreaterThan(0);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('should support hierarchical patterns', () => {
|
|
122
|
+
const patterns = hypergraphExplorationScenario.config.collaborationPatterns;
|
|
123
|
+
expect(patterns).toContain('hierarchical');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should support peer-to-peer patterns', () => {
|
|
127
|
+
const patterns = hypergraphExplorationScenario.config.collaborationPatterns;
|
|
128
|
+
expect(patterns).toContain('peer-to-peer');
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('should support pipeline patterns', () => {
|
|
132
|
+
const patterns = hypergraphExplorationScenario.config.collaborationPatterns;
|
|
133
|
+
expect(patterns).toContain('pipeline');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('should track task coverage', () => {
|
|
137
|
+
const results = report.detailedResults as any[];
|
|
138
|
+
results.forEach(r => {
|
|
139
|
+
if (r.metrics.taskCoverage !== undefined) {
|
|
140
|
+
expect(r.metrics.taskCoverage).toBeGreaterThan(0);
|
|
141
|
+
expect(r.metrics.taskCoverage).toBeLessThanOrEqual(1.0);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe('Structural Properties', () => {
|
|
148
|
+
it('should maintain hypergraph density', () => {
|
|
149
|
+
const results = report.detailedResults as any[];
|
|
150
|
+
results.forEach(r => {
|
|
151
|
+
expect(r.metrics.hypergraphDensity).toBeGreaterThan(0);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('should have small-world properties', () => {
|
|
156
|
+
const results = report.detailedResults as any[];
|
|
157
|
+
results.forEach(r => {
|
|
158
|
+
if (r.metrics.smallWorldness) {
|
|
159
|
+
expect(r.metrics.smallWorldness).toBeGreaterThan(0.5);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should track clustering coefficient', () => {
|
|
165
|
+
const results = report.detailedResults as any[];
|
|
166
|
+
results.forEach(r => {
|
|
167
|
+
expect(r.metrics.clusteringCoefficient).toBeGreaterThan(0);
|
|
168
|
+
expect(r.metrics.clusteringCoefficient).toBeLessThanOrEqual(1.0);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
describe('Causal Relationships', () => {
|
|
174
|
+
it('should trace causal chains', () => {
|
|
175
|
+
const results = report.detailedResults as any[];
|
|
176
|
+
results.forEach(r => {
|
|
177
|
+
expect(r.metrics.causalChainLength).toBeGreaterThan(0);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('should track branching factor', () => {
|
|
182
|
+
const results = report.detailedResults as any[];
|
|
183
|
+
results.forEach(r => {
|
|
184
|
+
expect(r.metrics.causalBranchingFactor).toBeGreaterThan(1);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should maintain transitivity', () => {
|
|
189
|
+
const results = report.detailedResults as any[];
|
|
190
|
+
results.forEach(r => {
|
|
191
|
+
expect(r.metrics.transitivityScore).toBeGreaterThan(0.6);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('Query Types', () => {
|
|
197
|
+
it('should execute aggregation queries', () => {
|
|
198
|
+
const queryTypes = hypergraphExplorationScenario.config.queryTypes;
|
|
199
|
+
expect(queryTypes).toContain('aggregation');
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('should execute path queries', () => {
|
|
203
|
+
const queryTypes = hypergraphExplorationScenario.config.queryTypes;
|
|
204
|
+
expect(queryTypes).toContain('path-query');
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('should return query results', () => {
|
|
208
|
+
const results = report.detailedResults as any[];
|
|
209
|
+
const withResults = results.filter(
|
|
210
|
+
r => r.metrics.cypherQueryLatencyMs && r.metrics.queryResults
|
|
211
|
+
);
|
|
212
|
+
expect(withResults.length).toBeGreaterThan(0);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
describe('Scalability', () => {
|
|
217
|
+
it('should scale to 100k nodes', () => {
|
|
218
|
+
const sizes = hypergraphExplorationScenario.config.graphSizes;
|
|
219
|
+
expect(sizes).toContain(100000);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it('should maintain query performance at scale', () => {
|
|
223
|
+
const large = (report.detailedResults as any[]).filter(r => r.size === 100000);
|
|
224
|
+
|
|
225
|
+
large.forEach(r => {
|
|
226
|
+
if (r.metrics.cypherQueryLatencyMs) {
|
|
227
|
+
expect(r.metrics.cypherQueryLatencyMs).toBeLessThan(50);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('should handle large hyperedges', () => {
|
|
233
|
+
const results = report.detailedResults as any[];
|
|
234
|
+
const withLarge = results.filter(r => r.metrics.maxHyperedgeSize > 5);
|
|
235
|
+
expect(withLarge.length).toBeGreaterThan(0);
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
describe('Expressiveness', () => {
|
|
240
|
+
it('should provide expressiveness benefit', () => {
|
|
241
|
+
const results = report.detailedResults as any[];
|
|
242
|
+
results.forEach(r => {
|
|
243
|
+
if (r.comparison?.expressivenessBenefit) {
|
|
244
|
+
expect(r.comparison.expressivenessBenefit).toBeGreaterThan(0.5);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('should model complex patterns naturally', () => {
|
|
250
|
+
const avgSize = report.summary.avgHyperedgeSize;
|
|
251
|
+
expect(avgSize).toBeGreaterThan(2.5); // More than pairwise
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
describe('Pattern Matching', () => {
|
|
256
|
+
it('should find triangular patterns', () => {
|
|
257
|
+
const results = report.detailedResults as any[];
|
|
258
|
+
const withPatterns = results.filter(
|
|
259
|
+
r => r.metrics.patternMatchingMs !== undefined
|
|
260
|
+
);
|
|
261
|
+
expect(withPatterns.length).toBeGreaterThan(0);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('should traverse hyperedges efficiently', () => {
|
|
265
|
+
const results = report.detailedResults as any[];
|
|
266
|
+
results.forEach(r => {
|
|
267
|
+
if (r.metrics.hyperedgeTraversalMs) {
|
|
268
|
+
expect(r.metrics.hyperedgeTraversalMs).toBeLessThan(20);
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
describe('Report Generation', () => {
|
|
275
|
+
it('should generate analysis', () => {
|
|
276
|
+
expect(report.analysis).toBeDefined();
|
|
277
|
+
expect(report.analysis).toContain('Hypergraph');
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('should provide recommendations', () => {
|
|
281
|
+
expect(report.recommendations).toBeDefined();
|
|
282
|
+
expect(report.recommendations.some(r => r.includes('hypergraph'))).toBe(true);
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
it('should generate visualizations', () => {
|
|
286
|
+
expect(report.artifacts.hypergraphVisualizations).toBeDefined();
|
|
287
|
+
expect(report.artifacts.collaborationDiagrams).toBeDefined();
|
|
288
|
+
expect(report.artifacts.queryPerformanceCharts).toBeDefined();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('should complete within timeout', () => {
|
|
292
|
+
expect(report.executionTimeMs).toBeLessThan(90000);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
});
|