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,892 @@
|
|
|
1
|
+
# AgentDB Simulation Architecture
|
|
2
|
+
|
|
3
|
+
**Version**: 2.0.0
|
|
4
|
+
**Last Updated**: 2025-11-30
|
|
5
|
+
**Target Audience**: Developers extending the simulation system
|
|
6
|
+
|
|
7
|
+
This document describes the TypeScript architecture of AgentDB's latent space simulation system, including design patterns, extension points, and how to add custom scenarios or components.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🏗️ Architecture Overview
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
packages/agentdb/simulation/
|
|
15
|
+
├── scenarios/ # Simulation implementations
|
|
16
|
+
│ └── latent-space/
|
|
17
|
+
│ ├── attention-analysis.ts
|
|
18
|
+
│ ├── hnsw-exploration.ts
|
|
19
|
+
│ ├── clustering-analysis.ts
|
|
20
|
+
│ ├── traversal-optimization.ts
|
|
21
|
+
│ ├── hypergraph-exploration.ts
|
|
22
|
+
│ ├── self-organizing-hnsw.ts
|
|
23
|
+
│ ├── neural-augmentation.ts
|
|
24
|
+
│ ├── quantum-hybrid.ts
|
|
25
|
+
│ ├── types.ts # Shared TypeScript interfaces
|
|
26
|
+
│ └── index.ts # Scenario registry
|
|
27
|
+
├── src/
|
|
28
|
+
│ └── cli/
|
|
29
|
+
│ ├── commands/
|
|
30
|
+
│ │ ├── simulate.ts # Main CLI command
|
|
31
|
+
│ │ ├── simulate-wizard.ts
|
|
32
|
+
│ │ ├── simulate-custom.ts
|
|
33
|
+
│ │ └── simulate-report.ts
|
|
34
|
+
│ └── lib/
|
|
35
|
+
│ ├── simulation-runner.ts
|
|
36
|
+
│ ├── config-validator.ts
|
|
37
|
+
│ ├── report-generator.ts
|
|
38
|
+
│ └── help-formatter.ts
|
|
39
|
+
├── tests/
|
|
40
|
+
│ └── latent-space/
|
|
41
|
+
│ └── [test files].test.ts
|
|
42
|
+
└── docs/
|
|
43
|
+
├── guides/
|
|
44
|
+
├── architecture/ (this file)
|
|
45
|
+
└── reports/
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 🎯 Core Concepts
|
|
51
|
+
|
|
52
|
+
### 1. Simulation Scenario
|
|
53
|
+
|
|
54
|
+
A **scenario** is a complete benchmark test that:
|
|
55
|
+
1. Configures a vector database setup
|
|
56
|
+
2. Executes operations (inserts, queries, updates)
|
|
57
|
+
3. Measures performance metrics
|
|
58
|
+
4. Generates a comprehensive report
|
|
59
|
+
|
|
60
|
+
**Example**: `hnsw-exploration.ts` tests HNSW graph topology and small-world properties.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### 2. Component
|
|
65
|
+
|
|
66
|
+
A **component** is a reusable building block like:
|
|
67
|
+
- Backend (RuVector, hnswlib, FAISS)
|
|
68
|
+
- Attention mechanism (4/8/16-head GNN)
|
|
69
|
+
- Search strategy (greedy, beam, A*)
|
|
70
|
+
- Clustering algorithm (Louvain, spectral)
|
|
71
|
+
- Self-healing policy (MPC, reactive)
|
|
72
|
+
- Neural feature (GNN edges, RL navigation)
|
|
73
|
+
|
|
74
|
+
**Components are composable** via the custom builder.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 3. Report
|
|
79
|
+
|
|
80
|
+
A **report** is a structured document (Markdown, JSON, or HTML) containing:
|
|
81
|
+
- Executive summary
|
|
82
|
+
- Configuration details
|
|
83
|
+
- Performance metrics
|
|
84
|
+
- Coherence analysis
|
|
85
|
+
- Recommendations
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 📦 TypeScript Type System
|
|
90
|
+
|
|
91
|
+
### Core Interfaces (`scenarios/latent-space/types.ts`)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
/**
|
|
95
|
+
* Base interface for all simulation scenarios
|
|
96
|
+
*/
|
|
97
|
+
export interface SimulationScenario {
|
|
98
|
+
/** Unique scenario identifier */
|
|
99
|
+
id: string;
|
|
100
|
+
|
|
101
|
+
/** Human-readable name */
|
|
102
|
+
name: string;
|
|
103
|
+
|
|
104
|
+
/** Category for organization */
|
|
105
|
+
category: string;
|
|
106
|
+
|
|
107
|
+
/** Brief description */
|
|
108
|
+
description: string;
|
|
109
|
+
|
|
110
|
+
/** Expected duration in seconds */
|
|
111
|
+
expectedDuration: number;
|
|
112
|
+
|
|
113
|
+
/** Run the simulation */
|
|
114
|
+
run(config: SimulationConfig): Promise<SimulationReport>;
|
|
115
|
+
|
|
116
|
+
/** Validate configuration before execution */
|
|
117
|
+
validate(config: SimulationConfig): ValidationResult;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Simulation configuration
|
|
122
|
+
*/
|
|
123
|
+
export interface SimulationConfig {
|
|
124
|
+
/** Number of vectors */
|
|
125
|
+
nodes: number;
|
|
126
|
+
|
|
127
|
+
/** Vector dimensions */
|
|
128
|
+
dimensions: number;
|
|
129
|
+
|
|
130
|
+
/** Number of iterations for coherence */
|
|
131
|
+
iterations: number;
|
|
132
|
+
|
|
133
|
+
/** Backend selection */
|
|
134
|
+
backend: 'ruvector' | 'hnswlib' | 'faiss';
|
|
135
|
+
|
|
136
|
+
/** HNSW parameters */
|
|
137
|
+
hnsw?: HNSWConfig;
|
|
138
|
+
|
|
139
|
+
/** Attention configuration */
|
|
140
|
+
attention?: AttentionConfig;
|
|
141
|
+
|
|
142
|
+
/** Search strategy */
|
|
143
|
+
search?: SearchConfig;
|
|
144
|
+
|
|
145
|
+
/** Clustering algorithm */
|
|
146
|
+
clustering?: ClusteringConfig;
|
|
147
|
+
|
|
148
|
+
/** Self-healing policy */
|
|
149
|
+
selfHealing?: SelfHealingConfig;
|
|
150
|
+
|
|
151
|
+
/** Neural augmentation features */
|
|
152
|
+
neural?: NeuralConfig;
|
|
153
|
+
|
|
154
|
+
/** Output options */
|
|
155
|
+
output?: OutputConfig;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Simulation results
|
|
160
|
+
*/
|
|
161
|
+
export interface SimulationReport {
|
|
162
|
+
/** Scenario metadata */
|
|
163
|
+
scenario: {
|
|
164
|
+
id: string;
|
|
165
|
+
name: string;
|
|
166
|
+
timestamp: Date;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/** Configuration used */
|
|
170
|
+
config: SimulationConfig;
|
|
171
|
+
|
|
172
|
+
/** Performance metrics */
|
|
173
|
+
metrics: PerformanceMetrics;
|
|
174
|
+
|
|
175
|
+
/** Coherence analysis */
|
|
176
|
+
coherence: CoherenceAnalysis;
|
|
177
|
+
|
|
178
|
+
/** Recommendations */
|
|
179
|
+
recommendations: string[];
|
|
180
|
+
|
|
181
|
+
/** Raw iteration data */
|
|
182
|
+
iterations: IterationResult[];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Performance metrics
|
|
187
|
+
*/
|
|
188
|
+
export interface PerformanceMetrics {
|
|
189
|
+
/** Latency statistics */
|
|
190
|
+
latency: {
|
|
191
|
+
p50: number; // microseconds
|
|
192
|
+
p95: number;
|
|
193
|
+
p99: number;
|
|
194
|
+
mean: number;
|
|
195
|
+
stddev: number;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/** Recall at different k values */
|
|
199
|
+
recall: {
|
|
200
|
+
k10: number; // Recall@10
|
|
201
|
+
k50: number;
|
|
202
|
+
k100: number;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/** Queries per second */
|
|
206
|
+
qps: number;
|
|
207
|
+
|
|
208
|
+
/** Memory usage in MB */
|
|
209
|
+
memory: number;
|
|
210
|
+
|
|
211
|
+
/** Graph properties (for HNSW) */
|
|
212
|
+
graph?: GraphProperties;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* HNSW graph properties
|
|
217
|
+
*/
|
|
218
|
+
export interface GraphProperties {
|
|
219
|
+
/** Small-world index */
|
|
220
|
+
smallWorldIndex: number; // σ value
|
|
221
|
+
|
|
222
|
+
/** Clustering coefficient */
|
|
223
|
+
clusteringCoefficient: number;
|
|
224
|
+
|
|
225
|
+
/** Average path length */
|
|
226
|
+
avgPathLength: number;
|
|
227
|
+
|
|
228
|
+
/** Modularity */
|
|
229
|
+
modularity: number;
|
|
230
|
+
|
|
231
|
+
/** Layer distribution */
|
|
232
|
+
layerDistribution: number[];
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Coherence analysis across iterations
|
|
237
|
+
*/
|
|
238
|
+
export interface CoherenceAnalysis {
|
|
239
|
+
/** Overall coherence score (0-1) */
|
|
240
|
+
score: number;
|
|
241
|
+
|
|
242
|
+
/** Variance in latency */
|
|
243
|
+
latencyVariance: number;
|
|
244
|
+
|
|
245
|
+
/** Variance in recall */
|
|
246
|
+
recallVariance: number;
|
|
247
|
+
|
|
248
|
+
/** Statistical significance */
|
|
249
|
+
pValue: number;
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 🔌 Extension Points
|
|
256
|
+
|
|
257
|
+
### Adding a New Simulation Scenario
|
|
258
|
+
|
|
259
|
+
**Step 1**: Create TypeScript file
|
|
260
|
+
|
|
261
|
+
Create `packages/agentdb/simulation/scenarios/my-category/my-simulation.ts`:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
import { SimulationScenario, SimulationConfig, SimulationReport } from '../latent-space/types';
|
|
265
|
+
|
|
266
|
+
export class MySimulation implements SimulationScenario {
|
|
267
|
+
id = 'my-simulation';
|
|
268
|
+
name = 'My Custom Simulation';
|
|
269
|
+
category = 'my-category';
|
|
270
|
+
description = 'Tests my custom feature';
|
|
271
|
+
expectedDuration = 5.2; // seconds
|
|
272
|
+
|
|
273
|
+
async run(config: SimulationConfig): Promise<SimulationReport> {
|
|
274
|
+
// 1. Initialize database
|
|
275
|
+
const db = await this.initializeDatabase(config);
|
|
276
|
+
|
|
277
|
+
// 2. Insert vectors
|
|
278
|
+
const vectors = this.generateVectors(config.nodes, config.dimensions);
|
|
279
|
+
await db.insertBatch(vectors);
|
|
280
|
+
|
|
281
|
+
// 3. Run queries
|
|
282
|
+
const queries = this.generateQueries(1000);
|
|
283
|
+
const results = await this.runQueries(db, queries);
|
|
284
|
+
|
|
285
|
+
// 4. Measure performance
|
|
286
|
+
const metrics = this.calculateMetrics(results);
|
|
287
|
+
|
|
288
|
+
// 5. Generate report
|
|
289
|
+
return {
|
|
290
|
+
scenario: {
|
|
291
|
+
id: this.id,
|
|
292
|
+
name: this.name,
|
|
293
|
+
timestamp: new Date(),
|
|
294
|
+
},
|
|
295
|
+
config,
|
|
296
|
+
metrics,
|
|
297
|
+
coherence: this.calculateCoherence(results),
|
|
298
|
+
recommendations: this.generateRecommendations(metrics),
|
|
299
|
+
iterations: results,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
validate(config: SimulationConfig): ValidationResult {
|
|
304
|
+
if (config.nodes < 1000) {
|
|
305
|
+
return {
|
|
306
|
+
valid: false,
|
|
307
|
+
errors: ['Minimum 1000 nodes required for my-simulation'],
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return { valid: true };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private async initializeDatabase(config: SimulationConfig) {
|
|
314
|
+
// Implementation
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private generateVectors(nodes: number, dimensions: number): Float32Array[] {
|
|
318
|
+
// Implementation
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// ... other helper methods
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
**Step 2**: Register in index
|
|
328
|
+
|
|
329
|
+
Edit `packages/agentdb/simulation/scenarios/latent-space/index.ts`:
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
import { HNSWExploration } from './hnsw-exploration';
|
|
333
|
+
import { AttentionAnalysis } from './attention-analysis';
|
|
334
|
+
// ... other imports
|
|
335
|
+
import { MySimulation } from '../my-category/my-simulation';
|
|
336
|
+
|
|
337
|
+
export const SCENARIOS = {
|
|
338
|
+
'hnsw': new HNSWExploration(),
|
|
339
|
+
'attention': new AttentionAnalysis(),
|
|
340
|
+
// ... other scenarios
|
|
341
|
+
'my-simulation': new MySimulation(),
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
export function getScenario(id: string): SimulationScenario | undefined {
|
|
345
|
+
return SCENARIOS[id];
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export function listScenarios(): SimulationScenario[] {
|
|
349
|
+
return Object.values(SCENARIOS);
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
**Step 3**: Add CLI integration
|
|
356
|
+
|
|
357
|
+
Edit `packages/agentdb/src/cli/commands/simulate.ts`:
|
|
358
|
+
|
|
359
|
+
```typescript
|
|
360
|
+
program
|
|
361
|
+
.command('my-simulation')
|
|
362
|
+
.description('My custom simulation')
|
|
363
|
+
.option('--custom-option <value>', 'Custom option')
|
|
364
|
+
.action(async (options) => {
|
|
365
|
+
const scenario = getScenario('my-simulation');
|
|
366
|
+
const config = buildConfig(options);
|
|
367
|
+
const report = await scenario.run(config);
|
|
368
|
+
await saveReport(report);
|
|
369
|
+
});
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
**Step 4**: Add tests
|
|
375
|
+
|
|
376
|
+
Create `packages/agentdb/simulation/tests/my-category/my-simulation.test.ts`:
|
|
377
|
+
|
|
378
|
+
```typescript
|
|
379
|
+
import { MySimulation } from '../../scenarios/my-category/my-simulation';
|
|
380
|
+
import { SimulationConfig } from '../../scenarios/latent-space/types';
|
|
381
|
+
|
|
382
|
+
describe('MySimulation', () => {
|
|
383
|
+
let simulation: MySimulation;
|
|
384
|
+
|
|
385
|
+
beforeEach(() => {
|
|
386
|
+
simulation = new MySimulation();
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
test('should validate config', () => {
|
|
390
|
+
const config: SimulationConfig = {
|
|
391
|
+
nodes: 10000,
|
|
392
|
+
dimensions: 384,
|
|
393
|
+
iterations: 3,
|
|
394
|
+
backend: 'ruvector',
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
const result = simulation.validate(config);
|
|
398
|
+
expect(result.valid).toBe(true);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
test('should run simulation', async () => {
|
|
402
|
+
const config: SimulationConfig = {
|
|
403
|
+
nodes: 1000, // Small for tests
|
|
404
|
+
dimensions: 128,
|
|
405
|
+
iterations: 1,
|
|
406
|
+
backend: 'ruvector',
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
const report = await simulation.run(config);
|
|
410
|
+
|
|
411
|
+
expect(report.metrics.latency.mean).toBeLessThan(200); // μs
|
|
412
|
+
expect(report.metrics.recall.k10).toBeGreaterThan(0.90);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
### Adding a New Component
|
|
420
|
+
|
|
421
|
+
**Example**: Adding a new search strategy
|
|
422
|
+
|
|
423
|
+
**Step 1**: Define interface
|
|
424
|
+
|
|
425
|
+
Edit `scenarios/latent-space/types.ts`:
|
|
426
|
+
|
|
427
|
+
```typescript
|
|
428
|
+
export interface SearchStrategy {
|
|
429
|
+
name: string;
|
|
430
|
+
search(query: Float32Array, graph: HNSWGraph, k: number): Promise<Neighbor[]>;
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
**Step 2**: Implement strategy
|
|
437
|
+
|
|
438
|
+
Create `scenarios/latent-space/components/my-search.ts`:
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
import { SearchStrategy, HNSWGraph, Neighbor } from '../types';
|
|
442
|
+
|
|
443
|
+
export class MySearchStrategy implements SearchStrategy {
|
|
444
|
+
name = 'my-search';
|
|
445
|
+
|
|
446
|
+
async search(
|
|
447
|
+
query: Float32Array,
|
|
448
|
+
graph: HNSWGraph,
|
|
449
|
+
k: number
|
|
450
|
+
): Promise<Neighbor[]> {
|
|
451
|
+
// 1. Start from entry point
|
|
452
|
+
let current = graph.entryPoint;
|
|
453
|
+
const visited = new Set<number>();
|
|
454
|
+
const candidates: Neighbor[] = [];
|
|
455
|
+
|
|
456
|
+
// 2. Navigate graph using your algorithm
|
|
457
|
+
while (candidates.length < k) {
|
|
458
|
+
// Your search logic here
|
|
459
|
+
// Example: Use custom heuristic
|
|
460
|
+
const neighbors = graph.getNeighbors(current);
|
|
461
|
+
for (const neighbor of neighbors) {
|
|
462
|
+
if (!visited.has(neighbor.id)) {
|
|
463
|
+
const distance = this.computeDistance(query, graph.vectors[neighbor.id]);
|
|
464
|
+
candidates.push({ id: neighbor.id, distance });
|
|
465
|
+
visited.add(neighbor.id);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Select next node to visit
|
|
470
|
+
current = this.selectNext(candidates);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// 3. Return top-k results
|
|
474
|
+
return candidates
|
|
475
|
+
.sort((a, b) => a.distance - b.distance)
|
|
476
|
+
.slice(0, k);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
private computeDistance(a: Float32Array, b: Float32Array): number {
|
|
480
|
+
// Cosine, Euclidean, or custom distance
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
private selectNext(candidates: Neighbor[]): number {
|
|
484
|
+
// Your selection heuristic
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
**Step 3**: Register component
|
|
492
|
+
|
|
493
|
+
Edit `scenarios/latent-space/components/index.ts`:
|
|
494
|
+
|
|
495
|
+
```typescript
|
|
496
|
+
import { GreedySearch } from './greedy-search';
|
|
497
|
+
import { BeamSearch } from './beam-search';
|
|
498
|
+
import { MySearchStrategy } from './my-search';
|
|
499
|
+
|
|
500
|
+
export const SEARCH_STRATEGIES = {
|
|
501
|
+
'greedy': new GreedySearch(),
|
|
502
|
+
'beam': new BeamSearch(),
|
|
503
|
+
'my-search': new MySearchStrategy(),
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
export function getSearchStrategy(name: string): SearchStrategy {
|
|
507
|
+
return SEARCH_STRATEGIES[name];
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
**Step 4**: Add CLI option
|
|
514
|
+
|
|
515
|
+
Edit `src/cli/commands/simulate-custom.ts`:
|
|
516
|
+
|
|
517
|
+
```typescript
|
|
518
|
+
program
|
|
519
|
+
.command('custom')
|
|
520
|
+
.option('--search [strategy]', 'Search strategy: greedy|beam|astar|my-search', 'beam')
|
|
521
|
+
.action(async (options) => {
|
|
522
|
+
const strategy = getSearchStrategy(options.search);
|
|
523
|
+
// Use strategy in simulation
|
|
524
|
+
});
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
## 🧪 Testing Architecture
|
|
530
|
+
|
|
531
|
+
### Test Structure
|
|
532
|
+
|
|
533
|
+
```
|
|
534
|
+
tests/
|
|
535
|
+
├── unit/ # Unit tests for components
|
|
536
|
+
│ ├── search-strategies.test.ts
|
|
537
|
+
│ ├── clustering.test.ts
|
|
538
|
+
│ └── neural-components.test.ts
|
|
539
|
+
├── integration/ # Integration tests
|
|
540
|
+
│ ├── hnsw-integration.test.ts
|
|
541
|
+
│ └── cli-integration.test.ts
|
|
542
|
+
└── e2e/ # End-to-end tests
|
|
543
|
+
├── full-simulation.test.ts
|
|
544
|
+
└── wizard.test.ts
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
### Example Unit Test
|
|
550
|
+
|
|
551
|
+
```typescript
|
|
552
|
+
import { BeamSearch } from '../../scenarios/latent-space/components/beam-search';
|
|
553
|
+
|
|
554
|
+
describe('BeamSearch', () => {
|
|
555
|
+
test('should find k nearest neighbors', async () => {
|
|
556
|
+
const search = new BeamSearch(5); // beam width 5
|
|
557
|
+
const graph = createMockGraph();
|
|
558
|
+
const query = new Float32Array([0.1, 0.2, 0.3, ...]);
|
|
559
|
+
|
|
560
|
+
const results = await search.search(query, graph, 10);
|
|
561
|
+
|
|
562
|
+
expect(results.length).toBe(10);
|
|
563
|
+
expect(results[0].distance).toBeLessThanOrEqual(results[1].distance); // sorted
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
test('should achieve >95% recall', async () => {
|
|
567
|
+
const search = new BeamSearch(5);
|
|
568
|
+
const graph = createMockGraph();
|
|
569
|
+
|
|
570
|
+
const recall = await measureRecall(search, graph, 1000);
|
|
571
|
+
|
|
572
|
+
expect(recall).toBeGreaterThan(0.95);
|
|
573
|
+
});
|
|
574
|
+
});
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### Example Integration Test
|
|
580
|
+
|
|
581
|
+
```typescript
|
|
582
|
+
import { HNSWExploration } from '../../scenarios/latent-space/hnsw-exploration';
|
|
583
|
+
|
|
584
|
+
describe('HNSW Integration', () => {
|
|
585
|
+
test('should complete simulation in <10s', async () => {
|
|
586
|
+
const simulation = new HNSWExploration();
|
|
587
|
+
const config = {
|
|
588
|
+
nodes: 10000,
|
|
589
|
+
dimensions: 384,
|
|
590
|
+
iterations: 3,
|
|
591
|
+
backend: 'ruvector',
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
const start = Date.now();
|
|
595
|
+
const report = await simulation.run(config);
|
|
596
|
+
const duration = (Date.now() - start) / 1000;
|
|
597
|
+
|
|
598
|
+
expect(duration).toBeLessThan(10);
|
|
599
|
+
expect(report.metrics.latency.mean).toBeLessThan(100);
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
## 📊 Report Generation Architecture
|
|
607
|
+
|
|
608
|
+
### Report Generator Interface
|
|
609
|
+
|
|
610
|
+
```typescript
|
|
611
|
+
export interface ReportGenerator {
|
|
612
|
+
format: 'md' | 'json' | 'html' | 'pdf';
|
|
613
|
+
|
|
614
|
+
generate(report: SimulationReport): Promise<string>;
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
---
|
|
619
|
+
|
|
620
|
+
### Markdown Report Generator
|
|
621
|
+
|
|
622
|
+
```typescript
|
|
623
|
+
import { ReportGenerator, SimulationReport } from '../types';
|
|
624
|
+
|
|
625
|
+
export class MarkdownReportGenerator implements ReportGenerator {
|
|
626
|
+
format = 'md' as const;
|
|
627
|
+
|
|
628
|
+
async generate(report: SimulationReport): Promise<string> {
|
|
629
|
+
let markdown = '';
|
|
630
|
+
|
|
631
|
+
// Header
|
|
632
|
+
markdown += `# ${report.scenario.name} - Results\n\n`;
|
|
633
|
+
markdown += `**Date**: ${report.scenario.timestamp.toISOString()}\n\n`;
|
|
634
|
+
|
|
635
|
+
// Executive Summary
|
|
636
|
+
markdown += '## Executive Summary\n\n';
|
|
637
|
+
markdown += `- **Latency**: ${report.metrics.latency.mean.toFixed(1)}μs\n`;
|
|
638
|
+
markdown += `- **Recall@10**: ${(report.metrics.recall.k10 * 100).toFixed(1)}%\n`;
|
|
639
|
+
markdown += `- **QPS**: ${report.metrics.qps.toLocaleString()}\n`;
|
|
640
|
+
markdown += `- **Coherence**: ${(report.coherence.score * 100).toFixed(1)}%\n\n`;
|
|
641
|
+
|
|
642
|
+
// Configuration
|
|
643
|
+
markdown += '## Configuration\n\n';
|
|
644
|
+
markdown += '```json\n';
|
|
645
|
+
markdown += JSON.stringify(report.config, null, 2);
|
|
646
|
+
markdown += '\n```\n\n';
|
|
647
|
+
|
|
648
|
+
// Performance Metrics
|
|
649
|
+
markdown += '## Performance Metrics\n\n';
|
|
650
|
+
markdown += this.generateMetricsTable(report.metrics);
|
|
651
|
+
|
|
652
|
+
// Coherence Analysis
|
|
653
|
+
markdown += '## Coherence Analysis\n\n';
|
|
654
|
+
markdown += this.generateCoherenceSection(report.coherence);
|
|
655
|
+
|
|
656
|
+
// Recommendations
|
|
657
|
+
markdown += '## Recommendations\n\n';
|
|
658
|
+
for (const rec of report.recommendations) {
|
|
659
|
+
markdown += `- ${rec}\n`;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
return markdown;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
private generateMetricsTable(metrics: PerformanceMetrics): string {
|
|
666
|
+
return `| Metric | Value |
|
|
667
|
+
|--------|-------|
|
|
668
|
+
| Latency (p50) | ${metrics.latency.p50.toFixed(1)}μs |
|
|
669
|
+
| Latency (p95) | ${metrics.latency.p95.toFixed(1)}μs |
|
|
670
|
+
| Latency (p99) | ${metrics.latency.p99.toFixed(1)}μs |
|
|
671
|
+
| Recall@10 | ${(metrics.recall.k10 * 100).toFixed(1)}% |
|
|
672
|
+
| QPS | ${metrics.qps.toLocaleString()} |
|
|
673
|
+
| Memory | ${metrics.memory.toFixed(1)} MB |
|
|
674
|
+
\n\n`;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
private generateCoherenceSection(coherence: CoherenceAnalysis): string {
|
|
678
|
+
return `- **Score**: ${(coherence.score * 100).toFixed(1)}% (${this.coherenceLabel(coherence.score)})
|
|
679
|
+
- **Latency Variance**: ${coherence.latencyVariance.toFixed(2)}%
|
|
680
|
+
- **Recall Variance**: ${coherence.recallVariance.toFixed(2)}%
|
|
681
|
+
- **Statistical Significance**: p=${coherence.pValue.toFixed(4)}
|
|
682
|
+
\n\n`;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
private coherenceLabel(score: number): string {
|
|
686
|
+
if (score >= 0.98) return 'Excellent';
|
|
687
|
+
if (score >= 0.95) return 'Good';
|
|
688
|
+
if (score >= 0.90) return 'Acceptable';
|
|
689
|
+
return 'Needs Improvement';
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
---
|
|
695
|
+
|
|
696
|
+
## 🔄 Simulation Runner Architecture
|
|
697
|
+
|
|
698
|
+
### Runner Interface
|
|
699
|
+
|
|
700
|
+
```typescript
|
|
701
|
+
export class SimulationRunner {
|
|
702
|
+
private scenario: SimulationScenario;
|
|
703
|
+
private config: SimulationConfig;
|
|
704
|
+
private progress: ProgressReporter;
|
|
705
|
+
|
|
706
|
+
constructor(scenario: SimulationScenario, config: SimulationConfig) {
|
|
707
|
+
this.scenario = scenario;
|
|
708
|
+
this.config = config;
|
|
709
|
+
this.progress = new ProgressReporter();
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
async run(): Promise<SimulationReport> {
|
|
713
|
+
// 1. Validate config
|
|
714
|
+
const validation = this.scenario.validate(this.config);
|
|
715
|
+
if (!validation.valid) {
|
|
716
|
+
throw new Error(`Invalid config: ${validation.errors.join(', ')}`);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// 2. Initialize progress reporting
|
|
720
|
+
this.progress.start(this.scenario.name);
|
|
721
|
+
|
|
722
|
+
// 3. Run simulation
|
|
723
|
+
try {
|
|
724
|
+
const report = await this.scenario.run(this.config);
|
|
725
|
+
this.progress.complete();
|
|
726
|
+
return report;
|
|
727
|
+
} catch (error) {
|
|
728
|
+
this.progress.fail(error.message);
|
|
729
|
+
throw error;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## 🎨 Design Patterns Used
|
|
738
|
+
|
|
739
|
+
### 1. Strategy Pattern
|
|
740
|
+
|
|
741
|
+
**Used for**: Search strategies, clustering algorithms, self-healing policies
|
|
742
|
+
|
|
743
|
+
```typescript
|
|
744
|
+
interface SearchStrategy {
|
|
745
|
+
search(query: Float32Array, graph: HNSWGraph, k: number): Promise<Neighbor[]>;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
class BeamSearch implements SearchStrategy { ... }
|
|
749
|
+
class GreedySearch implements SearchStrategy { ... }
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
---
|
|
753
|
+
|
|
754
|
+
### 2. Factory Pattern
|
|
755
|
+
|
|
756
|
+
**Used for**: Creating scenarios, components, report generators
|
|
757
|
+
|
|
758
|
+
```typescript
|
|
759
|
+
class ScenarioFactory {
|
|
760
|
+
static create(id: string): SimulationScenario {
|
|
761
|
+
switch (id) {
|
|
762
|
+
case 'hnsw': return new HNSWExploration();
|
|
763
|
+
case 'attention': return new AttentionAnalysis();
|
|
764
|
+
default: throw new Error(`Unknown scenario: ${id}`);
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
---
|
|
771
|
+
|
|
772
|
+
### 3. Builder Pattern
|
|
773
|
+
|
|
774
|
+
**Used for**: Configuration building, custom simulation composition
|
|
775
|
+
|
|
776
|
+
```typescript
|
|
777
|
+
class ConfigBuilder {
|
|
778
|
+
private config: Partial<SimulationConfig> = {};
|
|
779
|
+
|
|
780
|
+
nodes(n: number): this {
|
|
781
|
+
this.config.nodes = n;
|
|
782
|
+
return this;
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
dimensions(d: number): this {
|
|
786
|
+
this.config.dimensions = d;
|
|
787
|
+
return this;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
backend(b: Backend): this {
|
|
791
|
+
this.config.backend = b;
|
|
792
|
+
return this;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
build(): SimulationConfig {
|
|
796
|
+
// Validate and return
|
|
797
|
+
return this.config as SimulationConfig;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
---
|
|
803
|
+
|
|
804
|
+
### 4. Observer Pattern
|
|
805
|
+
|
|
806
|
+
**Used for**: Progress reporting, event monitoring
|
|
807
|
+
|
|
808
|
+
```typescript
|
|
809
|
+
interface ProgressObserver {
|
|
810
|
+
onStart(scenario: string): void;
|
|
811
|
+
onProgress(percent: number): void;
|
|
812
|
+
onComplete(report: SimulationReport): void;
|
|
813
|
+
onError(error: Error): void;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
class ProgressReporter {
|
|
817
|
+
private observers: ProgressObserver[] = [];
|
|
818
|
+
|
|
819
|
+
subscribe(observer: ProgressObserver): void {
|
|
820
|
+
this.observers.push(observer);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
notifyProgress(percent: number): void {
|
|
824
|
+
for (const observer of this.observers) {
|
|
825
|
+
observer.onProgress(percent);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
---
|
|
832
|
+
|
|
833
|
+
## 🚀 Performance Optimization
|
|
834
|
+
|
|
835
|
+
### 1. Lazy Loading
|
|
836
|
+
|
|
837
|
+
```typescript
|
|
838
|
+
// Load scenarios only when needed
|
|
839
|
+
const SCENARIOS = {
|
|
840
|
+
get hnsw() { return require('./hnsw-exploration').HNSWExploration; },
|
|
841
|
+
get attention() { return require('./attention-analysis').AttentionAnalysis; },
|
|
842
|
+
};
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
---
|
|
846
|
+
|
|
847
|
+
### 2. Worker Threads (for parallel iterations)
|
|
848
|
+
|
|
849
|
+
```typescript
|
|
850
|
+
import { Worker } from 'worker_threads';
|
|
851
|
+
|
|
852
|
+
async function runParallelIterations(config: SimulationConfig): Promise<IterationResult[]> {
|
|
853
|
+
const workers = [];
|
|
854
|
+
for (let i = 0; i < config.iterations; i++) {
|
|
855
|
+
workers.push(new Worker('./iteration-worker.js', { workerData: config }));
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
return Promise.all(workers.map(w => new Promise((resolve) => {
|
|
859
|
+
w.on('message', resolve);
|
|
860
|
+
})));
|
|
861
|
+
}
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
---
|
|
865
|
+
|
|
866
|
+
### 3. Memory Pooling
|
|
867
|
+
|
|
868
|
+
```typescript
|
|
869
|
+
class VectorPool {
|
|
870
|
+
private pool: Float32Array[] = [];
|
|
871
|
+
|
|
872
|
+
acquire(size: number): Float32Array {
|
|
873
|
+
return this.pool.pop() || new Float32Array(size);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
release(vector: Float32Array): void {
|
|
877
|
+
this.pool.push(vector);
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
---
|
|
883
|
+
|
|
884
|
+
## 📚 Further Reading
|
|
885
|
+
|
|
886
|
+
- **[Optimization Strategy](OPTIMIZATION-STRATEGY.md)** - Performance tuning guide
|
|
887
|
+
- **[Custom Simulations Guide](../guides/CUSTOM-SIMULATIONS.md)** - Component reference
|
|
888
|
+
- **[CLI Reference](../guides/CLI-REFERENCE.md)** - Command-line usage
|
|
889
|
+
|
|
890
|
+
---
|
|
891
|
+
|
|
892
|
+
**Ready to extend?** Check the **[Component Reference →](../guides/CUSTOM-SIMULATIONS.md#complete-component-reference)**
|