From 20e42863821fc5d6cc2a98b4b77784265cdb8406 Mon Sep 17 00:00:00 2001 From: Ari Webb Date: Wed, 14 Jan 2026 10:40:30 -0800 Subject: [PATCH] fix: allow re-enable sleeptime after deleted [LET-6553] (#8680) fix: allow re-enable sleeptime after deleted --- letta/services/agent_manager.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/letta/services/agent_manager.py b/letta/services/agent_manager.py index c18da34a..20341478 100644 --- a/letta/services/agent_manager.py +++ b/letta/services/agent_manager.py @@ -1241,9 +1241,34 @@ class AgentManager: agent = await AgentModel.read_async(db_session=session, identifier=agent_id, actor=actor) agents_to_delete = [agent] sleeptime_group_to_delete = None + manager_agent_to_update = None - # Delete sleeptime agent and group (TODO this is flimsy pls fix) - if agent.multi_agent_group: + # Handle case where we're deleting a sleeptime agent (not the main agent) + # In this case, we need to clean up the group and the main agent's enable_sleeptime flag + if agent.agent_type in {AgentType.sleeptime_agent, AgentType.voice_sleeptime_agent}: + # Find the group that this sleeptime agent belongs to + group_query = ( + select(GroupModel) + .join(GroupsAgents, GroupsAgents.group_id == GroupModel.id) + .where(GroupsAgents.agent_id == agent_id) + .where(GroupModel.manager_type.in_([ManagerType.sleeptime, ManagerType.voice_sleeptime])) + ) + result = await session.execute(group_query) + sleeptime_group = result.scalars().first() + + if sleeptime_group: + sleeptime_group_to_delete = sleeptime_group + # Get the manager (main) agent and mark it for update + if sleeptime_group.manager_agent_id: + try: + manager_agent_to_update = await AgentModel.read_async( + db_session=session, identifier=sleeptime_group.manager_agent_id, actor=actor + ) + except NoResultFound: + pass # Manager agent already deleted + + # Delete sleeptime agent and group when deleting the main agent + elif agent.multi_agent_group: participant_agent_ids = agent.multi_agent_group.agent_ids if agent.multi_agent_group.manager_type in {ManagerType.sleeptime, ManagerType.voice_sleeptime} and participant_agent_ids: for participant_agent_id in participant_agent_ids: @@ -1265,6 +1290,10 @@ class AgentManager: await session.delete(agent) # context manager now handles commits # await session.commit() + # Update the manager agent's enable_sleeptime flag if we deleted a sleeptime agent + if manager_agent_to_update is not None: + manager_agent_to_update.enable_sleeptime = None + await session.commit() except Exception as e: await session.rollback() logger.exception(f"Failed to hard delete Agent with ID {agent_id}")