{"record":{"id":"d08fdabb5c06d495","repo":"TencentCloud/TencentDB-Agent-Memory","slug":"embeddingservice-dimensions-is-required-for-remot","errorCode":null,"errorMessage":"EmbeddingService: dimensions is required for remote provider (must be a positive integer)","messagePattern":"EmbeddingService: dimensions is required for remote provider \\(must be a positive integer\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"MemoryCore/src/core/store/embedding.ts","lineNumber":425,"sourceCode":"  private readonly sendDimensions: boolean;\n  private readonly providerName: string;\n  private readonly proxyUrl?: string;\n  private readonly maxInputChars?: number;\n  private readonly timeoutMs: number;\n  private readonly logger?: Logger;\n\n  constructor(config: OpenAIEmbeddingConfig, logger?: Logger) {\n    if (!config.apiKey) {\n      throw new Error(\"EmbeddingService: apiKey is required for remote provider\");\n    }\n    if (!config.baseUrl) {\n      throw new Error(\"EmbeddingService: baseUrl is required for remote provider\");\n    }\n    if (!config.model) {\n      throw new Error(\"EmbeddingService: model is required for remote provider\");\n    }\n    if (!config.dimensions || config.dimensions <= 0) {\n      throw new Error(\"EmbeddingService: dimensions is required for remote provider (must be a positive integer)\");\n    }\n    this.baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n    this.apiKey = config.apiKey;\n    this.model = config.model;\n    this.dims = config.dimensions;\n    this.sendDimensions = config.sendDimensions ?? true;\n    this.providerName = config.provider || \"openai\";\n    this.proxyUrl = config.proxyUrl?.trim() || undefined;\n    this.maxInputChars = config.maxInputChars && config.maxInputChars > 0 ? config.maxInputChars : undefined;\n    this.timeoutMs = config.timeoutMs && config.timeoutMs > 0 ? config.timeoutMs : DEFAULT_API_TIMEOUT_MS;\n    this.logger = logger;\n  }\n\n  getDimensions(): number {\n    return this.dims;\n  }\n\n  getProviderInfo(): EmbeddingProviderInfo {","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/TencentCloud/TencentDB-Agent-Memory/blob/3efcd317b84146d6a08518ac0f7ee7c8a8d200ec/MemoryCore/src/core/store/embedding.ts#L407-L443","documentation":"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.","triggerScenarios":"`new EmbeddingService(config)` where config.dimensions is undefined, 0, negative, or otherwise <= 0, with apiKey/baseUrl/model otherwise valid.","commonSituations":"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.","solutions":["Set config.dimensions to a positive integer matching the model's embedding size (e.g. 1536 for text-embedding-3-small)","Guard the value before construction: if (!dims || dims <= 0) fail early in your own config loading","If dimensions are unknown, configure them explicitly per the provider docs rather than leaving 0"],"exampleFix":"// before\nnew EmbeddingService({ apiKey: key, baseUrl: url, model: 'text-embedding-3-small', dimensions: 0 })\n// after\nnew EmbeddingService({ apiKey: key, baseUrl: url, model: 'text-embedding-3-small', dimensions: 1536 })","handlingStrategy":"validation","validationCode":"const dims = config?.dimensions;\nif (!Number.isInteger(dims) || dims <= 0) {\n  throw new Error(`embedding dimensions must be a positive integer, got ${dims}`);\n}","typeGuard":"function hasPositiveDimensions(cfg): cfg is OpenAIEmbeddingConfig & { dimensions: number } {\n  return typeof cfg?.dimensions === 'number' && Number.isInteger(cfg.dimensions) && cfg.dimensions > 0;\n}","tryCatchPattern":"try {\n  svc = new EmbeddingService(config, logger);\n} catch (e) {\n  if (String(e.message).includes('dimensions is required')) {\n    throw new ConfigError(`dimensions must be a positive integer, got: ${config?.dimensions}`);\n  }\n  throw e;\n}","preventionTips":["Map each model name to its known dimensionality in a lookup table","Never leave dimension values at 0 as a placeholder in config files","Validate the whole config object once at startup"],"tags":["configuration","constructor","embedding","validation"],"backgroundTag":"missing-config-field","analyzedSha":"3efcd317b84146d6a08518ac0f7ee7c8a8d200ec","analyzedAt":"2026-09-01T05:44:22.276Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}