{"record":{"id":"e574d8812aad014c","repo":"microsoft/semantic-kernel","slug":"vectorembeddings-cannot-be-null-or-empty-in-the-ve","errorCode":null,"errorMessage":"vectorEmbeddings cannot be null or empty in the vector_embedding_policy.","messagePattern":"vectorEmbeddings cannot be null or empty in the vector_embedding_policy\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/memory_stores/azure_cosmosdb_no_sql/azure_cosmosdb_no_sql_memory_store.py","lineNumber":51,"sourceCode":"    partition_key: str = None\n    vector_embedding_policy: dict[str, Any] | None = None\n    indexing_policy: dict[str, Any] | None = None\n    cosmos_container_properties: dict[str, Any] | None = None\n\n    def __init__(\n        self,\n        cosmos_client: CosmosClient,\n        database_name: str,\n        partition_key: str,\n        vector_embedding_policy: dict[str, Any] | None = None,\n        indexing_policy: dict[str, Any] | None = None,\n        cosmos_container_properties: dict[str, Any] | None = None,\n    ):\n        \"\"\"Initializes a new instance of the AzureCosmosDBNoSQLMemoryStore class.\"\"\"\n        if indexing_policy[\"vectorIndexes\"] is None or len(indexing_policy[\"vectorIndexes\"]) == 0:\n            raise ValueError(\"vectorIndexes cannot be null or empty in the indexing_policy.\")\n        if vector_embedding_policy is None or len(vector_embedding_policy[\"vectorEmbeddings\"]) == 0:\n            raise ValueError(\"vectorEmbeddings cannot be null or empty in the vector_embedding_policy.\")\n\n        self.cosmos_client = cosmos_client\n        self.database_name = database_name\n        self.partition_key = partition_key\n        self.vector_embedding_policy = vector_embedding_policy\n        self.indexing_policy = indexing_policy\n        self.cosmos_container_properties = cosmos_container_properties\n\n    @override\n    async def create_collection(self, collection_name: str) -> None:\n        # Create the database if it already doesn't exist\n        self.database = await self.cosmos_client.create_database_if_not_exists(id=self.database_name)\n\n        # Create the collection if it already doesn't exist\n        self.container = await self.database.create_container_if_not_exists(\n            id=collection_name,\n            partition_key=self.cosmos_container_properties[\"partition_key\"],\n            indexing_policy=self.indexing_policy,","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/memory_stores/azure_cosmosdb_no_sql/azure_cosmosdb_no_sql_memory_store.py#L33-L69","documentation":"Raised in AzureCosmosDBNoSQLMemoryStore.__init__ when vector_embedding_policy is None or its 'vectorEmbeddings' key maps to an empty list. The vectorEmbeddings array defines the embedding path, dimensions, and data type that Cosmos DB uses to index and search vectors. This check runs after the vectorIndexes check (line 48), so if both policies are invalid you see the vectorIndexes error first.","triggerScenarios":"Constructing AzureCosmosDBNoSQLMemoryStore with vector_embedding_policy=None (the default) or vector_embedding_policy={'vectorEmbeddings': []}. Because the None branch short-circuits with 'or' before subscripting, passing None does reach the ValueError rather than a TypeError here.","commonSituations":"Forgetting to pass vector_embedding_policy because it defaults to None. Providing a policy dict from a config file where the vectorEmbeddings array was stripped or never populated. Dimension/path mismatch between the embedding policy and the indexing policy.","solutions":["Pass a vector_embedding_policy with a populated vectorEmbeddings list, e.g. {'vectorEmbeddings': [{'path': '/embedding', 'dataType': 'float32', 'dimensions': 1536, 'distanceFunction': 'cosine'}]}.","Make sure 'dimensions' matches the output dimension of your embedding model and 'path' matches the indexing_policy vectorIndexes path.","If building the policy from env/config, validate the dict shape before passing it to the constructor.","Migrate to the non-deprecated AzureCosmosDBNoSQLStore / Collection classes recommended by the @deprecated marker."],"exampleFix":"// before\nstore = AzureCosmosDBNoSQLMemoryStore(\n    cosmos_client=client,\n    database_name='db',\n    partition_key='/pk',\n    vector_embedding_policy=None,  # triggers ValueError\n    indexing_policy={'vectorIndexes': [{'path': '/embedding', 'type': 'diskANN'}]},\n)\n// after\nvector_embedding_policy = {\n    'vectorEmbeddings': [{\n        'path': '/embedding',\n        'dataType': 'float32',\n        'dimensions': 1536,\n        'distanceFunction': 'cosine',\n    }]\n}\nstore = AzureCosmosDBNoSQLMemoryStore(\n    cosmos_client=client,\n    database_name='db',\n    partition_key='/pk',\n    vector_embedding_policy=vector_embedding_policy,\n    indexing_policy={'vectorIndexes': [{'path': '/embedding', 'type': 'diskANN'}]},\n)","handlingStrategy":"validation","validationCode":"def validate_vector_embedding_policy(policy: dict | None) -> None:\n    if policy is None:\n        raise ValueError('vector_embedding_policy must not be None')\n    ve = policy.get('vectorEmbeddings')\n    if ve is None or len(ve) == 0:\n        raise ValueError('vector_embedding_policy[\"vectorEmbeddings\"] must be non-empty')\n\nvalidate_vector_embedding_policy(vector_embedding_policy)","typeGuard":"from typing import Any\n\ndef is_valid_vector_embedding_policy(policy: Any) -> bool:\n    return (\n        isinstance(policy, dict)\n        and isinstance(policy.get('vectorEmbeddings'), list)\n        and len(policy['vectorEmbeddings']) > 0\n    )","tryCatchPattern":"try:\n    store = AzureCosmosDBNoSQLMemoryStore(\n        ..., vector_embedding_policy=vector_embedding_policy\n    )\nexcept ValueError as e:\n    logging.error('Invalid vector embedding policy: %s', e)\n    raise","preventionTips":["Never leave vector_embedding_policy as the default None.","Ensure dimensions match your embedding model output.","Validate the policy dict in config-loading code.","Align the embedding path with the indexing_policy vectorIndexes path."],"tags":["azure-cosmosdb","vector-search","configuration","validation","python"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}