microsoft/semantic-kernel · error · VectorStoreOperationException
Failed to delete item(s).
Error message
Failed to delete item(s).
What it means
CosmosNoSqlCollection._inner_delete deletes items concurrently with asyncio.gather(..., return_exceptions=True), then collects any exceptions. If one or more deletes failed, it raises VectorStoreOperationException with the gathered exceptions attached. Partial failure is possible: some items may have been deleted.
Source
Thrown at python/semantic_kernel/connectors/azure_cosmos_db.py:772
query = (
f"SELECT {self._build_select_clause(include_vectors)} FROM c WHERE " # nosec: B608
f"c.id IN ({', '.join([f'@id{i}' for i in range(len(keys))])})" # nosec: B608
) # nosec: B608
parameters: list[dict[str, Any]] = [{"name": f"@id{i}", "value": _get_key(key)} for i, key in enumerate(keys)]
container_proxy = await self._get_container_proxy(self.collection_name, **kwargs)
return [item async for item in container_proxy.query_items(query=query, parameters=parameters)]
@override
async def _inner_delete(self, keys: Sequence[TNoSQLKey], **kwargs: Any) -> None: # type: ignore
container_proxy = await self._get_container_proxy(self.collection_name, **kwargs)
results = await asyncio.gather(
*[container_proxy.delete_item(item=_get_key(key), partition_key=_get_partition_key(key)) for key in keys],
return_exceptions=True,
)
exceptions = [result for result in results if isinstance(result, Exception)]
if exceptions:
raise VectorStoreOperationException("Failed to delete item(s).", exceptions)
@override
async def _inner_search(
self,
search_type: SearchType,
options: VectorSearchOptions,
values: Any | None = None,
vector: Sequence[float | int] | None = None,
**kwargs: Any,
) -> KernelSearchResults[VectorSearchResult[TModel]]:
params = [{"name": "@top", "value": options.top}]
vector_field = self.definition.try_get_vector_field(options.vector_property_name)
if not vector_field:
raise VectorStoreModelException(
f"Vector field '{options.vector_property_name}' not found in the data model definition."
)
if not vector:
vector = await self._generate_vector_from_values(values, options)View on GitHub (pinned to c028a0c7dc)
Solutions
- Inspect the 'exceptions' list attached to the error to see which keys failed and why.
- For 'not found' errors, decide whether to treat as success (idempotent delete) or report upstream.
- Retry the failed keys with exponential backoff for transient (429/network) errors.
- Verify _get_partition_key produces the correct partition key for each record.
Defensive patterns
Strategy: try-catch
Try / catch
try:
await collection.delete(keys=keys)
except VectorStoreOperationException as e:
excs = e.args[1] if len(e.args) > 1 else []
# classify per-key failures; retry transient ones; treat 'not found' as success if idempotent
Prevention
- Make deletes idempotent: tolerate 'not found' as success.
- Batch deletes below throttling thresholds or retry on 429.
- Verify partition-key derivation matches the container's partition scheme.
When it happens
Trigger: Raised in _inner_delete when at least one of the per-key delete_item calls raised. Causes: key not found (CosmosResourceNotFoundError), partition key mismatch, throttling (429), auth failure, network error.
Common situations: Deleting keys that don't exist. Wrong partition key derivation (_get_partition_key). Throttling under concurrent deletes. Transient network errors. Auth token expiry mid-batch.
Related errors
- Failed to search the collection.
- Failed to check if database '{self.database_name}' exists, w
- Failed to get database proxy for '{id}'.
- Failed to get container proxy for '{container_name}'.
- Distance function '{field.distance_function}' is not support
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/c8fa991ee6dd2621.
Report an issue: GitHub.