mastra-ai/mastra · error · Error
`retrieval: { vector: true }` requires an embedder. Pass an
Error message
`retrieval: { vector: true }` requires an embedder. Pass an `embedder` option to your Memory instance. What it means
`retrieval: { vector: true }` performs embedding-based semantic retrieval, which requires both a vector store and an embedder. After confirming a vector store exists, the Memory constructor checks `this.embedder` and throws if none was supplied, since observations cannot be embedded for retrieval without one.
Source
Thrown at packages/memory/src/index.ts:509
// and someone bumps @mastra/memory without bumping @mastra/core the defaults wouldn't exist yet
enabled: false,
template: this.defaultWorkingMemoryTemplate,
},
observationalMemory: config.options?.observationalMemory as ObservationalMemoryOptions | boolean | undefined,
});
this.assertWorkingMemoryStateSignalsCompatibility(mergedConfig);
this.threadConfig = mergedConfig;
// Validate retrieval vector config at construction time
const omConfig = normalizeObservationalMemoryConfig(mergedConfig.observationalMemory);
if (omConfig?.retrieval && typeof omConfig.retrieval === 'object' && omConfig.retrieval.vector) {
if (!this.vector) {
throw new Error(
'`retrieval: { vector: true }` requires a vector store. Pass a `vector` option to your Memory instance.',
);
}
if (!this.embedder) {
throw new Error(
'`retrieval: { vector: true }` requires an embedder. Pass an `embedder` option to your Memory instance.',
);
}
}
if (omConfig?.experimental_subconscious) {
if (!this.vector) {
throw new Error('Subconscious semantic knowledge requires a vector store. Pass a `vector` option to Memory.');
}
if (!this.embedder) {
throw new Error('Subconscious semantic knowledge requires an embedder. Pass an `embedder` option to Memory.');
}
}
}
private async getKnowledgeStore(): Promise<KnowledgeStorage> {
const store = await this.storage.getStore('knowledge');
if (!store) {
throw new Error(`Knowledge storage domain is not available on ${this.storage.constructor.name}`);View on GitHub (pinned to 75dd419e61)
Solutions
- Pass an `embedder` option (e.g. `new FastEmbed(...)` or an OpenAI embedding model wrapper) to the Memory constructor
- If embeddings are not needed, disable `retrieval.vector`
- Confirm the embedder is constructed with valid credentials/model config
Example fix
// before
new Memory({ vector: new LibSQLVector({ connectionUrl: url }), options: { observationalMemory: { retrieval: { vector: true } } } })
// after
new Memory({ vector: new LibSQLVector({ connectionUrl: url }), embedder: new FastEmbed(), options: { observationalMemory: { retrieval: { vector: true } } } }) Defensive patterns
Strategy: validation
Validate before calling
if (memoryOptions.options?.observationalMemory?.retrieval?.vector && !memoryOptions.embedder) {
throw new Error('retrieval.vector=true requires an embedder option on Memory');
} Try / catch
try {
const memory = new Memory(opts);
} catch (err) {
if (err instanceof Error && err.message.includes('requires an embedder')) {
// add an embedder instance and rebuild Memory
} else throw err;
} Prevention
- Always configure embedder alongside vector for retrieval features
- Use a shared factory so vector and embedder are never configured independently
- Verify embedder credentials/model availability in each environment
- Read constructor docs for retrieval prerequisites before enabling
When it happens
Trigger: Creating Memory with `observationalMemory.retrieval.vector: true` and a `vector` option but no `embedder` option in the Memory constructor.
Common situations: Adding a vector store but forgetting the embedder (they are configured as separate options); assuming the model used for the agent doubles as the embedder; upgrading Memory and enabling retrieval without reviewing all required options.
Related errors
- observationalMemory.experimental_subconscious must be a Subc
- `retrieval: { vector: true }` requires a vector store. Pass
- Subconscious semantic knowledge requires an embedder. Pass a
- observation.bufferTokens must be > 0, got ${this.observation
- observation.bufferTokens (${this.observationConfig.bufferTok
AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30).
Data as JSON: /api/errors/f27daae8d087b21f.
Report an issue: GitHub.