mem0ai/mem0 · error

Failed to auto-detect embedding dimension from provider '${t

Error message

Failed to auto-detect embedding dimension from provider '${this.config.embedder.provider}': ${error.message}. Please set 'dimension' in vectorStore.config or 'embeddingDims' in embedder.config explicitly.

What it means

During lazy first-use initialization, when no vectorStore dimension and no embedder embeddingDims were configured, Memory runs a probe embedding ('dimension probe') to infer the dimension; if that probe call fails, this error wraps the embedder's failure and tells you to set the dimension explicitly. The embedded message identifies both the embedder provider and the original failure.

Source

Thrown at mem0-ts/src/oss/src/memory/index.ts:274

    // and initialize it. All public methods await this before proceeding.
    this._initPromise = this._autoInitialize().catch((error) => {
      this._initError =
        error instanceof Error ? error : new Error(String(error));
      console.error(this._initError);
    });
  }

  /**
   * If no explicit dimension was provided, runs a probe embedding to
   * detect it. Then creates and initializes the vector store.
   */
  private async _autoInitialize(): Promise<void> {
    if (!this.config.vectorStore.config.dimension) {
      try {
        const probe = await this.embedder.embed("dimension probe");
        this.config.vectorStore.config.dimension = probe.length;
      } catch (error: any) {
        throw new Error(
          `Failed to auto-detect embedding dimension from provider '${this.config.embedder.provider}': ${error.message}. ` +
            `Please set 'dimension' in vectorStore.config or 'embeddingDims' in embedder.config explicitly.`,
        );
      }
    }

    this.vectorStore = VectorStoreFactory.create(
      this.config.vectorStore.provider,
      this.config.vectorStore.config,
    );

    // The vector store constructor may fire initialize() asynchronously
    // (e.g. Qdrant). Explicitly await it here to guarantee the backing
    // store (collections, tables, etc.) is ready before any public method
    // attempts to read or write.
    await this.vectorStore.initialize();

    await this._initializeTelemetry();

View on GitHub (pinned to 001c235229)

Solutions

  1. Fix the embedder first: check the original error.message (e.g. OpenAI 401 = bad key, 404 = bad embedding model).
  2. Or bypass the probe by pinning the dimension: vectorStore.config.dimension = 1536 (text-embedding-3-small) or embedder.config.embeddingDims.
  3. Ensure the embedder's API key/env vars are present in the runtime performing the first operation (initialization is lazy, not at construction).
  4. For local embedders, confirm model weights are downloaded/accessible before first use.

Example fix

// before
const memory = new Memory({
  embedder: { provider: 'openai', config: {} }, // no key in env -> probe fails
  vectorStore: { provider: 'memory', config: {} },
});
await memory.add('hi', { filters: { userId: 'u1' } }); // throws auto-detect error

// after
const memory = new Memory({
  embedder: { provider: 'openai', config: { apiKey: process.env.OPENAI_API_KEY } },
  vectorStore: { provider: 'memory', config: { dimension: 1536 } }, // explicit
});
Defensive patterns

Strategy: validation

Validate before calling

const KNOWN_DIMS: Record<string, number> = {
  'text-embedding-3-small': 1536,
  'text-embedding-3-large': 3072,
};
function withExplicitDimension(config: MemoryConfig, model: string): MemoryConfig {
  return {
    ...config,
    vectorStore: {
      ...config.vectorStore,
      config: { ...config.vectorStore.config, dimension: KNOWN_DIMS[model] },
    },
  };
}

Try / catch

try {
  await memory.add(text, opts);
} catch (err) {
  if (err instanceof Error && /auto-detect embedding dimension/.test(err.message)) {
    // embedder creds/model broken — surface the embedded cause, don't retry
    throw new Error(`Embedder misconfigured: ${err.message}`);
  }
  throw err;
}

Prevention

When it happens

Trigger: Constructing Memory without vectorStore.config.dimension or embedder.config.embeddingDims, then triggering the first vector operation, while the embedder fails — e.g. OpenAI embedder with a missing/invalid API key, unreachable embeddings endpoint, wrong model name, or a provider whose embed() throws.

Common situations: Quick-start configs that omit dimension because 'auto-detect' usually works, but the embedding provider credentials are absent in CI/deployment; embedder model typos; local embedding models not downloaded; network egress blocked so the probe request fails.

Related errors


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