LangChain
Embeddings
LocalModeEmbeddings — use any LocalMode embedding model with LangChain.
LocalModeEmbeddings
Drop-in replacement for OpenAIEmbeddings or any LangChain Embeddings class, backed by local inference.
See it in action
Try LangChain RAG for a working demo.
Constructor
import { LocalModeEmbeddings } from '@localmode/langchain';
import { transformers } from '@localmode/transformers';
const embeddings = new LocalModeEmbeddings({
model: transformers.embedding('Xenova/bge-small-en-v1.5'),
});| Option | Type | Required | Description |
|---|---|---|---|
model | EmbeddingModel | Yes | Any @localmode/core EmbeddingModel instance |
The constructor also accepts an optional second parameter of LangChain EmbeddingsParams for callback configuration.
Methods
embedDocuments
Embed multiple texts. Returns number[][] (LangChain format).
const vectors = await embeddings.embedDocuments(['Hello world', 'How are you?']);
// vectors: number[][] — each inner array has 384 dimensionsInternally calls model.doEmbed({ values: texts }) and converts each Float32Array to number[] via Array.from(). Returns [] for empty input without calling the model.
embedQuery
Embed a single query text. Returns number[].
const queryVector = await embeddings.embedQuery('search term');
// queryVector: number[] — 384 dimensionsSupported Models
Any EmbeddingModel from @localmode/transformers:
| Model | Dimensions | Size | Best For |
|---|---|---|---|
Xenova/bge-small-en-v1.5 | 384 | 33MB | English text, fast |
Xenova/all-MiniLM-L6-v2 | 384 | 23MB | English text, smallest |
Xenova/multilingual-e5-small | 384 | 470MB | 100+ languages |
// English
const en = new LocalModeEmbeddings({
model: transformers.embedding('Xenova/bge-small-en-v1.5'),
});
// Multilingual
const multi = new LocalModeEmbeddings({
model: transformers.embedding('Xenova/multilingual-e5-small'),
});For the full list of embedding models, see the Transformers Embeddings guide.
Migration from OpenAI
- import { OpenAIEmbeddings } from '@langchain/openai';
+ import { LocalModeEmbeddings } from '@localmode/langchain';
+ import { transformers } from '@localmode/transformers';
- const embeddings = new OpenAIEmbeddings({ modelName: 'text-embedding-3-small' });
+ const embeddings = new LocalModeEmbeddings({
+ model: transformers.embedding('Xenova/bge-small-en-v1.5'),
+ });
// Usage is identical:
const vectors = await embeddings.embedDocuments(texts);
const queryVec = await embeddings.embedQuery('search');