
Security News
Re-Enabled GitHub Actions Expose Thousands of Repositories to Mini Shai-Hulud
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.
@crashbytes/semantic-text-toolkit
Advanced tools
Production-grade semantic text analysis with embeddings, similarity, and vector operations
Production-grade semantic text analysis with embeddings, similarity computation, and vector search operations.
Part of the CrashBytes npm ecosystem | Built by Blackhole Software, LLC
When building ML-powered production systems, prioritize:
npm install @crashbytes/semantic-text-toolkit
import { createSemanticEngine } from '@crashbytes/semantic-text-toolkit';
const engine = await createSemanticEngine();
const result = await engine.embed("Machine learning transforms data");
console.log(result.embedding); // 384-dimensional vector
const similarity = await engine.similarity(
"Artificial intelligence is fascinating",
"Machine learning is interesting"
);
console.log(similarity.score); // 0.78
Transform text into high-dimensional numerical vectors that capture semantic meaning, enabling:
Multiple metrics for domain-specific optimization:
Production-ready semantic search with:
Core engine for embedding generation and similarity computation.
new SemanticEngine(config?: ModelConfig)
Configuration Parameters:
modelName - Hugging Face model identifier (default: 'Xenova/all-MiniLM-L6-v2')maxLength - Maximum sequence length (default: 512)dtype - Model weight precision: 'fp32' | 'fp16' | 'q8' | 'q4' | 'q4f16' (default: 'q8' — 8-bit quantization)onProgress - Progress callback for model loadingasync initialize(): Promise<void>Initializes the model. Idempotent and concurrent-safe through promise caching.
async embed(text: string): Promise<EmbeddingResult>Generates embedding for single text input. Returns vector with metadata.
async embedBatch(texts: string[], options?: BatchOptions): Promise<EmbeddingResult[]>Batch processing with automatic batching and progress tracking.
async similarity(textA: string, textB: string, method?: 'cosine' | 'euclidean' | 'dot'): Promise<SimilarityResult>Computes semantic similarity using specified metric.
High-level search interface with indexing capabilities.
new SemanticSearch<T>(engine: SemanticEngine, config?: SearchConfig<T>)
Configuration Parameters:
topK - Number of results to return (default: 10)threshold - Minimum similarity score (default: 0)textExtractor - Function to extract text from custom objectsmetadataExtractor - Function to extract metadata for filteringasync index(items: T[], replace?: boolean): Promise<void>Indexes items for semantic search with optional index replacement.
async search(query: string, config?: Partial<SearchConfig<T>>): Promise<SearchResult<T>[]>Performs semantic search with configurable parameters.
async searchWithFilter(query: string, filter: (metadata: Record<string, unknown>) => boolean): Promise<SearchResult<T>[]>Searches with metadata filtering for complex queries.
interface Document {
id: string;
title: string;
content: string;
category: string;
}
const search = new SemanticSearch<Document>(engine, {
textExtractor: (doc) => `${doc.title} ${doc.content}`,
metadataExtractor: (doc) => ({ category: doc.category }),
});
await search.index(documents);
const results = await search.searchWithFilter(
"machine learning",
(metadata) => metadata.category === 'AI'
);
import { centroid, cosineSimilarity } from '@crashbytes/semantic-text-toolkit';
const embeddings = await Promise.all(
documents.map(doc => engine.embed(doc))
);
const clusterCenter = centroid(embeddings.map(r => r.embedding));
const distances = embeddings.map(result =>
cosineSimilarity(result.embedding, clusterCenter)
);
When optimizing for response time:
When managing resource limitations:
dtype: 'q8' is the default; 'q4' for further reduction)When scaling for volume:
Single Embedding Generation:
Batch Processing (100 texts):
Memory Profile:
dtype: 'q8'): ~23MBconst engine = new SemanticEngine({
modelName: 'Xenova/multilingual-e5-large',
maxLength: 512,
dtype: 'fp32'
});
const engine = new SemanticEngine({
modelName: 'Xenova/all-MiniLM-L6-v2',
dtype: 'q8',
onProgress: (progress) => {
if (progress.status === 'downloading') {
logger.info(`Model download: ${progress.progress}%`);
}
}
});
When contributing to this project:
npm run build
Generates:
dist/index.js (CommonJS)dist/index.mjs (ES Modules)dist/index.d.ts (TypeScript definitions)Contributions welcome. When contributing:
MIT License - see LICENSE file for details
Specializing in custom web and software solutions:
Visit us at blackholesoftware.com
Built with precision. Designed for production.
FAQs
Production-grade semantic text analysis with embeddings, similarity, and vector operations
We found that @crashbytes/semantic-text-toolkit demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.

Research
/Security News
The compromise affects MemTensor's MemOS, an open source memory framework for large language models (LLMs) and AI agents. Both npm package @memtensor/memos-cloud-openclaw-plugin and the PyPI package MemoryOS are compromised. They drop cross-platform Go binaries that exfiltrate developer secrets.