ruvector-tiny-dancer-wasm

Crates.ioruvector-tiny-dancer-wasm
lib.rsruvector-tiny-dancer-wasm
version0.1.29
created_at2025-11-21 21:45:36.692432+00
updated_at2025-12-29 19:18:13.105355+00
descriptionWASM bindings for Tiny Dancer neural routing
homepage
repositoryhttps://github.com/ruvnet/ruvector
max_upload_size
id1944320
size43,516
rUv (ruvnet)

documentation

README

Ruvector Tiny Dancer WASM

npm Crates.io License: MIT

WebAssembly bindings for Tiny Dancer neural routing.

ruvector-tiny-dancer-wasm brings production-grade AI agent routing to the browser with WebAssembly. Run FastGRNN neural inference for intelligent request routing directly in client-side applications. Part of the Ruvector ecosystem.

Why Tiny Dancer WASM?

  • Browser Native: Run neural routing in any browser
  • Low Latency: Sub-millisecond inference times
  • Small Bundle: Optimized WASM binary (~100KB gzipped)
  • Offline Capable: No server required for inference
  • Privacy First: Route decisions stay client-side

Features

Core Capabilities

  • Neural Inference: FastGRNN model execution
  • Feature Engineering: Request feature extraction
  • Multi-Agent Routing: Score and rank agent candidates
  • Model Loading: Load pre-trained models
  • Batch Inference: Process multiple requests

Advanced Features

  • Web Workers: Background inference threads
  • Streaming: Process streaming requests
  • Model Caching: IndexedDB model persistence
  • Quantization: INT8 models for smaller size
  • SIMD: Hardware acceleration when available

Installation

npm install @ruvector/tiny-dancer-wasm
# or
yarn add @ruvector/tiny-dancer-wasm

Quick Start

Basic Usage

import init, { TinyDancer, RouteRequest } from '@ruvector/tiny-dancer-wasm';

// Initialize WASM module
await init();

// Create router instance
const router = new TinyDancer();

// Load pre-trained model
await router.loadModel('/models/router-v1.bin');

// Create routing request
const request: RouteRequest = {
  query: "What is the weather like today?",
  context: {
    userId: "user-123",
    sessionLength: 5,
    previousAgent: "general",
  },
  agents: ["weather", "general", "calendar", "search"],
};

// Get routing decision
const result = await router.route(request);
console.log(`Route to: ${result.agent} (confidence: ${result.confidence})`);

With Web Workers

import { TinyDancerWorker } from '@ruvector/tiny-dancer-wasm/worker';

// Create worker-based router (non-blocking)
const router = new TinyDancerWorker();

// Initialize in background
await router.init();
await router.loadModel('/models/router-v1.bin');

// Route without blocking main thread
const result = await router.route(request);

Feature Engineering

import { FeatureExtractor } from '@ruvector/tiny-dancer-wasm';

const extractor = new FeatureExtractor();

// Extract features from request
const features = extractor.extract({
  query: "Book a flight to Paris",
  tokens: 6,
  language: "en",
  sentiment: 0.7,
  entities: ["Paris"],
});

console.log(`Feature vector: ${features.length} dimensions`);

API Reference

TinyDancer Class

class TinyDancer {
  constructor();

  // Model management
  loadModel(url: string): Promise<void>;
  loadModelFromBuffer(buffer: Uint8Array): void;

  // Routing
  route(request: RouteRequest): Promise<RouteResult>;
  routeBatch(requests: RouteRequest[]): Promise<RouteResult[]>;

  // Scoring
  scoreAgents(request: RouteRequest): Promise<AgentScore[]>;

  // Info
  getModelInfo(): ModelInfo;
  isReady(): boolean;
}

Types

interface RouteRequest {
  query: string;
  context?: Record<string, any>;
  agents: string[];
  constraints?: RouteConstraints;
}

interface RouteResult {
  agent: string;
  confidence: number;
  scores: Record<string, number>;
  latencyMs: number;
}

interface AgentScore {
  agent: string;
  score: number;
  features: number[];
}

interface RouteConstraints {
  excludeAgents?: string[];
  minConfidence?: number;
  timeout?: number;
}

Bundle Optimization

Tree Shaking

// Import only what you need
import { TinyDancer } from '@ruvector/tiny-dancer-wasm/core';
import { FeatureExtractor } from '@ruvector/tiny-dancer-wasm/features';

CDN Usage

<script type="module">
  import init, { TinyDancer } from 'https://unpkg.com/@ruvector/tiny-dancer-wasm';

  await init();
  const router = new TinyDancer();
</script>

Performance

Benchmarks (Chrome 120, M1 Mac)

Operation           Latency (p50)
────────────────────────────────
Model load          ~50ms
Single inference    ~0.5ms
Batch (10)          ~2ms
Feature extraction  ~0.1ms

Bundle Size

Format              Size
────────────────────────
WASM binary         ~100KB gzipped
JS glue             ~5KB gzipped
Total               ~105KB gzipped

Browser Support

Browser Version SIMD
Chrome 89+
Firefox 89+
Safari 15+
Edge 89+

Related Packages

Documentation

License

MIT License - see LICENSE for details.


Part of Ruvector - Built by rUv

Star on GitHub

Documentation | npm | GitHub

Commit count: 729

cargo fmt