Catalog npm
Back to packageRELEASE DETAILS

0.9.7

npm

@0din/prompt-toolkit

Multi-language SDK for LSH signature generation for AI prompt similarity detection

aiembeddingslocality-sensitive-hashinglshsimilaritytypescript
Published17 Sept 2026
Direct dependencies15
Transitive dependenciesNot calculated

README

Current package documentation

@0din/prompt-toolkit (TypeScript)

Multi-language SDK for LSH (Locality-Sensitive Hashing) signature generation for AI prompt similarity detection.

This is the TypeScript implementation of the odin-prompt-toolkit algorithm, also available in Rust and Python.

Installation

From Git (Development)

npm install git+https://github.com/0din-ai/prompt-toolkit#main:typescript
# or
yarn add git+https://github.com/0din-ai/prompt-toolkit#main:typescript
# or
pnpm add git+https://github.com/0din-ai/prompt-toolkit#main:typescript

Quick Start

Basic LSH Signatures

import { simhashLshMulti, normalizeVector } from '@0din/prompt-toolkit';

// Your embedding vector (must be L2-normalized)
const vector = [0.5, 0.5, 0.5, 0.5];
const normalized = normalizeVector(vector);

// Generate LSH signatures (3 families, 256 bits, 16 bands)
const families = simhashLshMulti(normalized);

console.log(`Signature: ${families[0].signature}`);
console.log(`Bands: ${families[0].bands}`);

Similarity Comparison

import { 
  simhashLshMulti, 
  hammingDistanceHex, 
  cosineFromHamming 
} from '@0din/prompt-toolkit';

// Generate signatures for two vectors
const families1 = simhashLshMulti(vector1);
const families2 = simhashLshMulti(vector2);

// Compute Hamming distance
const distance = hammingDistanceHex(
  families1[0].signature, 
  families2[0].signature
);

// Estimate cosine similarity
const similarity = cosineFromHamming(distance, 256);
console.log(`Estimated cosine similarity: ${similarity.toFixed(3)}`);

Versioned Signatures

import { 
  signatureString, 
  parseSignatureString,
  SignatureVersion 
} from '@0din/prompt-toolkit';

// Format signature with version
const versionedSig = signatureString(SignatureVersion.V1, signature);
console.log(versionedSig); // "0din-v1:abcd1234..."

// Parse signature string
const parsed = parseSignatureString('0din-v1:abcd1234');
console.log(parsed.version); // 'v1'
console.log(parsed.signature); // 'abcd1234'

API Reference

Core Functions

simhashLshMulti(vector, config?)

Generate LSH signatures for a normalized vector.

Parameters:

  • vector: number[] - L2-normalized embedding vector
  • config?: LshConfig - Optional configuration
    • families?: number - Number of hash families (default: 3)
    • bits?: number - Bits per signature (default: 256)
    • bands?: number - Number of bands (default: 16)

Returns: LSHFamily[] - Array of signatures, one per family

hammingDistanceHex(a, b)

Compute Hamming distance between two hex signatures.

Parameters:

  • a: string - First hex signature
  • b: string - Second hex signature

Returns: number - Hamming distance in bits

cosineFromHamming(distance, totalBits)

Estimate cosine similarity from Hamming distance.

Parameters:

  • distance: number - Hamming distance in bits
  • totalBits: number - Total bits in signature

Returns: number - Estimated cosine similarity [-1, 1]

normalizeVector(vector)

L2-normalize a vector to unit length.

Parameters:

  • vector: number[] - Input vector

Returns: number[] - Normalized vector

Type Definitions

interface LSHFamily {
  family: number;
  bits: number;
  signature: string; // hex string
  bands: string[]; // band slices
}

interface LshConfig {
  families?: number;
  bits?: number;
  bands?: number;
}

enum SignatureVersion {
  V0 = 'v0', // OpenAI (1536 dims)
  V1 = 'v1', // ONNX (1024 dims)
  LATEST = 'latest', // Resolves to V1
}

Signature Versions

  • V0: OpenAI text-embedding-3-large (1536 dimensions, API-based)
  • V1: 0din-jailbreak-embeddings-small ONNX (1024 dimensions, local)
  • Latest: Resolves to V1

Important: V0 and V1 signatures are not comparable due to different embedding spaces.

