;
```
## Pooling Strategies
| Value | Strategy | Description |
|-------|----------|-------------|
| 0 | **Mean** | Average all tokens (default, recommended) |
| 1 | **Cls** | Use [CLS] token only (BERT-style) |
| 2 | **Max** | Max pooling across tokens |
| 3 | **MeanSqrtLen** | Mean normalized by sqrt(length) |
| 4 | **LastToken** | Last token (decoder models) |
## Comparison: Native vs WASM
| Aspect | Native (`ort`) | WASM (`tract`) |
|--------|----------------|----------------|
| Speed | ⚡⚡⚡ Native | ⚡⚡ ~2-3x slower |
| Browser | ❌ | ✅ |
| Edge Workers | ❌ | ✅ |
| Parallel | Multi-process | Worker threads |
| GPU | CUDA, TensorRT | ❌ |
| Bundle Size | ~50MB | ~7.4MB |
| SIMD | AVX2/AVX-512 | SIMD128 |
| Portability | Platform-specific | Universal |
**Use native** for: servers, high throughput, GPU acceleration
**Use WASM** for: browsers, edge, portability, simpler deployment
## Building from Source
```bash
# Install wasm-pack
cargo install wasm-pack
# Build for Node.js with SIMD
RUSTFLAGS='-C target-feature=+simd128' wasm-pack build --target nodejs --release
# Build for web with SIMD
RUSTFLAGS='-C target-feature=+simd128' wasm-pack build --target web --release
# Build for bundlers (webpack, vite) with SIMD
RUSTFLAGS='-C target-feature=+simd128' wasm-pack build --target bundler --release
# Build without SIMD (for older browsers)
wasm-pack build --target web --release
```
## Use Cases
### Semantic Search
```javascript
import { createEmbedder, cosineSimilarity } from 'ruvector-onnx-embeddings-wasm/loader';
const embedder = await createEmbedder();
// Index documents
const docs = ["Rust is fast", "Python is easy", "JavaScript runs everywhere"];
const embeddings = docs.map(d => embedder.embedOne(d));
// Search
const query = embedder.embedOne("Which language is performant?");
const scores = embeddings.map((e, i) => ({
doc: docs[i],
score: cosineSimilarity(query, e)
}));
scores.sort((a, b) => b.score - a.score);
console.log(scores[0]); // { doc: "Rust is fast", score: 0.82 }
```
### Batch Processing with Parallel Workers
```javascript
import { ParallelEmbedder } from 'ruvector-onnx-embeddings-wasm/parallel';
const embedder = new ParallelEmbedder({ numWorkers: 4 });
await embedder.init();
// Process large datasets efficiently
const documents = loadDocuments(); // Array of 1000+ texts
const batchSize = 100;
for (let i = 0; i < documents.length; i += batchSize) {
const batch = documents.slice(i, i + batchSize);
const embeddings = await embedder.embedBatch(batch);
await saveEmbeddings(embeddings);
}
await embedder.shutdown();
```
### RAG (Retrieval-Augmented Generation)
```javascript
// Build knowledge base
const knowledge = [
"RuVector is a vector database",
"Embeddings capture semantic meaning",
// ... more docs
];
const knowledgeEmbeddings = knowledge.map(k => embedder.embedOne(k));
// Retrieve relevant context for LLM
function getContext(query, topK = 3) {
const queryEmb = embedder.embedOne(query);
const scores = knowledgeEmbeddings.map((e, i) => ({
text: knowledge[i],
score: cosineSimilarity(queryEmb, e)
}));
return scores.sort((a, b) => b.score - a.score).slice(0, topK);
}
```
### Text Clustering
```javascript
const texts = [
"Machine learning is amazing",
"Deep learning uses neural networks",
"I love pizza",
"Italian food is delicious"
];
const embeddings = texts.map(t => embedder.embedOne(t));
// Use k-means or hierarchical clustering on embeddings
```
## Browser Compatibility
| Browser | SIMD | Status |
|---------|------|--------|
| Chrome 91+ | ✅ | Full support |
| Firefox 89+ | ✅ | Full support |
| Safari 16.4+ | ✅ | Full support |
| Edge 91+ | ✅ | Full support |
| Node.js 16+ | ✅ | Full support |
| Deno | ✅ | Full support |
| Cloudflare Workers | ✅ | Full support |
## Related Packages
| Package | Runtime | Use Case |
|---------|---------|----------|
| [ruvector-onnx-embeddings](https://crates.io/crates/ruvector-onnx-embeddings) | Native | High-performance servers |
| **ruvector-onnx-embeddings-wasm** | WASM | Browsers, edge, portable |
## Changelog
### v0.1.2
- Added `ParallelEmbedder` for multi-threaded batch processing (3.8x speedup)
- Worker threads support for Node.js environments
### v0.1.1
- Enabled WASM SIMD128 for vectorized operations
- Added `simd_available()` function
- Reduced binary size by 180KB
### v0.1.0
- Initial release
- HuggingFace model loader with caching
- Browser and Node.js support
- 6 pre-configured models
## License
MIT License - See [LICENSE](../../LICENSE) for details.
---
Part of the RuVector ecosystem
High-performance vector operations in Rust