> {
- let model_bytes = include_bytes!("../model.onnx");
- let tokenizer_json = include_str!("../tokenizer.json");
-
- let embedder = WasmEmbedder::new(model_bytes, tokenizer_json)?;
-
- let embedding = embedder.embed_one("Hello from Rust WASM!")?;
- println!("Dimension: {}", embedding.len());
-
- Ok(())
+// 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);
}
```
-## Configuration
+## Related Packages
-```javascript
-import { WasmEmbedder, WasmEmbedderConfig } from 'ruvector-onnx-embeddings-wasm';
-
-// Create custom config
-const config = new WasmEmbedderConfig()
- .setMaxLength(512) // Max tokens
- .setNormalize(true) // L2 normalize
- .setPooling(0); // 0=Mean, 1=Cls, 2=Max
-
-const embedder = WasmEmbedder.withConfig(modelBytes, tokenizerJson, config);
-```
-
-### Pooling Strategies
-
-| Value | Strategy | Description |
-|-------|----------|-------------|
-| 0 | Mean | Average all tokens (default) |
-| 1 | Cls | Use [CLS] token only |
-| 2 | Max | Max pooling across tokens |
-| 3 | MeanSqrtLen | Mean normalized by sqrt(length) |
-| 4 | LastToken | Use last token (decoder models) |
-
-## Supported Models
-
-Any ONNX model with standard transformer inputs works:
-- `input_ids`: Token IDs `[batch, seq_len]`
-- `attention_mask`: Attention mask `[batch, seq_len]`
-- `token_type_ids`: Token types `[batch, seq_len]`
-
-### Recommended Models
-
-| Model | Dimension | Size | Notes |
-|-------|-----------|------|-------|
-| all-MiniLM-L6-v2 | 384 | 23MB | Fast, good quality |
-| all-MiniLM-L12-v2 | 384 | 33MB | Better quality |
-| bge-small-en-v1.5 | 384 | 33MB | State-of-the-art small |
-
-### Converting Models
-
-```bash
-# Install optimum
-pip install optimum[onnxruntime]
-
-# Export to ONNX
-optimum-cli export onnx \
- --model sentence-transformers/all-MiniLM-L6-v2 \
- --task feature-extraction \
- ./model_output
-```
-
-## Performance
-
-| Environment | Throughput | Latency (single) |
-|-------------|------------|------------------|
-| Chrome (M1 Mac) | ~50 texts/sec | ~20ms |
-| Firefox (M1 Mac) | ~45 texts/sec | ~22ms |
-| Node.js | ~80 texts/sec | ~12ms |
-| Cloudflare Workers | ~30 texts/sec | ~33ms |
-| Deno | ~75 texts/sec | ~13ms |
-
-*Tested with all-MiniLM-L6-v2, 128 token inputs*
-
-## Comparison with Native Crate
-
-| Aspect | Native (`ort`) | WASM (`tract`) |
-|--------|----------------|----------------|
-| Speed | ⚡⚡⚡ | ⚡⚡ |
-| Browser | ❌ | ✅ |
-| Edge Workers | ❌ | ✅ |
-| GPU | CUDA, TensorRT | ❌ |
-| Bundle Size | ~50MB | ~5-10MB |
-| Portability | Platform-specific | Universal |
-
-**Use native** for: servers, high throughput, GPU acceleration
-**Use WASM** for: browsers, edge computing, portability
-
-## API Reference
-
-### WasmEmbedder
-
-```typescript
-class WasmEmbedder {
- constructor(modelBytes: Uint8Array, tokenizerJson: string);
- static withConfig(modelBytes: Uint8Array, tokenizerJson: string, config: WasmEmbedderConfig): WasmEmbedder;
-
- embedOne(text: string): Float32Array;
- embedBatch(texts: string[]): Float32Array;
- similarity(text1: string, text2: string): number;
-
- dimension(): number;
- maxLength(): number;
-}
-```
-
-### Utility Functions
-
-```typescript
-function cosineSimilarity(a: Float32Array, b: Float32Array): number;
-function normalizeL2(embedding: Float32Array): Float32Array;
-function version(): string;
-function simdAvailable(): boolean;
-```
+| 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 |
## License
@@ -255,4 +289,7 @@ MIT License - See [LICENSE](../../LICENSE) for details.
---
-**Part of the RuVector ecosystem** - High-performance vector operations in Rust
+
+ Part of the RuVector ecosystem
+ High-performance vector operations in Rust
+