git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
206 lines
4.8 KiB
Markdown
206 lines
4.8 KiB
Markdown
# exo-wasm
|
|
|
|
WASM bindings for EXO-AI 2025 Cognitive Substrate, enabling browser-based deployment of advanced AI substrate operations.
|
|
|
|
[](https://crates.io/crates/exo-wasm)
|
|
[](https://docs.rs/exo-wasm)
|
|
[](LICENSE)
|
|
|
|
## Features
|
|
|
|
- **Pattern Storage**: Store and retrieve cognitive patterns with embeddings
|
|
- **Similarity Search**: High-performance vector search with multiple distance metrics
|
|
- **Temporal Memory**: Track patterns with timestamps and causal relationships
|
|
- **Causal Queries**: Query patterns within causal cones
|
|
- **Browser-First**: Optimized for browser deployment with zero-copy transfers
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
# Build the WASM package
|
|
wasm-pack build --target web
|
|
|
|
# Or for Node.js
|
|
wasm-pack build --target nodejs
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Browser (ES Modules)
|
|
|
|
```javascript
|
|
import init, { ExoSubstrate, Pattern } from './pkg/exo_wasm.js';
|
|
|
|
async function main() {
|
|
// Initialize WASM module
|
|
await init();
|
|
|
|
// Create substrate
|
|
const substrate = new ExoSubstrate({
|
|
dimensions: 384,
|
|
distance_metric: "cosine",
|
|
use_hnsw: true,
|
|
enable_temporal: true,
|
|
enable_causal: true
|
|
});
|
|
|
|
// Create a pattern
|
|
const embedding = new Float32Array(384);
|
|
for (let i = 0; i < 384; i++) {
|
|
embedding[i] = Math.random();
|
|
}
|
|
|
|
const pattern = new Pattern(
|
|
embedding,
|
|
{ type: "concept", name: "example" },
|
|
[] // antecedents
|
|
);
|
|
|
|
// Store pattern
|
|
const id = substrate.store(pattern);
|
|
console.log("Stored pattern:", id);
|
|
|
|
// Query for similar patterns
|
|
const results = await substrate.query(embedding, 5);
|
|
console.log("Search results:", results);
|
|
|
|
// Get stats
|
|
const stats = substrate.stats();
|
|
console.log("Substrate stats:", stats);
|
|
}
|
|
|
|
main();
|
|
```
|
|
|
|
### Node.js
|
|
|
|
```javascript
|
|
const { ExoSubstrate, Pattern } = require('./pkg/exo_wasm.js');
|
|
|
|
const substrate = new ExoSubstrate({
|
|
dimensions: 128,
|
|
distance_metric: "euclidean",
|
|
use_hnsw: false
|
|
});
|
|
|
|
// Use as shown above
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### ExoSubstrate
|
|
|
|
Main substrate interface.
|
|
|
|
#### Constructor
|
|
|
|
```javascript
|
|
new ExoSubstrate(config)
|
|
```
|
|
|
|
**Config options:**
|
|
- `dimensions` (number): Vector dimensions (required)
|
|
- `distance_metric` (string): "euclidean", "cosine", "dotproduct", or "manhattan" (default: "cosine")
|
|
- `use_hnsw` (boolean): Enable HNSW index (default: true)
|
|
- `enable_temporal` (boolean): Enable temporal tracking (default: true)
|
|
- `enable_causal` (boolean): Enable causal tracking (default: true)
|
|
|
|
#### Methods
|
|
|
|
- `store(pattern)`: Store a pattern, returns pattern ID
|
|
- `query(embedding, k)`: Search for k similar patterns (returns Promise)
|
|
- `get(id)`: Retrieve pattern by ID
|
|
- `delete(id)`: Delete pattern by ID
|
|
- `len()`: Get number of patterns
|
|
- `isEmpty()`: Check if substrate is empty
|
|
- `stats()`: Get substrate statistics
|
|
|
|
### Pattern
|
|
|
|
Represents a cognitive pattern.
|
|
|
|
#### Constructor
|
|
|
|
```javascript
|
|
new Pattern(embedding, metadata, antecedents)
|
|
```
|
|
|
|
**Parameters:**
|
|
- `embedding` (Float32Array): Vector embedding
|
|
- `metadata` (object, optional): Arbitrary metadata
|
|
- `antecedents` (string[], optional): IDs of causal antecedents
|
|
|
|
#### Properties
|
|
|
|
- `id`: Pattern ID (set after storage)
|
|
- `embedding`: Vector embedding (Float32Array)
|
|
- `metadata`: Pattern metadata
|
|
- `timestamp`: Creation timestamp (milliseconds since epoch)
|
|
- `antecedents`: Causal antecedent IDs
|
|
|
|
## Building
|
|
|
|
### Prerequisites
|
|
|
|
- Rust 1.75+
|
|
- wasm-pack
|
|
- Node.js (for testing)
|
|
|
|
### Build Commands
|
|
|
|
```bash
|
|
# Development build
|
|
wasm-pack build --dev
|
|
|
|
# Production build (optimized)
|
|
wasm-pack build --release
|
|
|
|
# Build for specific target
|
|
wasm-pack build --target web # Browser ES modules
|
|
wasm-pack build --target nodejs # Node.js
|
|
wasm-pack build --target bundler # Webpack/Rollup
|
|
```
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
# Run tests in browser
|
|
wasm-pack test --headless --firefox
|
|
|
|
# Run tests in Node.js
|
|
wasm-pack test --node
|
|
```
|
|
|
|
## Performance
|
|
|
|
The WASM bindings are optimized for browser deployment:
|
|
|
|
- **Size**: ~2MB gzipped (with SIMD)
|
|
- **Initialization**: <50ms on modern browsers
|
|
- **Search**: 10k+ queries/second (HNSW enabled)
|
|
- **Zero-copy**: Uses transferable objects where possible
|
|
|
|
## Architecture
|
|
|
|
This crate provides WASM bindings for the EXO-AI 2025 cognitive substrate. It currently uses `ruvector-core` as the underlying implementation, with plans to integrate with the full EXO substrate layer.
|
|
|
|
```
|
|
exo-wasm/
|
|
├── src/
|
|
│ ├── lib.rs # Main WASM bindings
|
|
│ ├── types.rs # Type conversions
|
|
│ └── utils.rs # Utility functions
|
|
├── Cargo.toml
|
|
└── README.md
|
|
```
|
|
|
|
## Links
|
|
|
|
- [GitHub](https://github.com/ruvnet/ruvector)
|
|
- [Website](https://ruv.io)
|
|
- [EXO-AI Documentation](https://github.com/ruvnet/ruvector/tree/main/examples/exo-ai-2025)
|
|
|
|
## License
|
|
|
|
MIT OR Apache-2.0
|