{"record":{"id":"9709f279643c4b0f","repo":"microsoft/semantic-kernel","slug":"agent-does-not-exist-please-create-the-agent-befo-9709f2","errorCode":null,"errorMessage":"Agent does not exist. Please create the agent before deleting it.","messagePattern":"Agent does not exist\\. Please create the agent before deleting it\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/semantic_kernel/agents/bedrock/bedrock_agent_base.py","lineNumber":127,"sourceCode":"                    self.bedrock_client.prepare_agent,\n                    agentId=self.agent_model.agent_id,\n                ),\n            )\n\n            # The agent will take some time to enter the PREPARING status after the prepare operation is called.\n            # We need to wait for the agent to reach the PREPARING status before we can proceed, otherwise we\n            # will return immediately if the agent is already in PREPARED status.\n            await self._wait_for_agent_status(BedrockAgentStatus.PREPARING)\n            # The agent will enter the PREPARED status when the preparation is complete.\n            await self._wait_for_agent_status(BedrockAgentStatus.PREPARED)\n        except ClientError as e:\n            logger.error(f\"Failed to prepare agent {self.agent_model.agent_id}.\")\n            raise e\n\n    async def delete_agent(self, **kwargs) -> None:\n        \"\"\"Delete an agent asynchronously.\"\"\"\n        if not self.agent_model.agent_id:\n            raise ValueError(\"Agent does not exist. Please create the agent before deleting it.\")\n\n        try:\n            await run_in_executor(\n                None,\n                partial(\n                    self.bedrock_client.delete_agent,\n                    agentId=self.agent_model.agent_id,\n                    **kwargs,\n                ),\n            )\n\n            self.agent_model.agent_id = None\n        except ClientError as e:\n            logger.error(f\"Failed to delete agent {self.agent_model.agent_id}.\")\n            raise e\n\n    async def _get_agent(self) -> None:\n        \"\"\"Get an agent.\"\"\"","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/python/semantic_kernel/agents/bedrock/bedrock_agent_base.py#L109-L145","documentation":"Raised by delete_agent when self.agent_model.agent_id is falsy. The delete_agent boto3 call needs an agentId; without one there is nothing to delete. Occurs when delete_agent is called on a BedrockAgent that was never created or was already deleted (agent_id is set to None after a successful delete).","triggerScenarios":"Triggered when calling delete_agent() on an agent whose agent_model.agent_id is None/empty — e.g. a manually constructed agent, or calling delete twice (the first call sets agent_id = None at line 139).","commonSituations":"Double-deleting an agent (second call fails because agent_id was nulled); deleting a manually-constructed agent that was never provisioned; cleanup code that runs unconditionally.","solutions":["Guard the delete call: if agent.agent_model.agent_id: await agent.delete_agent().","Avoid calling delete_agent twice; after the first successful call agent_id is None.","Only call delete on agents created via create_and_prepare_agent or loaded with a valid agent_id."],"exampleFix":"// before\nawait agent.delete_agent()  # first call succeeds, sets agent_id=None\nawait agent.delete_agent()  # second call raises\n\n// after\nif agent.agent_model.agent_id:\n    await agent.delete_agent()","handlingStrategy":"validation","validationCode":"def safe_delete(agent) -> bool:\n    return bool(agent.agent_model.agent_id)\n\n# usage\nif safe_delete(agent):\n    await agent.delete_agent()","typeGuard":"def agent_has_id(agent) -> bool:\n    return bool(getattr(getattr(agent, \"agent_model\", None), \"agent_id\", None))","tryCatchPattern":"try:\n    await agent.delete_agent()\nexcept ValueError as e:\n    if \"create the agent before deleting\" in str(e):\n        # already deleted or never created; safe to ignore\n        pass\n    else:\n        raise","preventionTips":["Guard delete_agent with an agent_id check to avoid double-delete errors.","Track deletion state externally so cleanup code does not call delete twice.","Only delete agents created via create_and_prepare_agent or loaded with a real agent_id."],"tags":["bedrock","agent-management","missing-agent-id","delete","validation"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}