{"record":{"id":"fb0e450c5a7c5c9f","repo":"microsoft/semantic-kernel","slug":"item-id-is-required-for-conversationitemdeleteeven","errorCode":null,"errorMessage":"Item ID is required for ConversationItemDeleteEvent","messagePattern":"Item ID is required for ConversationItemDeleteEvent","errorType":"exception","errorClass":"ContentException","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/connectors/ai/open_ai/services/_open_ai_realtime.py","lineNumber":211,"sourceCode":"            return InputAudioBufferClearEvent(\n                type=event_type.value,\n                **kwargs,\n            )\n        case SendEvents.CONVERSATION_ITEM_CREATE:\n            if \"item\" not in kwargs:\n                raise ContentException(\"Item is required for ConversationItemCreateEvent\")\n            kwargs[\"type\"] = event_type.value\n            return ConversationItemCreateEvent(**kwargs)\n        case SendEvents.CONVERSATION_ITEM_TRUNCATE:\n            if \"content_index\" not in kwargs:\n                kwargs[\"content_index\"] = 0\n            return ConversationItemTruncateEvent(\n                type=event_type.value,\n                **kwargs,\n            )\n        case SendEvents.CONVERSATION_ITEM_DELETE:\n            if \"item_id\" not in kwargs:\n                raise ContentException(\"Item ID is required for ConversationItemDeleteEvent\")\n            return ConversationItemDeleteEvent(\n                type=event_type.value,\n                **kwargs,\n            )\n        case SendEvents.RESPONSE_CREATE:\n            if \"response\" in kwargs:\n                response: RealtimeResponseCreateParams | None = RealtimeResponseCreateParams.model_validate(\n                    kwargs.pop(\"response\")\n                )\n            else:\n                response = None\n            return ResponseCreateEvent(\n                type=event_type.value,\n                response=response,\n                **kwargs,\n            )\n        case SendEvents.RESPONSE_CANCEL:\n            return ResponseCancelEvent(","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/connectors/ai/open_ai/services/_open_ai_realtime.py#L193-L229","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nawait service.send(SendEvents.CONVERSATION_ITEM_DELETE)\n// after\nawait service.send(SendEvents.CONVERSATION_ITEM_DELETE, item_id=item_id_from_created_event)","handlingStrategy":"validation","validationCode":"def validate_conversation_item_delete_kwargs(kwargs: dict) -> None:\n    if 'item_id' not in kwargs:\n        raise ValueError('CONVERSATION_ITEM_DELETE requires an item_id kwarg')\n    if not isinstance(kwargs['item_id'], str) or not kwargs['item_id']:\n        raise ValueError('item_id must be a non-empty string')","typeGuard":"def has_valid_item_id_kwarg(kwargs: dict) -> bool:\n    return 'item_id' in kwargs and isinstance(kwargs['item_id'], str) and kwargs['item_id']","tryCatchPattern":"from semantic_kernel.exceptions import ContentException\n\nif item_id:  # guard before sending\n    try:\n        await service.send(SendEvents.CONVERSATION_ITEM_DELETE, item_id=item_id)\n    except ContentException:\n        pass  # item_id invalid, skip delete","preventionTips":["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."],"tags":["openai","realtime","conversation","semantic-kernel"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}