{"record":{"id":"fa774d7adb319f01","repo":"microsoft/semantic-kernel","slug":"get-without-keys-is-not-yet-implemented","errorCode":null,"errorMessage":"Get without keys is not yet implemented.","messagePattern":"Get without keys is not yet implemented\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/azure_cosmos_db.py","lineNumber":751,"sourceCode":"    async def _inner_upsert(\n        self,\n        records: Sequence[Any],\n        **kwargs: Any,\n    ) -> Sequence[TNoSQLKey]:\n        container_proxy = await self._get_container_proxy(self.collection_name, **kwargs)\n        results = await asyncio.gather(*(container_proxy.upsert_item(record) for record in records))\n        return [result[COSMOS_ITEM_ID_PROPERTY_NAME] for result in results]\n\n    @override\n    async def _inner_get(  # type: ignore\n        self,\n        keys: Sequence[TNoSQLKey] | None = None,\n        options: GetFilteredRecordOptions | None = None,\n        **kwargs: Any,\n    ) -> Sequence[Any] | None:\n        if not keys:\n            if options is not None:\n                raise NotImplementedError(\"Get without keys is not yet implemented.\")\n            return None\n        include_vectors = kwargs.pop(\"include_vectors\", False)\n        query = (\n            f\"SELECT {self._build_select_clause(include_vectors)} FROM c WHERE \"  # nosec: B608\n            f\"c.id IN ({', '.join([f'@id{i}' for i in range(len(keys))])})\"  # nosec: B608\n        )  # nosec: B608\n        parameters: list[dict[str, Any]] = [{\"name\": f\"@id{i}\", \"value\": _get_key(key)} for i, key in enumerate(keys)]\n\n        container_proxy = await self._get_container_proxy(self.collection_name, **kwargs)\n        return [item async for item in container_proxy.query_items(query=query, parameters=parameters)]\n\n    @override\n    async def _inner_delete(self, keys: Sequence[TNoSQLKey], **kwargs: Any) -> None:  # type: ignore\n        container_proxy = await self._get_container_proxy(self.collection_name, **kwargs)\n        results = await asyncio.gather(\n            *[container_proxy.delete_item(item=_get_key(key), partition_key=_get_partition_key(key)) for key in keys],\n            return_exceptions=True,\n        )","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/azure_cosmos_db.py#L733-L769","documentation":"CosmosNoSqlCollection._inner_get requires either explicit keys or a None options value. Passing GetFilteredRecordOptions without keys is not supported by this connector, so it raises NotImplementedError. With keys=None and options=None it returns None (no-op).","triggerScenarios":"Raised in _inner_get when keys is falsy AND options is not None. Triggered when a caller calls collection.get(options=GetFilteredRecordOptions(...)) without supplying keys, expecting filtered scan behavior the NoSQL connector does not implement.","commonSituations":"Assuming filtered-record scan works the same as in another connector (e.g. one that supports query-by-filter). Porting code that used get(options=...) elsewhere. Misunderstanding that this collection is key-oriented.","solutions":["Always pass keys= to collection.get on CosmosNoSqlCollection.","For filtered queries, use the search/query path instead of get.","If you only need existence, pass keys and check the returned sequence."],"exampleFix":"// before\nrows = await collection.get(options=GetFilteredRecordOptions(...))\n// after\nrows = await collection.get(keys=[\"id1\",\"id2\"])","handlingStrategy":"validation","validationCode":"if not keys and options is not None:\n    raise ValueError(\"CosmosNoSqlCollection.get requires keys when options are provided\")\nrows = await collection.get(keys=keys)\n","typeGuard":"def is_valid_get_call(keys, options) -> bool:\n    return bool(keys) or options is None\n","tryCatchPattern":null,"preventionTips":["Always pass keys to collection.get on NoSQL collections.","Use the search API for filter-based queries, not get.","Document the per-connector get() contract in your codebase."],"tags":["azure-cosmos-db","vector-store","api-contract","not-implemented"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}