git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
467 lines
12 KiB
Markdown
467 lines
12 KiB
Markdown
# @ruvector/wasm-unified
|
|
|
|
Unified TypeScript API surface for RuVector WASM - exposing attention, learning, economy, and exotic computation features through a clean, type-safe interface.
|
|
|
|
## Features
|
|
|
|
- **14+ Attention Mechanisms**: Neural (scaled-dot, multi-head, hyperbolic, linear, flash, local-global, MoE, Mamba) and DAG (topological, mincut-gated, hierarchical, spectral, flow, causal, sparse)
|
|
- **Adaptive Learning**: Micro-LoRA adaptation, SONA pre-query, BTSP one-shot learning, RL algorithms, meta-learning
|
|
- **Nervous System Simulation**: Spiking neural networks, synaptic plasticity, multiple neuron models
|
|
- **Compute Credit Economy**: Balance management, staking, rewards, contribution multipliers
|
|
- **Exotic Computation**: Quantum-inspired, hyperbolic geometry, topological data analysis, fractal operations
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install @ruvector/wasm-unified
|
|
# or
|
|
pnpm add @ruvector/wasm-unified
|
|
# or
|
|
yarn add @ruvector/wasm-unified
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
```typescript
|
|
import { createUnifiedEngine } from '@ruvector/wasm-unified';
|
|
|
|
// Create and initialize the unified engine
|
|
const engine = await createUnifiedEngine();
|
|
await engine.init();
|
|
|
|
// Use attention mechanisms
|
|
const Q = new Float32Array([1, 2, 3, 4]);
|
|
const K = new Float32Array([1, 2, 3, 4]);
|
|
const V = new Float32Array([1, 2, 3, 4]);
|
|
const output = engine.attention.scaledDot(Q, K, V);
|
|
|
|
// Use learning capabilities
|
|
engine.learning.btspOneShotLearn(pattern, 1.0);
|
|
|
|
// Simulate nervous system
|
|
const neuronId = engine.nervous.createNeuron({ neuronType: 'excitatory' });
|
|
engine.nervous.step();
|
|
|
|
// Manage economy
|
|
const balance = engine.economy.creditBalance();
|
|
engine.economy.stakeDeposit(100);
|
|
|
|
// Exotic computations
|
|
const qstate = engine.exotic.quantumInit(4);
|
|
const measured = engine.exotic.quantumMeasure(qstate);
|
|
|
|
// Cleanup when done
|
|
engine.dispose();
|
|
```
|
|
|
|
## Module Usage
|
|
|
|
### Attention Engine
|
|
|
|
```typescript
|
|
import { createAttentionEngine, listAttentionMechanisms } from '@ruvector/wasm-unified';
|
|
|
|
const attention = createAttentionEngine();
|
|
|
|
// List available mechanisms
|
|
console.log(listAttentionMechanisms());
|
|
// ['scaled-dot', 'multi-head', 'hyperbolic', 'linear', 'flash', ...]
|
|
|
|
// Scaled dot-product attention
|
|
const output = attention.scaledDot(Q, K, V);
|
|
|
|
// Multi-head attention
|
|
const multiHeadOutput = attention.multiHead(query, keys, values, {
|
|
numHeads: 8,
|
|
headDim: 64,
|
|
dropout: 0.1,
|
|
});
|
|
|
|
// Hyperbolic attention (for hierarchical data)
|
|
const hyperbolicOutput = attention.hyperbolic(query, keys, values, -1.0);
|
|
|
|
// Flash attention (memory-efficient)
|
|
const flashOutput = attention.flash(query, keys, values, 256);
|
|
|
|
// Mixture of Experts attention
|
|
const moeResult = attention.moe(query, keys, values, 8, 2);
|
|
console.log(moeResult.loadBalanceLoss);
|
|
|
|
// Mamba (state-space model)
|
|
const mambaResult = attention.mamba(input, state);
|
|
console.log(mambaResult.newState);
|
|
|
|
// DAG-based attention
|
|
const dag = {
|
|
nodes: [
|
|
{ id: 'n1', embedding: new Float32Array([1, 2]), nodeType: 'query' },
|
|
{ id: 'n2', embedding: new Float32Array([3, 4]), nodeType: 'key' },
|
|
],
|
|
edges: [{ source: 'n1', target: 'n2', weight: 1.0, edgeType: 'attention' }],
|
|
rootIds: ['n1'],
|
|
leafIds: ['n2'],
|
|
};
|
|
|
|
const dagScores = attention.dagTopological(dag);
|
|
const gatedScores = attention.dagMincutGated(dag, {
|
|
gateValues: new Float32Array([0.5, 0.8]),
|
|
threshold: 0.3,
|
|
mode: 'soft',
|
|
});
|
|
```
|
|
|
|
### Learning Engine
|
|
|
|
```typescript
|
|
import {
|
|
createLearningEngine,
|
|
createMicroLoraConfig,
|
|
createBtspConfig,
|
|
cosineAnnealingLr,
|
|
} from '@ruvector/wasm-unified';
|
|
|
|
const learning = createLearningEngine({
|
|
defaultLearningRate: 0.001,
|
|
batchSize: 32,
|
|
});
|
|
|
|
// Micro-LoRA adaptation
|
|
const loraConfig = createMicroLoraConfig(8, 16, ['attention', 'ffn']);
|
|
const adapted = learning.microLoraAdapt(embedding, 'attention', loraConfig);
|
|
|
|
// SONA pre-query enhancement
|
|
const enhanced = learning.sonaPreQuery(dag, 128);
|
|
console.log(enhanced.confidence);
|
|
|
|
// BTSP one-shot learning
|
|
const btspConfig = createBtspConfig(0.1, 0.95, 100);
|
|
learning.btspOneShotLearn(pattern, rewardSignal, btspConfig);
|
|
|
|
// Reinforcement learning
|
|
const trajectory = {
|
|
states: [state1, state2, state3],
|
|
actions: [0, 1, 0],
|
|
rewards: [0.1, 0.5, 1.0],
|
|
dones: [false, false, true],
|
|
};
|
|
const policyUpdate = learning.updateFromTrajectory(trajectory, 'ppo');
|
|
console.log(policyUpdate.loss, policyUpdate.entropy);
|
|
|
|
// Compute advantages with GAE
|
|
const advantages = learning.computeAdvantages(rewards, values, 0.99, 0.95);
|
|
|
|
// Experience replay
|
|
const batch = learning.experienceReplay(10000, 32);
|
|
|
|
// Meta-learning with MAML
|
|
const adaptedParams = learning.mamlInnerLoop(supportSet, 5, 0.01);
|
|
|
|
// Learning rate scheduling
|
|
const lr = cosineAnnealingLr(step, totalSteps, 0.001, 0.00001);
|
|
|
|
// Get statistics
|
|
const stats = learning.getStats();
|
|
console.log(stats.patternsLearned, stats.totalSteps);
|
|
```
|
|
|
|
### Nervous System Engine
|
|
|
|
```typescript
|
|
import {
|
|
createNervousEngine,
|
|
createStdpConfig,
|
|
izhikevichParams,
|
|
} from '@ruvector/wasm-unified';
|
|
|
|
const nervous = createNervousEngine({
|
|
maxNeurons: 10000,
|
|
simulationDt: 0.1,
|
|
enablePlasticity: true,
|
|
});
|
|
|
|
// Create neurons
|
|
const excitatory = nervous.createNeuron({
|
|
neuronType: 'excitatory',
|
|
model: 'izhikevich',
|
|
threshold: -55,
|
|
});
|
|
|
|
const inhibitory = nervous.createNeuron({
|
|
neuronType: 'inhibitory',
|
|
model: 'lif',
|
|
});
|
|
|
|
// Create synapses
|
|
nervous.createSynapse(excitatory, inhibitory, {
|
|
weight: 0.5,
|
|
delay: 1.0,
|
|
plasticity: { type: 'stdp', params: {} },
|
|
});
|
|
|
|
// Create network topologies
|
|
nervous.createReservoir(500, 0.9, 10); // Echo State Network
|
|
nervous.createSmallWorld(100, 4, 0.1); // Small-world network
|
|
nervous.createFeedforward([10, 50, 20, 5], 0.8); // Feedforward
|
|
|
|
// Simulate
|
|
nervous.injectCurrent(new Map([[excitatory, 10.0]]));
|
|
const result = nervous.step(0.1);
|
|
console.log('Spikes:', result.spikes);
|
|
|
|
// Apply plasticity
|
|
const stdpConfig = createStdpConfig();
|
|
nervous.applyStdp(stdpConfig);
|
|
nervous.applyHomeostasis(10); // Target 10 Hz firing rate
|
|
|
|
// Record activity
|
|
nervous.startRecording([excitatory, inhibitory]);
|
|
for (let i = 0; i < 1000; i++) {
|
|
nervous.step();
|
|
}
|
|
const recording = nervous.stopRecording();
|
|
const raster = nervous.getSpikeRaster(0, 100);
|
|
|
|
// Get topology statistics
|
|
const topoStats = nervous.getTopologyStats();
|
|
console.log('Neurons:', topoStats.neuronCount);
|
|
console.log('Clustering:', topoStats.clusteringCoefficient);
|
|
```
|
|
|
|
### Economy Engine
|
|
|
|
```typescript
|
|
import {
|
|
createEconomyEngine,
|
|
calculateStakingApy,
|
|
formatCredits,
|
|
} from '@ruvector/wasm-unified';
|
|
|
|
const economy = createEconomyEngine({
|
|
initialBalance: 1000,
|
|
stakingEnabled: true,
|
|
rewardRate: 0.05,
|
|
});
|
|
|
|
// Check balance
|
|
console.log('Balance:', formatCredits(economy.creditBalance()));
|
|
console.log('Multiplier:', economy.contributionMultiplier());
|
|
|
|
// Staking
|
|
if (economy.canAfford(500)) {
|
|
const position = economy.stakeDeposit(500, 86400 * 30); // 30-day lock
|
|
console.log('Expected reward:', position.expectedReward);
|
|
}
|
|
|
|
// Calculate APY
|
|
const apy = calculateStakingApy(0.05, 365);
|
|
console.log('APY:', (apy * 100).toFixed(2) + '%');
|
|
|
|
// Transactions
|
|
economy.deposit(100, 'external-source');
|
|
const withdrawTx = economy.withdraw(50, 'external-dest');
|
|
console.log('Transaction ID:', withdrawTx.id);
|
|
|
|
// Record contributions
|
|
economy.recordContribution('compute', 1000);
|
|
economy.recordContribution('validation', 500);
|
|
|
|
// Claim rewards
|
|
const pending = economy.getPendingRewards();
|
|
const claimed = economy.claimRewards();
|
|
console.log('Claimed:', formatCredits(claimed));
|
|
|
|
// Operation pricing
|
|
const cost = economy.getCost('attention_flash');
|
|
console.log('Flash attention cost:', cost);
|
|
|
|
// Analytics
|
|
const analytics = economy.getAnalytics('week');
|
|
console.log('Net flow:', formatCredits(analytics.netFlow));
|
|
```
|
|
|
|
### Exotic Engine
|
|
|
|
```typescript
|
|
import {
|
|
createExoticEngine,
|
|
createCircuitBuilder,
|
|
projectToPoincare,
|
|
poincareToLorentz,
|
|
} from '@ruvector/wasm-unified';
|
|
|
|
const exotic = createExoticEngine({
|
|
quantumSimulationDepth: 10,
|
|
hyperbolicPrecision: 1e-10,
|
|
topologicalMaxDimension: 3,
|
|
});
|
|
|
|
// Quantum-inspired computation
|
|
const qstate = exotic.quantumInit(4);
|
|
let state = exotic.quantumHadamard(qstate, 0); // Superposition
|
|
state = exotic.quantumCnot(state, 0, 1); // Entanglement
|
|
state = exotic.quantumPhase(state, 1, Math.PI / 4);
|
|
const measurement = exotic.quantumMeasure(state);
|
|
console.log('Measured:', measurement.bitstring);
|
|
|
|
// Build quantum circuits
|
|
const circuit = createCircuitBuilder(3);
|
|
circuit.h(0);
|
|
circuit.cnot(0, 1);
|
|
circuit.ry(2, Math.PI / 3);
|
|
const qc = circuit.build();
|
|
|
|
// VQE for ground state
|
|
const vqeResult = exotic.quantumVqe(hamiltonian, qc, 'cobyla');
|
|
console.log('Ground state energy:', vqeResult.energy);
|
|
|
|
// Hyperbolic geometry
|
|
const p1 = exotic.hyperbolicPoint(new Float32Array([0.1, 0.2]), 'poincare', -1);
|
|
const p2 = exotic.hyperbolicPoint(new Float32Array([0.3, 0.1]), 'poincare', -1);
|
|
const distance = exotic.hyperbolicDistance(p1, p2);
|
|
console.log('Hyperbolic distance:', distance);
|
|
|
|
// Mobius operations
|
|
const sum = exotic.mobiusAdd(p1, p2);
|
|
const centroid = exotic.hyperbolicCentroid([p1, p2]);
|
|
|
|
// Convert between models
|
|
const euclidean = new Float32Array([0.5, 0.3]);
|
|
const poincare = projectToPoincare(euclidean);
|
|
const lorentz = poincareToLorentz(poincare);
|
|
|
|
// Topological data analysis
|
|
const pointCloud = [
|
|
new Float32Array([0, 0]),
|
|
new Float32Array([1, 0]),
|
|
new Float32Array([0.5, 0.866]),
|
|
];
|
|
const features = exotic.persistentHomology(pointCloud, 2);
|
|
const betti = exotic.bettiNumbers(features, 0.1);
|
|
console.log('Betti numbers:', betti);
|
|
|
|
// Persistence diagram
|
|
const diagram = exotic.persistenceDiagram(features);
|
|
const bottleneck = exotic.bottleneckDistance(diagram1, diagram2);
|
|
|
|
// Mapper algorithm
|
|
const graph = exotic.mapper(data, undefined, 10, 0.5);
|
|
console.log('Mapper nodes:', graph.nodes.length);
|
|
|
|
// Fractal analysis
|
|
const fractalDim = exotic.fractalDimension(data);
|
|
const lyapunov = exotic.lyapunovExponents(timeSeries, 3, 1);
|
|
|
|
// Non-Euclidean neural layers
|
|
const hyperbolicOutput = exotic.hyperbolicLayer(inputs, weights, bias);
|
|
const sphericalOutput = exotic.sphericalLayer(inputs, weights);
|
|
```
|
|
|
|
## Type Safety
|
|
|
|
All APIs are fully typed with TypeScript:
|
|
|
|
```typescript
|
|
import type {
|
|
AttentionEngine,
|
|
LearningEngine,
|
|
NervousEngine,
|
|
EconomyEngine,
|
|
ExoticEngine,
|
|
MultiHeadConfig,
|
|
MoEResult,
|
|
QueryDag,
|
|
EnhancedEmbedding,
|
|
Neuron,
|
|
Synapse,
|
|
Transaction,
|
|
QuantumState,
|
|
HyperbolicPoint,
|
|
TopologicalFeature,
|
|
} from '@ruvector/wasm-unified';
|
|
```
|
|
|
|
## Benchmarking
|
|
|
|
```typescript
|
|
import { benchmarkAttention, listAttentionMechanisms } from '@ruvector/wasm-unified';
|
|
|
|
// Benchmark specific mechanism
|
|
const results = await benchmarkAttention('flash', 1024, 100);
|
|
console.log(`Flash attention: ${results.avgTimeMs}ms avg, ${results.throughputOpsPerSec} ops/sec`);
|
|
|
|
// Benchmark all mechanisms
|
|
for (const mechanism of listAttentionMechanisms()) {
|
|
const result = await benchmarkAttention(mechanism, 512, 50);
|
|
console.log(`${mechanism}: ${result.avgTimeMs.toFixed(3)}ms`);
|
|
}
|
|
```
|
|
|
|
## Configuration
|
|
|
|
```typescript
|
|
import { createUnifiedEngine } from '@ruvector/wasm-unified';
|
|
|
|
const engine = await createUnifiedEngine({
|
|
// Global settings
|
|
wasmPath: '/wasm/ruvector.wasm',
|
|
enableSimd: true,
|
|
enableThreads: true,
|
|
memoryLimit: 1024 * 1024 * 512, // 512MB
|
|
logLevel: 'info',
|
|
|
|
// Module-specific settings
|
|
attention: {
|
|
defaultMechanism: 'flash',
|
|
cacheSize: 1024,
|
|
precisionMode: 'mixed',
|
|
},
|
|
learning: {
|
|
defaultLearningRate: 0.001,
|
|
batchSize: 64,
|
|
enableGradientCheckpointing: true,
|
|
},
|
|
nervous: {
|
|
maxNeurons: 100000,
|
|
simulationDt: 0.05,
|
|
enablePlasticity: true,
|
|
},
|
|
economy: {
|
|
initialBalance: 10000,
|
|
stakingEnabled: true,
|
|
rewardRate: 0.08,
|
|
},
|
|
exotic: {
|
|
quantumSimulationDepth: 20,
|
|
hyperbolicPrecision: 1e-12,
|
|
topologicalMaxDimension: 4,
|
|
},
|
|
});
|
|
```
|
|
|
|
## Statistics and Monitoring
|
|
|
|
```typescript
|
|
const engine = await createUnifiedEngine();
|
|
await engine.init();
|
|
|
|
// ... perform operations ...
|
|
|
|
// Get comprehensive statistics
|
|
const stats = engine.getStats();
|
|
|
|
console.log('Attention ops:', stats.attention.operationCount);
|
|
console.log('Learning steps:', stats.learning.stepsCompleted);
|
|
console.log('Neurons:', stats.nervous.neuronCount);
|
|
console.log('Balance:', stats.economy.balance);
|
|
console.log('Quantum ops:', stats.exotic.quantumOps);
|
|
console.log('Uptime:', stats.system.uptime, 'ms');
|
|
```
|
|
|
|
## API Reference
|
|
|
|
See the [TypeScript definitions](./src/index.ts) for complete API documentation.
|
|
|
|
## License
|
|
|
|
MIT
|