{"record":{"id":"f27daae8d087b21f","repo":"mastra-ai/mastra","slug":"retrieval-vector-true-requires-an-embedder","errorCode":null,"errorMessage":"`retrieval: { vector: true }` requires an embedder. Pass an `embedder` option to your Memory instance.","messagePattern":"`retrieval: (.+?)` requires an embedder\\. Pass an `embedder` option to your Memory instance\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/memory/src/index.ts","lineNumber":509,"sourceCode":"        // and someone bumps @mastra/memory without bumping @mastra/core the defaults wouldn't exist yet\n        enabled: false,\n        template: this.defaultWorkingMemoryTemplate,\n      },\n      observationalMemory: config.options?.observationalMemory as ObservationalMemoryOptions | boolean | undefined,\n    });\n    this.assertWorkingMemoryStateSignalsCompatibility(mergedConfig);\n    this.threadConfig = mergedConfig;\n\n    // Validate retrieval vector config at construction time\n    const omConfig = normalizeObservationalMemoryConfig(mergedConfig.observationalMemory);\n    if (omConfig?.retrieval && typeof omConfig.retrieval === 'object' && omConfig.retrieval.vector) {\n      if (!this.vector) {\n        throw new Error(\n          '`retrieval: { vector: true }` requires a vector store. Pass a `vector` option to your Memory instance.',\n        );\n      }\n      if (!this.embedder) {\n        throw new Error(\n          '`retrieval: { vector: true }` requires an embedder. Pass an `embedder` option to your Memory instance.',\n        );\n      }\n    }\n    if (omConfig?.experimental_subconscious) {\n      if (!this.vector) {\n        throw new Error('Subconscious semantic knowledge requires a vector store. Pass a `vector` option to Memory.');\n      }\n      if (!this.embedder) {\n        throw new Error('Subconscious semantic knowledge requires an embedder. Pass an `embedder` option to Memory.');\n      }\n    }\n  }\n\n  private async getKnowledgeStore(): Promise<KnowledgeStorage> {\n    const store = await this.storage.getStore('knowledge');\n    if (!store) {\n      throw new Error(`Knowledge storage domain is not available on ${this.storage.constructor.name}`);","sourceCodeStart":491,"sourceCodeEnd":527,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/memory/src/index.ts#L491-L527","documentation":"`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.","triggerScenarios":"Creating Memory with `observationalMemory.retrieval.vector: true` and a `vector` option but no `embedder` option in the Memory constructor.","commonSituations":"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.","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"],"exampleFix":"// before\nnew Memory({ vector: new LibSQLVector({ connectionUrl: url }), options: { observationalMemory: { retrieval: { vector: true } } } })\n// after\nnew Memory({ vector: new LibSQLVector({ connectionUrl: url }), embedder: new FastEmbed(), options: { observationalMemory: { retrieval: { vector: true } } } })","handlingStrategy":"validation","validationCode":"if (memoryOptions.options?.observationalMemory?.retrieval?.vector && !memoryOptions.embedder) {\n  throw new Error('retrieval.vector=true requires an embedder option on Memory');\n}","typeGuard":null,"tryCatchPattern":"try {\n  const memory = new Memory(opts);\n} catch (err) {\n  if (err instanceof Error && err.message.includes('requires an embedder')) {\n    // add an embedder instance and rebuild Memory\n  } else throw err;\n}","preventionTips":["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"],"tags":["configuration","embedder","observational-memory","validation"],"backgroundTag":"missing-embedder-config","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}