ruvector-tiny-dancer-node

Crates.ioruvector-tiny-dancer-node
lib.rsruvector-tiny-dancer-node
version0.1.29
created_at2025-11-21 21:48:09.210296+00
updated_at2025-12-29 19:18:26.693326+00
descriptionNode.js bindings for Tiny Dancer neural routing via NAPI-RS
homepage
repositoryhttps://github.com/ruvnet/ruvector
max_upload_size
id1944324
size47,150
rUv (ruvnet)

documentation

README

Ruvector Tiny Dancer Node

npm Crates.io License: MIT

Node.js bindings for Tiny Dancer neural routing via NAPI-RS.

ruvector-tiny-dancer-node provides native Node.js bindings for production-grade AI agent routing. Run FastGRNN neural inference at native speed for intelligent request routing in server-side applications. Part of the Ruvector ecosystem.

Why Tiny Dancer Node?

  • Native Performance: Rust speed in Node.js
  • Production Ready: Battle-tested in high-throughput systems
  • Async/Await: Non-blocking inference operations
  • TypeScript: Complete type definitions included
  • Multi-Threaded: Leverage all CPU cores

Features

Core Capabilities

  • Neural Inference: FastGRNN model execution
  • Model Training: Train custom routing models
  • Feature Engineering: Request feature extraction
  • Persistent Storage: SQLite-backed model storage
  • Batch Processing: Efficient batch inference

Advanced Features

  • Model Versioning: Manage multiple model versions
  • A/B Testing: Route comparison and testing
  • Metrics: Performance and accuracy tracking
  • Hot Reload: Update models without restart
  • Distributed: Coordinate across instances

Installation

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

Quick Start

Basic Routing

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

// Create router instance
const router = new TinyDancer({
  modelPath: './models/router.db',
});

// Initialize
await router.init();

// Route request
const result = await router.route({
  query: "What is the weather like today?",
  context: {
    userId: "user-123",
    sessionLength: 5,
  },
  agents: ["weather", "general", "calendar"],
});

console.log(`Route to: ${result.agent} (confidence: ${result.confidence})`);

Model Training

import { TinyDancer, TrainingData } from '@ruvector/tiny-dancer-node';

const router = new TinyDancer();
await router.init();

// Prepare training data
const trainingData: TrainingData[] = [
  {
    query: "What's the weather?",
    correctAgent: "weather",
    context: { category: "weather" },
  },
  {
    query: "Schedule a meeting",
    correctAgent: "calendar",
    context: { category: "scheduling" },
  },
  // ... more examples
];

// Train model
const result = await router.train({
  data: trainingData,
  epochs: 100,
  learningRate: 0.001,
  validationSplit: 0.2,
});

console.log(`Training accuracy: ${result.accuracy}`);
console.log(`Validation accuracy: ${result.validationAccuracy}`);

// Save model
await router.saveModel('./models/custom-router.bin');

Performance Monitoring

import { TinyDancer } from '@ruvector/tiny-dancer-node';

const router = new TinyDancer({ enableMetrics: true });
await router.init();

// Route with metrics
const result = await router.route(request);

// Get performance metrics
const metrics = router.getMetrics();
console.log(`Average latency: ${metrics.avgLatencyMs}ms`);
console.log(`P99 latency: ${metrics.p99LatencyMs}ms`);
console.log(`Requests/sec: ${metrics.requestsPerSecond}`);
console.log(`Cache hit rate: ${metrics.cacheHitRate}`);

API Reference

TinyDancer Class

class TinyDancer {
  constructor(config?: TinyDancerConfig);

  // Lifecycle
  init(): Promise<void>;
  close(): Promise<void>;

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

  // Training
  train(options: TrainOptions): Promise<TrainResult>;
  loadModel(path: string): Promise<void>;
  saveModel(path: string): Promise<void>;

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

  // Metrics
  getMetrics(): RouterMetrics;
  resetMetrics(): void;
}

Types

interface TinyDancerConfig {
  modelPath?: string;
  enableMetrics?: boolean;
  cacheSize?: number;
  numThreads?: number;
}

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 TrainOptions {
  data: TrainingData[];
  epochs: number;
  learningRate: number;
  validationSplit?: number;
  batchSize?: number;
}

interface TrainResult {
  accuracy: number;
  validationAccuracy: number;
  loss: number;
  epochs: number;
  trainingTimeMs: number;
}

interface RouterMetrics {
  totalRequests: number;
  avgLatencyMs: number;
  p50LatencyMs: number;
  p99LatencyMs: number;
  requestsPerSecond: number;
  cacheHitRate: number;
}

Express Integration

import express from 'express';
import { TinyDancer } from '@ruvector/tiny-dancer-node';

const app = express();
const router = new TinyDancer();

app.use(express.json());

app.post('/route', async (req, res) => {
  const result = await router.route({
    query: req.body.query,
    context: req.body.context,
    agents: ['agent-a', 'agent-b', 'agent-c'],
  });

  res.json(result);
});

app.listen(3000);

Platform Support

Platform Architecture Status
Linux x64
Linux arm64
macOS x64
macOS arm64 (M1/M2)
Windows x64

Building from Source

# Clone repository
git clone https://github.com/ruvnet/ruvector.git
cd ruvector/crates/ruvector-tiny-dancer-node

# Install dependencies
npm install

# Build native module
npm run build

# Run tests
npm test

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