{"record":{"id":"fa2bb4d691f8950e","repo":"mem0ai/mem0","slug":"vector-at-index-index-is-empty-expected-dimens","errorCode":null,"errorMessage":"Vector at index ${index} is empty. Expected dimension ${this.embeddingModelDims}.","messagePattern":"Vector at index (.+?) is empty\\. Expected dimension (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"mem0-ts/src/oss/src/vector_stores/opensearch.ts","lineNumber":216,"sourceCode":"\n    await this.client.indices.create({\n      index: \"memory_migrations\",\n      body: {\n        mappings: {\n          properties: {\n            user_id: { type: \"keyword\" },\n          },\n        },\n      },\n    });\n  }\n\n  private validateVector(vector: number[], index: number): void {\n    if (!vector) {\n      throw new Error(`Vector at index ${index} is null or undefined.`);\n    }\n    if (vector.length === 0) {\n      throw new Error(\n        `Vector at index ${index} is empty. Expected dimension ${this.embeddingModelDims}.`,\n      );\n    }\n    if (vector.length !== this.embeddingModelDims) {\n      throw new Error(\n        `Vector at index ${index} has dimension ${vector.length}, but index ` +\n          `'${this.collectionName}' expects dimension ${this.embeddingModelDims}.`,\n      );\n    }\n  }\n\n  async insert(\n    vectors: number[][],\n    ids: string[],\n    payloads: Record<string, any>[],\n  ): Promise<void> {\n    await this.initialize();\n    vectors.forEach((vector, index) => this.validateVector(vector, index));","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0-ts/src/oss/src/vector_stores/opensearch.ts#L198-L234","documentation":"Before inserting into OpenSearch, each vector is checked for a non-zero length. An empty array means the embedding call returned no components (for example an empty-string input or a broken provider response), and OpenSearch would reject the document with a less clear mapping error, so the store raises this explicit message naming the index position and expected dimension.","triggerScenarios":"Passing vectors[i] === [] — e.g. an embedding provider returned an empty vector for an empty/whitespace document, or a placeholder was never filled.","commonSituations":"Embedding empty strings or skipped documents; test fixtures with empty arrays; providers that return [] on rate-limit or content-filter instead of throwing.","solutions":["Skip or reject empty documents before embedding so providers never receive them.","Validate embedding responses: if emb.length === 0 throw or retry at the embedding layer.","Log the failing index from the message and inspect that input document."],"exampleFix":"// before\nconst embs = docs.map(d => embed(d)); // some empty string -> []\nawait store.insert(embs, ids, payloads);\n\n// after\nconst embs = docs.map(d => d.trim() ? embed(d) : null);\nif (embs.some(e => !e || e.length === 0)) throw new Error('empty embedding');","handlingStrategy":"validation","validationCode":"if (vectors.some((v) => Array.isArray(v) && v.length === 0)) {\n  throw new Error('Empty embedding vector produced; check embedding inputs');\n}","typeGuard":"const isNonEmptyVector = (v: unknown): v is number[] => Array.isArray(v) && v.length > 0;","tryCatchPattern":null,"preventionTips":["Skip empty/whitespace documents before embedding","Assert embedding response length matches the model dimension","Fail loudly at the embedding layer"],"tags":["opensearch","embeddings","validation","typescript"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}