Observed since 20 Oct, 22:07 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Multi-language SDK for LSH signature generation for AI prompt similarity detection
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.
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
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}`);
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)}`);
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'
simhashLshMulti(vector, config?)Generate LSH signatures for a normalized vector.
Parameters:
vector: number[] - L2-normalized embedding vectorconfig?: 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 signatureb: string - Second hex signatureReturns: number - Hamming distance in bits
cosineFromHamming(distance, totalBits)Estimate cosine similarity from Hamming distance.
Parameters:
distance: number - Hamming distance in bitstotalBits: number - Total bits in signatureReturns: number - Estimated cosine similarity [-1, 1]
normalizeVector(vector)L2-normalize a vector to unit length.
Parameters:
vector: number[] - Input vectorReturns: number[] - Normalized vector
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
}
Important: V0 and V1 signatures are not comparable due to different embedding spaces.
SimHash via Random Hyperplane LSH (Charikar 2002):
cos(π × d/n)See the specification for complete algorithm details.
cd typescript
npm install
npm run build
npm test
npm run lint
npm run format
Apache License 2.0
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:07 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:ba332f7448cc726266f34cdd596f055c29eb091bd23451ecc644d037c7257cee