# @memberjunction/ai-local-embeddings MemberJunction AI provider for local text embeddings using Transformers.js. This package runs embedding models directly on your machine, eliminating the need for external API calls, API keys, or per-token charges. ## Architecture ```mermaid graph TD A["LocalEmbedding
(Provider)"] -->|extends| B["BaseEmbeddings
(@memberjunction/ai)"] A -->|uses| C["Transformers.js
(@xenova/transformers)"] C -->|loads from| D["Hugging Face Hub
(or local cache)"] C -->|runs| E["Feature Extraction
Pipeline"] E -->|generates| F["Embedding Vectors"] B -->|registered via| G["@RegisterClass"] style A fill:#7c5295,stroke:#563a6b,color:#fff style B fill:#2d6a9f,stroke:#1a4971,color:#fff style C fill:#2d8659,stroke:#1a5c3a,color:#fff style D fill:#b8762f,stroke:#8a5722,color:#fff style E fill:#2d6a9f,stroke:#1a4971,color:#fff style F fill:#2d8659,stroke:#1a5c3a,color:#fff style G fill:#b8762f,stroke:#8a5722,color:#fff ``` ## Features - **Offline Operation**: Run embedding models locally without internet (after initial download) - **No API Keys Required**: Eliminate dependency on external services - **Cost-Effective**: No per-token charges for embeddings - **Privacy-Focused**: Data never leaves your infrastructure - **Multiple Models**: Support for various sentence-transformer models from Hugging Face - **Automatic Caching**: Models are downloaded once and cached locally - **Batch Processing**: Efficient batch embedding with configurable batch sizes (default 32) - **Model Preloading**: Warm up models before first inference - **Quantized Models**: Use quantized models for better performance ## Supported Models | Model | Dimensions | Description | |-------|------------|-------------| | `all-MiniLM-L6-v2` | 384 | Lightweight general-purpose embeddings | | `all-MiniLM-L12-v2` | 384 | Higher quality with more layers | | `all-mpnet-base-v2` | 768 | Best quality general-purpose embeddings | | `paraphrase-multilingual-MiniLM-L12-v2` | 384 | Multilingual support (50+ languages) | | `gte-small` | 384 | General Text Embeddings (efficient) | | `bge-small-en-v1.5` | 384 | BAAI General Embeddings (English) | ## Installation ```bash npm install @memberjunction/ai-local-embeddings ``` ## Usage ### Single Text Embedding ```typescript import { LocalEmbedding } from '@memberjunction/ai-local-embeddings'; const embedder = new LocalEmbedding(); const result = await embedder.EmbedText({ text: 'Your text to embed', model: 'Xenova/all-MiniLM-L6-v2' }); console.log(result.vector); // Float32Array of embedding values ``` ### Batch Embedding ```typescript const results = await embedder.EmbedTexts({ texts: ['First text', 'Second text', 'Third text'], model: 'Xenova/all-MiniLM-L6-v2' }); console.log(results.vectors.length); // 3 embedding vectors ``` ### Configuration ```typescript embedder.SetAdditionalSettings({ cacheDir: '/path/to/model/cache', useQuantized: true }); ``` ### Model Management ```typescript // Preload a model for faster first inference await embedder.preloadModel('Xenova/all-mpnet-base-v2'); // Clear model cache to free memory embedder.clearCache(); LocalEmbedding.clearSharedCache(); // Static method ``` ## Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `TRANSFORMERS_CACHE_DIR` | `./.cache/transformers` | Directory for storing downloaded models | | `TRANSFORMERS_LOCAL_URL` | (empty) | Optional local URL for model files | ## ESM/CommonJS Compatibility This package is built as CommonJS. The underlying `@xenova/transformers` library is ESM-only, so dynamic imports are used as a workaround (the official recommended approach by HuggingFace for CommonJS environments). ## Class Registration Registered as `LocalEmbedding` via `@RegisterClass(BaseEmbeddings, 'LocalEmbedding')`. ## Dependencies - `@memberjunction/ai` - Core AI abstractions - `@memberjunction/global` - Class registration - `@xenova/transformers` - Hugging Face Transformers.js runtime