mem0ai/mem0 · error · Error

Method 'get' not reliably supported by LangchainVectorStore

Error message

Method 'get' not reliably supported by LangchainVectorStore wrapper.

What it means

get(vectorId) is deliberately unimplemented in the Langchain adapter: the generic Langchain VectorStore interface has no standard get-by-id method, and simulating it via a filtered search is unreliable and inefficient. The adapter fails fast instead of returning wrong data. Note this is a hard throw, despite the dead code after it suggesting a simulation.

Source

Thrown at mem0-ts/src/oss/src/vector_stores/langchain.ts:145

      // Do not pass lcFilter here
    );

    // Map Langchain results [Document, score] back to mem0 VectorStoreResult
    return results.map(([doc, score]) => ({
      id: doc.metadata._mem0_id || "unknown_id",
      payload: doc.metadata,
      score: score,
    }));
  }

  // --- Methods with No Direct Langchain Equivalent (Throwing Errors) ---

  async get(vectorId: string): Promise<VectorStoreResult | null> {
    // Most Langchain stores lack a direct getById. Simulation is inefficient.
    console.error(
      `LangchainVectorStore: The 'get' method is not directly supported by most Langchain VectorStores.`,
    );
    throw new Error(
      "Method 'get' not reliably supported by LangchainVectorStore wrapper.",
    );
    // Potential (inefficient) simulation:
    // Perform a search with a filter like { _mem0_id: vectorId }, limit 1.
    // This requires the underlying store to support filtering on _mem0_id.
  }

  async update(
    vectorId: string,
    vector: number[],
    payload: Record<string, any>,
  ): Promise<void> {
    // Updates often require delete + add in Langchain.
    console.error(
      `LangchainVectorStore: The 'update' method is not directly supported. Use delete followed by insert.`,
    );
    throw new Error(
      "Method 'update' not supported by LangchainVectorStore wrapper.",

View on GitHub (pinned to 001c235229)

Solutions

  1. Replace get() with a filtered search: store.search(anyVector, k, { memory_id: vectorId }) and pick the exact match, if the underlying store supports metadata filtering in similaritySearchVectorWithScore (note the wrapper currently does not forward filters — you may need a custom adapter).
  2. Track mem0 memory ids to document metadata (_mem0_id) yourself and query the underlying Langchain store directly.
  3. Switch to a provider that supports get (qdrant, chroma, pgvector, etc.) if per-id access is essential.
Defensive patterns

Strategy: fallback

Validate before calling

// Capability check before relying on get():
const supportsGet = (s: any) => typeof s.get === 'function' && s.constructor?.name !== 'LangchainVectorStore';
if (!supportsGet(store)) {
  // route through search-by-memory_id or avoid the code path that calls get()
}

Try / catch

try {
  const v = await store.get(id);
} catch (e) {
  if (e instanceof Error && e.message.includes("Method 'get' not reliably supported")) {
    // fallback: filtered search on memory_id against the underlying store
    const results = await store.search(anyKnownVectorOfThatMemory, 1);
    return results.find((r) => r.id === id) ?? null;
  }
  throw e;
}

Prevention

When it happens

Trigger: Any code path that triggers VectorStore.get() — e.g. Memory.update() flows or custom code calling store.get(id) directly — while using the langchain provider.

Common situations: Switching a working setup from qdrant/chroma to langchain and hitting update flows that call get(); Memory APIs that internally fetch a single memory by id.

Related errors


AI-assisted analysis of mem0ai/mem0@001c235229 (2026-08-15). Data as JSON: /api/errors/9ae0841e92c607d7. Report an issue: GitHub.