{"record":{"id":"ce6ab386b6a3580f","repo":"mem0ai/mem0","slug":"query-vector-dimension-mismatch-expected-this-d","errorCode":null,"errorMessage":"Query vector dimension mismatch. Expected ${this.dimension}, got ${query.length}","messagePattern":"Query vector dimension mismatch\\. Expected (.+?), got (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"mem0-ts/src/oss/src/vector_stores/langchain.ts","lineNumber":112,"sourceCode":"      console.warn(\n        \"Langchain store might not support custom IDs on insert. Trying without IDs.\",\n        e,\n      );\n      await this.lcStore.addVectors(vectors, documents);\n    }\n  }\n\n  async keywordSearch(): Promise<null> {\n    return null;\n  }\n\n  async search(\n    query: number[],\n    topK: number = 5,\n    filters?: SearchFilters, // filters parameter is received but will be ignored\n  ): Promise<VectorStoreResult[]> {\n    if (this.dimension && query.length !== this.dimension) {\n      throw new Error(\n        `Query vector dimension mismatch. Expected ${this.dimension}, got ${query.length}`,\n      );\n    }\n\n    // --- Remove filter processing logic ---\n    // Filters passed via mem0 interface are not reliably translatable to generic Langchain stores.\n    // let lcFilter: any = undefined;\n    // if (filters && ...) { ... }\n    // console.warn(\"LangchainVectorStore: Passing filters directly...\"); // Remove warning\n\n    // Call similaritySearchVectorWithScore WITHOUT the filter argument\n    const results = await this.lcStore.similaritySearchVectorWithScore(\n      query,\n      topK,\n      // Do not pass lcFilter here\n    );\n\n    // Map Langchain results [Document, score] back to mem0 VectorStoreResult","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0-ts/src/oss/src/vector_stores/langchain.ts#L94-L130","documentation":"search() in the Langchain adapter throws when the query vector's length differs from this.dimension. The query is passed straight to similaritySearchVectorWithScore, so a mismatched dimension would otherwise produce wrong results or an obscure store-specific error.","triggerScenarios":"Calling search() with a query embedded by a different model than the one whose dimension was configured/inferred — e.g. Memory's embedder changed after construction, or a manual search() call with a stale cached embedding.","commonSituations":"Swapping the embedding provider between add and search calls; using a persisted dimension from config while the live embedder differs; embedding the query with a different model version that changed dimensions (e.g. ada-002 1536 vs small model 1536 but MRL-truncated 256).","solutions":["Re-embed queries with the same model used for inserts (use Memory.search rather than calling store.search with hand-made embeddings).","Update config.dimension to match the actual embedder output dimension.","If models were switched, reindex stored memories with the new embedder before searching."],"exampleFix":"// before\nconst results = await store.search(staleQueryVector1536, 5); // dimension now 768\n\n// after\nconst { embedding } = await memory.embedder.embed('query text');\nconst results = await store.search(embedding, 5);","handlingStrategy":"validation","validationCode":"if (storeDimension && query.length !== storeDimension) {\n  throw new Error(`Query is ${query.length}-d but store expects ${storeDimension}-d; re-embed the query`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  await store.search(query, topK);\n} catch (e) {\n  if (e instanceof Error && e.message.includes('Query vector dimension mismatch')) {\n    // re-embed the query with the store's embedding model and retry\n  }\n  throw e;\n}","preventionTips":["Prefer Memory.search() so queries are always embedded by the configured embedder.","Never reuse cached query embeddings across embedder changes.","Probe and pin the embedder dimension at startup."],"tags":["langchain","dimension-mismatch","embeddings","search","typescript"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}