Algorithm

SimHash via Random Hyperplane LSH (Charikar 2002):

  • Deterministic hyperplanes via SplitMix64 PRNG
  • Default: 3 families × 256 bits × 16 bands
  • Hex-encoded signatures (64 hex chars = 256 bits)
  • Hamming distance → cosine similarity via cos(π × d/n)

See the specification for complete algorithm details.

Development

Setup

cd typescript
npm install

Build

npm run build

Run Tests

npm test

Linting & Formatting

npm run lint
npm run format

License

Apache License 2.0

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 15

Native requirements
15 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5.9.3runtime
jest
Environment
{
  "local_name": "jest",
  "alias": false,
  "peer_metadata": null
}
^30.4.2development
eslint
Environment
{
  "local_name": "eslint",
  "alias": false,
  "peer_metadata": null
}
^10.8.1development
globals
Environment
{
  "local_name": "globals",
  "alias": false,
  "peer_metadata": null
}
^17.11.0development
ts-jest
Environment
{
  "local_name": "ts-jest",
  "alias": false,
  "peer_metadata": null
}
^29.4.11development
typedoc
Environment
{
  "local_name": "typedoc",
  "alias": false,
  "peer_metadata": null
}
^0.28.20development
prettier
Environment
{
  "local_name": "prettier",
  "alias": false,
  "peer_metadata": null
}
^3.9.6development
@eslint/js
Environment
{
  "local_name": "@eslint/js",
  "alias": false,
  "peer_metadata": null
}
^10.0.1development
@types/jest
Environment
{
  "local_name": "@types/jest",
  "alias": false,
  "peer_metadata": null
}
^30.0.0development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^26.2.0development
@typescript-eslint/parser
Environment
{
  "local_name": "@typescript-eslint/parser",
  "alias": false,
  "peer_metadata": null
}
^8.67.0development
@typescript-eslint/eslint-plugin
Environment
{
  "local_name": "@typescript-eslint/eslint-plugin",
  "alias": false,
  "peer_metadata": null
}
^8.67.0development
openai
Environment
{
  "local_name": "openai",
  "alias": false,
  "peer_metadata": {
    "optional": true
  }
}
^4.0.0peer
onnxruntime-node
Environment
{
  "local_name": "onnxruntime-node",
  "alias": false,
  "peer_metadata": {
    "optional": true
  }
}
^1.16.0peer
@huggingface/transformers
Environment
{
  "local_name": "@huggingface/transformers",
  "alias": false,
  "peer_metadata": {
    "optional": true
  }
}
^4.2.0peer

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "94032be162e42cc0cd71ae1da82609a8915e8d1e",
  "tarball": "https://registry.npmjs.org/@0din/prompt-toolkit/-/prompt-toolkit-0.9.7.tgz",
  "fileCount": 94,
  "integrity": "sha512-51zbEvvjTRT9vby+oEVJ+z7n3Ajr4F8DRTLagTMHrDwbxBH9oeutInmnx/ol5PM8kaSwyrILJix8IOJeamVcqA==",
  "signatures": [
    {
      "sig": "MEUCIQCjqdSqSKDNlSDMdxBsz9zEXDBOqeGxhLpGXr/ZZgW2VQIgIEUuNzn17GDCyyXoiHcpDe/aMzhxmVMF3a/LbPXn7cs=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    },
    {
      "sig": "MEYCIQCO/F7DHriUYP4l2scUh8ODi3nRp7MnmfhbS6aS74W+JQIhAKTVSrrqWcIRLouGPNrTr0yCu4PaIVMoax2mUs2mGQJi",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "attestations": {
    "url": "https://registry.npmjs.org/-/npm/v1/attestations/@0din%2fprompt-toolkit@0.9.7",
    "provenance": {
      "predicateType": "https://slsa.dev/provenance/v1"
    }
  },
  "unpackedSize": 299847
}

Repository

PENDING
0din-ai/prompt-toolkit

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:07 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:f821c948769b219005d3f95f5d71845cd2500fed01a6ea5fb16c3edcdd5278f8

Other collected versions

0.9.814 Oct0.9.62 Sept0.9.52 Sept0.9.429 Aug0.9.328 Aug0.9.026 AugView all collected versions →