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
- Always provide the item_id: send(SendEvents.CONVERSATION_ITEM_DELETE, item_id='item_abc123').
- Capture and store item IDs from the server's conversation.item.created events so they are available for deletion.
- 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
- Store item IDs from conversation.item.created server events in a registry.
- Validate item_id is non-empty before sending delete events.
- Handle the case gracefully if the item was already deleted server-side.
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
- Item is required for ConversationItemCreateEvent
- Session is required for SessionUpdateEvent
- Audio is required for InputAudioBufferAppendEvent
- Audio track not initialized
- OpenAI WebRTC error: {error_text}
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/fb0e450c5a7c5c9f.
Report an issue: GitHub.