From c520576d40b40465fc2d1ab68db2ecc107633ac8 Mon Sep 17 00:00:00 2001 From: ruv Date: Mon, 15 Jun 2026 10:57:58 -0400 Subject: [PATCH] =?UTF-8?q?release(tiny-dancer):=200.1.21=20=E2=80=94=20ex?= =?UTF-8?q?pose=20trainRouter=20to=20JS=20(types=20+=20bump)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds trainRouter/DracoRowJs/TrainRouterOptions/TrainRouterResult to the hand-written index.d.ts and bumps to 0.1.21 (8 optionalDependencies lock-stepped) so the native train_router export ships typed across all environments. Co-Authored-By: claude-flow --- npm/packages/tiny-dancer/index.d.ts | 55 +++++++++++++++++++++++++++ npm/packages/tiny-dancer/package.json | 18 ++++----- 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/npm/packages/tiny-dancer/index.d.ts b/npm/packages/tiny-dancer/index.d.ts index 06c5c415b..b73d06d60 100644 --- a/npm/packages/tiny-dancer/index.d.ts +++ b/npm/packages/tiny-dancer/index.d.ts @@ -136,3 +136,58 @@ export function version(): string; * Test function to verify bindings are working */ export function hello(): string; + +/** + * One DRACO training row: a query embedding and the quality each model achieved + * on it. Matches the `{ embedding, scores }` shape `@metaharness/router` consumes. + */ +export interface DracoRowJs { + /** Query embedding (used directly as the model's input features). */ + embedding: number[]; + /** model id → quality achieved on this query (0..1). */ + scores: Record; +} + +/** Options for {@link trainRouter}. */ +export interface TrainRouterOptions { + /** Where to write the trained `.safetensors` model. */ + outputPath: string; + /** Input feature dimension (must equal the embedding length). */ + inputDim: number; + /** Hidden dimension (default 12). */ + hiddenDim?: number; + /** Training epochs (default 40). */ + epochs?: number; + /** Learning rate (default 0.05). */ + learningRate?: number; + /** DRACO label tolerance: cheap model is "good enough" within this of the best (default 0.05). */ + tolerance?: number; +} + +/** Result of {@link trainRouter}. */ +export interface TrainRouterResult { + epochsRun: number; + trainLoss: number; + trainAccuracy: number; + valAccuracy: number; + modelPath: string; + modelBytes: number; +} + +/** + * Train a FastGRNN router from a DRACO dataset and write it to a `.safetensors` + * file consumable by `new Router({ modelPath })`. + * + * @example + * ```javascript + * const res = await trainRouter(rows, { haiku: 1, opus: 15 }, { + * outputPath: './router.safetensors', inputDim: 8, epochs: 40, + * }); + * const router = new Router({ modelPath: res.modelPath }); + * ``` + */ +export function trainRouter( + rows: DracoRowJs[], + prices: Record, + options: TrainRouterOptions +): Promise; diff --git a/npm/packages/tiny-dancer/package.json b/npm/packages/tiny-dancer/package.json index 88e2c9d73..d4b9233e2 100644 --- a/npm/packages/tiny-dancer/package.json +++ b/npm/packages/tiny-dancer/package.json @@ -1,6 +1,6 @@ { "name": "@ruvector/tiny-dancer", - "version": "0.1.20", + "version": "0.1.21", "description": "Neural router for AI agent orchestration - FastGRNN-based intelligent routing with circuit breaker, uncertainty estimation, and hot-reload", "main": "index.js", "types": "index.d.ts", @@ -31,14 +31,14 @@ "@napi-rs/cli": "^2.18.0" }, "optionalDependencies": { - "@ruvector/tiny-dancer-linux-x64-gnu": "0.1.20", - "@ruvector/tiny-dancer-linux-x64-musl": "0.1.20", - "@ruvector/tiny-dancer-linux-arm64-gnu": "0.1.20", - "@ruvector/tiny-dancer-linux-arm64-musl": "0.1.20", - "@ruvector/tiny-dancer-darwin-x64": "0.1.20", - "@ruvector/tiny-dancer-darwin-arm64": "0.1.20", - "@ruvector/tiny-dancer-win32-x64-msvc": "0.1.20", - "@ruvector/tiny-dancer-win32-arm64-msvc": "0.1.20" + "@ruvector/tiny-dancer-linux-x64-gnu": "0.1.21", + "@ruvector/tiny-dancer-linux-x64-musl": "0.1.21", + "@ruvector/tiny-dancer-linux-arm64-gnu": "0.1.21", + "@ruvector/tiny-dancer-linux-arm64-musl": "0.1.21", + "@ruvector/tiny-dancer-darwin-x64": "0.1.21", + "@ruvector/tiny-dancer-darwin-arm64": "0.1.21", + "@ruvector/tiny-dancer-win32-x64-msvc": "0.1.21", + "@ruvector/tiny-dancer-win32-arm64-msvc": "0.1.21" }, "publishConfig": { "access": "public"