microsoft/semantic-kernel · error · ContentException

Item ID is required for ConversationItemDeleteEvent

Error message

Item ID is required for ConversationItemDeleteEvent

What it means

The OpenAI Realtime API's conversation.item.delete event requires an 'item_id' string identifying which conversation item to remove. The event factory raises ContentException if 'item_id' is not in kwargs when event_type is SendEvents.CONVERSATION_ITEM_DELETE.

Source

Thrown at python/semantic_kernel/connectors/ai/open_ai/services/_open_ai_realtime.py:211

            return InputAudioBufferClearEvent(
                type=event_type.value,
                **kwargs,
            )
        case SendEvents.CONVERSATION_ITEM_CREATE:
            if "item" not in kwargs:
                raise ContentException("Item is required for ConversationItemCreateEvent")
            kwargs["type"] = event_type.value
            return ConversationItemCreateEvent(**kwargs)
        case SendEvents.CONVERSATION_ITEM_TRUNCATE:
            if "content_index" not in kwargs:
                kwargs["content_index"] = 0
            return ConversationItemTruncateEvent(
                type=event_type.value,
                **kwargs,
            )
        case SendEvents.CONVERSATION_ITEM_DELETE:
            if "item_id" not in kwargs:
                raise ContentException("Item ID is required for ConversationItemDeleteEvent")
            return ConversationItemDeleteEvent(
                type=event_type.value,
                **kwargs,
            )
        case SendEvents.RESPONSE_CREATE:
            if "response" in kwargs:
                response: RealtimeResponseCreateParams | None = RealtimeResponseCreateParams.model_validate(
                    kwargs.pop("response")
                )
            else:
                response = None
            return ResponseCreateEvent(
                type=event_type.value,
                response=response,
                **kwargs,
            )
        case SendEvents.RESPONSE_CANCEL:
            return ResponseCancelEvent(

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Always provide the item_id: send(SendEvents.CONVERSATION_ITEM_DELETE, item_id='item_abc123').
  2. Capture and store item IDs from the server's conversation.item.created events so they are available for deletion.
  3. Validate item_id is non-empty before sending the delete.

Example fix

// before
await service.send(SendEvents.CONVERSATION_ITEM_DELETE)
// after
await service.send(SendEvents.CONVERSATION_ITEM_DELETE, item_id=item_id_from_created_event)
Defensive patterns

Strategy: validation

Validate before calling

def validate_conversation_item_delete_kwargs(kwargs: dict) -> None:
    if 'item_id' not in kwargs:
        raise ValueError('CONVERSATION_ITEM_DELETE requires an item_id kwarg')
    if not isinstance(kwargs['item_id'], str) or not kwargs['item_id']:
        raise ValueError('item_id must be a non-empty string')

Type guard

def has_valid_item_id_kwarg(kwargs: dict) -> bool:
    return 'item_id' in kwargs and isinstance(kwargs['item_id'], str) and kwargs['item_id']

Try / catch

from semantic_kernel.exceptions import ContentException

if item_id:  # guard before sending
    try:
        await service.send(SendEvents.CONVERSATION_ITEM_DELETE, item_id=item_id)
    except ContentException:
        pass  # item_id invalid, skip delete

Prevention

When it happens

Trigger: Calling send(SendEvents.CONVERSATION_ITEM_DELETE) without 'item_id' — e.g. trying to delete by index, or forgetting to capture the item ID from the conversation.item.created server event.

Common situations: Building a delete event from a UI interaction where the item_id wasn't propagated; assuming the API deletes the last item if no ID is given (it doesn't); using a stale or empty item reference.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/fb0e450c5a7c5c9f. Report an issue: GitHub.