AgentSkillsCN

ruvector-onnx-embeddings-wasm

利用 ONNX Runtime 生成便携式 WASM 嵌入,支持 SIMD 加速与并行计算。适用于在无服务器的浏览器中生成文本嵌入、在边缘端运行嵌入模型,或构建具备离线能力的语义搜索应用。

SKILL.md
--- frontmatter
name: ruvector-onnx-embeddings-wasm
description: "Portable WASM embedding generation using ONNX Runtime with SIMD acceleration and parallel workers. Use when generating text embeddings in browsers without a server, running embedding models at the edge, or building offline-capable semantic search applications."

ruvector-onnx-embeddings-wasm

Portable WebAssembly embedding generation powered by ONNX Runtime. Generates text embeddings directly in browsers and Node.js with SIMD acceleration and Web Worker parallelism, requiring no server-side inference.

Quick Reference

TaskCode
Importimport { EmbeddingModel, generateEmbeddings, cosineSimilarity } from 'ruvector-onnx-embeddings-wasm';
Initializeconst model = await EmbeddingModel.load(modelPath);
Generate embeddingsconst vecs = await model.embed(texts);
SimilaritycosineSimilarity(vecA, vecB)
Batch processgenerateEmbeddings(texts, config)

Installation

Hub install (recommended): npx agentic-flow@latest includes this package. Standalone: npx ruvector-onnx-embeddings-wasm@latest

Node.js Usage

typescript
import {
  EmbeddingModel,
  generateEmbeddings,
  cosineSimilarity,
} from 'ruvector-onnx-embeddings-wasm';

// Load a model
const model = await EmbeddingModel.load('all-MiniLM-L6-v2');

// Generate embeddings
const embeddings = await model.embed([
  'The quick brown fox',
  'A fast auburn canine',
  'Quantum computing advances',
]);

// Compare similarity
const similarity = cosineSimilarity(embeddings[0], embeddings[1]);
console.log(`Similarity: ${similarity}`); // ~0.85 (semantically similar)

const different = cosineSimilarity(embeddings[0], embeddings[2]);
console.log(`Similarity: ${different}`); // ~0.15 (semantically different)

// Batch processing with workers
const largeResults = await generateEmbeddings(thousandTexts, {
  model: 'all-MiniLM-L6-v2',
  batchSize: 64,
  numWorkers: 4,
});

Browser Usage

html
<script type="module">
  import { EmbeddingModel, cosineSimilarity } from 'ruvector-onnx-embeddings-wasm';

  const model = await EmbeddingModel.load('all-MiniLM-L6-v2');
  const [vecA, vecB] = await model.embed(['Hello world', 'Hi earth']);
  const score = cosineSimilarity(vecA, vecB);
  document.getElementById('score').textContent = score.toFixed(4);
</script>

Key API

EmbeddingModel

Load and run ONNX embedding models in WASM.

typescript
const model = await EmbeddingModel.load(modelId: string, options?: LoadOptions): Promise<EmbeddingModel>

LoadOptions:

ParameterTypeDefaultDescription
cacheDirstring'./.cache'Model cache directory
quantizedbooleanfalseUse int8 quantized model
simdbooleantrueEnable SIMD acceleration
threadsnumbernavigator.hardwareConcurrencyWASM threads

Supported models:

ModelDimensionsDescription
all-MiniLM-L6-v2384Fast general-purpose
all-mpnet-base-v2768Higher quality
bge-small-en-v1.5384BGE family
gte-small384GTE family

model.embed(texts)

Generate embeddings for an array of texts.

typescript
await model.embed(texts: string[]): Promise<Float32Array[]>

model.embedOne(text)

Generate embedding for a single text.

typescript
await model.embedOne(text: string): Promise<Float32Array>

model.dimensions

typescript
model.dimensions: number  // e.g., 384

model.dispose()

Free WASM memory and ONNX session.

typescript
model.dispose(): void

generateEmbeddings(texts, config)

High-level batch embedding with parallel Web Workers.

typescript
await generateEmbeddings(texts: string[], config: BatchConfig): Promise<Float32Array[]>

BatchConfig:

ParameterTypeDefaultDescription
modelstring'all-MiniLM-L6-v2'Model identifier
batchSizenumber32Texts per batch
numWorkersnumber4Parallel workers
normalizebooleantrueL2 normalize output
maxLengthnumber512Max token length

cosineSimilarity(a, b)

Compute cosine similarity between two vectors.

typescript
cosineSimilarity(a: Float32Array, b: Float32Array): number  // -1 to 1

dotProduct(a, b)

typescript
dotProduct(a: Float32Array, b: Float32Array): number

euclideanDistance(a, b)

typescript
euclideanDistance(a: Float32Array, b: Float32Array): number

References