TencentCloud/TencentDB-Agent-Memory · error

EmbeddingService: dimensions is required for remote provider

Error message

EmbeddingService: dimensions is required for remote provider (must be a positive integer)

What it means

The remote EmbeddingService requires config.dimensions to be a positive integer so vectors are stored and compared consistently. Zero, negative, or missing dimensions are rejected at construction time.

Source

Thrown at MemoryCore/src/core/store/embedding.ts:425

  private readonly sendDimensions: boolean;
  private readonly providerName: string;
  private readonly proxyUrl?: string;
  private readonly maxInputChars?: number;
  private readonly timeoutMs: number;
  private readonly logger?: Logger;

  constructor(config: OpenAIEmbeddingConfig, logger?: Logger) {
    if (!config.apiKey) {
      throw new Error("EmbeddingService: apiKey is required for remote provider");
    }
    if (!config.baseUrl) {
      throw new Error("EmbeddingService: baseUrl is required for remote provider");
    }
    if (!config.model) {
      throw new Error("EmbeddingService: model is required for remote provider");
    }
    if (!config.dimensions || config.dimensions <= 0) {
      throw new Error("EmbeddingService: dimensions is required for remote provider (must be a positive integer)");
    }
    this.baseUrl = config.baseUrl.replace(/\/+$/, "");
    this.apiKey = config.apiKey;
    this.model = config.model;
    this.dims = config.dimensions;
    this.sendDimensions = config.sendDimensions ?? true;
    this.providerName = config.provider || "openai";
    this.proxyUrl = config.proxyUrl?.trim() || undefined;
    this.maxInputChars = config.maxInputChars && config.maxInputChars > 0 ? config.maxInputChars : undefined;
    this.timeoutMs = config.timeoutMs && config.timeoutMs > 0 ? config.timeoutMs : DEFAULT_API_TIMEOUT_MS;
    this.logger = logger;
  }

  getDimensions(): number {
    return this.dims;
  }

  getProviderInfo(): EmbeddingProviderInfo {

View on GitHub (pinned to 3efcd317b8)

Solutions

  1. Set config.dimensions to a positive integer matching the model's embedding size (e.g. 1536 for text-embedding-3-small)
  2. Guard the value before construction: if (!dims || dims <= 0) fail early in your own config loading
  3. If dimensions are unknown, configure them explicitly per the provider docs rather than leaving 0

Example fix

// before
new EmbeddingService({ apiKey: key, baseUrl: url, model: 'text-embedding-3-small', dimensions: 0 })
// after
new EmbeddingService({ apiKey: key, baseUrl: url, model: 'text-embedding-3-small', dimensions: 1536 })
Defensive patterns

Strategy: validation

Validate before calling

const dims = config?.dimensions;
if (!Number.isInteger(dims) || dims <= 0) {
  throw new Error(`embedding dimensions must be a positive integer, got ${dims}`);
}

Type guard

function hasPositiveDimensions(cfg): cfg is OpenAIEmbeddingConfig & { dimensions: number } {
  return typeof cfg?.dimensions === 'number' && Number.isInteger(cfg.dimensions) && cfg.dimensions > 0;
}

Try / catch

try {
  svc = new EmbeddingService(config, logger);
} catch (e) {
  if (String(e.message).includes('dimensions is required')) {
    throw new ConfigError(`dimensions must be a positive integer, got: ${config?.dimensions}`);
  }
  throw e;
}

Prevention

When it happens

Trigger: `new EmbeddingService(config)` where config.dimensions is undefined, 0, negative, or otherwise <= 0, with apiKey/baseUrl/model otherwise valid.

Common situations: Config JSON where dimensions was omitted or left at 0 pending 'auto-detect', computing dimensions from a variable that defaulted to 0, or copying config between models with different dimensionalities.

Related errors


AI-assisted analysis of TencentCloud/TencentDB-Agent-Memory@3efcd317b8 (2026-09-01). Data as JSON: /api/errors/d08fdabb5c06d495. Report an issue: GitHub.