mem0ai/mem0 · error · Error

${label} dimension mismatch. Expected ${this.dimension}, got

Error message

${label} dimension mismatch. Expected ${this.dimension}, got ${vector.length}

What it means

The Cassandra store stores fixed-width vectors in CQL, so every vector written or queried must have exactly this.dimension components (the embeddingDimensions from config). assertVectorDimension() is called on inserts and queries and throws with the expected vs actual length.

Source

Thrown at mem0-ts/src/oss/src/vector_stores/cassandra.ts:589

        }
        if (
          !value.every(
            (entry: SearchFilters) => !this.filterVector(vector, entry),
          )
        ) {
          return false;
        }
      } else if (!this.matchFieldCondition(vector.payload, key, value)) {
        return false;
      }
    }

    return true;
  }

  private assertVectorDimension(vector: number[], label: string): void {
    if (vector.length !== this.dimension) {
      throw new Error(
        `${label} dimension mismatch. Expected ${this.dimension}, got ${vector.length}`,
      );
    }
  }

  private assertBatchDimensions(vectors: number[][], label: string): void {
    for (const vector of vectors) {
      this.assertVectorDimension(vector, label);
    }
  }

  private async scanRows(
    query: string,
    onRow: (row: any) => Promise<void>,
    fetchSize: number,
  ): Promise<void> {
    let pageState: string | undefined;

View on GitHub (pinned to 001c235229)

Solutions

  1. Align embeddingDimensions in the vector store config with the embedder's actual output dimension
  2. If the embedder changed, use a new collection/table with the correct dimension — existing rows cannot be resized
  3. Verify with a one-off: embed a test string and check vector.length before configuring the store

Example fix

// before
new Cassandra({ collectionName: 'mem', embeddingDimensions: 1536 });
// embedder: OpenAI text-embedding-3-large (3072 dims)

// after
new Cassandra({ collectionName: 'mem', embeddingDimensions: 3072 });
Defensive patterns

Strategy: validation

Validate before calling

const dim = await embedder.embed('test').then((v) => v.length);
if (dim !== storeConfig.embeddingDimensions) {
  throw new Error(`embeddingDimensions=${storeConfig.embeddingDimensions} but embedder outputs ${dim}`);
}

Try / catch

try { await store.add(vectors, payloads); } catch (e) { if (e instanceof Error && /dimension mismatch/.test(e.message)) { /* reconfigure collection */ } throw e; }

Prevention

When it happens

Trigger: Configuring the store with embeddingDimensions: 1536 but searching with a 3072-dim OpenAI text-embedding-3-large vector; or adding memories whose embedder differs from the one used at store creation; batch inserts where one vector has a different length.

Common situations: Switching embedding models after memories already exist; different default dimensions between the LLM/embedding config and the vector store config; mixing embedders across environments (dev uses a small local model, prod uses OpenAI).

Related errors


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