{"record":{"id":"664ca7d3ab557dc2","repo":"mem0ai/mem0","slug":"vector-at-index-idx-has-dimension-len-vec-bu","errorCode":null,"errorMessage":"Vector at index {idx} has dimension {len(vec)}, but the index '{self.collection_name}' expects dimension {self.embedding_model_dims}. Ensure your embedding model's output dimensions match the vector store configuration.","messagePattern":"Vector at index (.+?) has dimension (.+?), but the index '(.+?)' expects dimension (.+?)\\. Ensure your embedding model's output dimensions match the vector store configuration\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mem0/vector_stores/opensearch.py","lineNumber":175,"sourceCode":"            ids = [str(i) for i in range(len(vectors))]\n\n        if payloads is None:\n            payloads = [{} for _ in range(len(vectors))]\n\n        for idx, vec in enumerate(vectors):\n            if vec is None:\n                raise ValueError(\n                    f\"Vector at index {idx} is null. \"\n                    f\"This usually means the embedding model failed to generate an embedding. \"\n                    f\"Check that your embedding model is configured correctly and returning valid vectors.\"\n                )\n            if len(vec) == 0:\n                raise ValueError(\n                    f\"Vector at index {idx} is empty. \"\n                    f\"Expected a vector of dimension {self.embedding_model_dims}, got an empty vector.\"\n                )\n            if len(vec) != self.embedding_model_dims:\n                raise ValueError(\n                    f\"Vector at index {idx} has dimension {len(vec)}, \"\n                    f\"but the index '{self.collection_name}' expects dimension {self.embedding_model_dims}. \"\n                    f\"Ensure your embedding model's output dimensions match the vector store configuration.\"\n                )\n\n        results = []\n        for i, (vec, id_) in enumerate(zip(vectors, ids)):\n            body = {\n                \"vector_field\": vec,\n                \"payload\": payloads[i],\n                \"id\": id_,\n            }\n            try:\n                self.client.index(index=self.collection_name, body=body)\n\n                results.append(\n                    OutputData(\n                        id=id_,","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/mem0ai/mem0/blob/001c235229be8795e3834520467bd0d661ed8f34/mem0/vector_stores/opensearch.py#L157-L193","documentation":"insert() verifies each vector's length against embedding_model_dims (the dimension the index was created with). A mismatch means the embedding model or its dimensions setting changed relative to the index schema — OpenSearch's knn_vector field has a fixed dimension, so the write would fail server-side anyway.","triggerScenarios":"Index created with dims=1536 (OpenAI ada) but inserting vectors from a 768-dim model (e.g. sentence-transformers), or vice versa; config drift where embedding.model.dimensions no longer matches vector_store.embedding_model_dims; switching embedding providers without recreating the index.","commonSituations":"Changing LLM/embedding provider in config while reusing an existing index; local dev with a small model against a prod-configured index; copying config between environments with different models.","solutions":["Align dims: set embedding and vector_store dimension configs to the model's true output size","If the index was created with the wrong dimension, delete and recreate it (data must be re-embedded)","Pin the embedding model version in config so dimension cannot drift silently"],"exampleFix":"# before\nembedding={\"provider\":\"openai\",\"config\":{\"model\":\"text-embedding-3-small\"}},  # 1536\nvector_store={\"provider\":\"opensearch\",\"config\":{\"embedding_model_dims\":768}}\n\n# after\nembedding={\"provider\":\"openai\",\"config\":{\"model\":\"text-embedding-3-small\"}},\nvector_store={\"provider\":\"opensearch\",\"config\":{\"embedding_model_dims\":1536}}","handlingStrategy":"type-guard","validationCode":"DIMS = 1536  # must equal index embedding_model_dims\nbad = [i for i, v in enumerate(vectors) if len(v) != DIMS]\nif bad:\n    raise ValueError(f\"dimension mismatch at {bad}; expected {DIMS}\")\nstore.insert(vectors=vectors, payloads=payloads, ids=ids)","typeGuard":"def dims_match(vectors, dims: int) -> bool:\n    return all(v is not None and len(v) == dims for v in vectors)","tryCatchPattern":"try:\n    store.insert(vectors, payloads, ids)\nexcept ValueError as e:\n    if \"has dimension\" in str(e):\n        raise ConfigError(\"embedding model dims != index dims; recreate index or fix config\")\n    raise","preventionTips":["Set embedding and vector_store dims from one shared config value","Recreate (delete + rebuild) the index whenever the embedding model changes","Add a startup assertion comparing model output size to embedding_model_dims"],"tags":["opensearch","dimension-mismatch","configuration","embeddings"],"backgroundTag":null,"analyzedSha":"001c235229be8795e3834520467bd0d661ed8f34","analyzedAt":"2026-08-15T01:55:42.685Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}