chore: rename background to sleeptime (#1558)

This commit is contained in:
cthomas
2025-04-04 09:16:59 -07:00
committed by GitHub
parent 9458f40d05
commit 79354a72ea
9 changed files with 67 additions and 38 deletions

View File

@@ -0,0 +1,29 @@
"""rename sleeptime_agent_frequency
Revision ID: 90bb156e71df
Revises: 6fe79c0525f2
Create Date: 2025-04-03 17:20:26.218596
"""
from typing import Sequence, Union
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "90bb156e71df"
down_revision: Union[str, None] = "6fe79c0525f2"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column("groups", "background_agents_frequency", new_column_name="sleeptime_agent_frequency")
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column("groups", "sleeptime_agent_frequency", new_column_name="background_agents_frequency")
# ### end Alembic commands ###

View File

@@ -61,7 +61,7 @@ def load_multi_agent(
agent_ids=group.agent_ids,
description=group.description,
)
case ManagerType.background:
case ManagerType.sleeptime:
if not agent_state.enable_sleeptime:
return Agent(
agent_state=agent_state,
@@ -70,16 +70,16 @@ def load_multi_agent(
mcp_clients=mcp_clients,
)
from letta.groups.background_multi_agent import BackgroundMultiAgent
from letta.groups.sleeptime_multi_agent import SleeptimeMultiAgent
return BackgroundMultiAgent(
return SleeptimeMultiAgent(
agent_state=agent_state,
interface=interface,
user=actor,
group_id=group.id,
agent_ids=group.agent_ids,
description=group.description,
background_agents_frequency=group.background_agents_frequency,
sleeptime_agent_frequency=group.sleeptime_agent_frequency,
)
case _:
raise ValueError(f"Type {group.manager_type} is not supported.")

View File

@@ -19,7 +19,7 @@ from letta.services.job_manager import JobManager
from letta.services.message_manager import MessageManager
class BackgroundMultiAgent(Agent):
class SleeptimeMultiAgent(Agent):
def __init__(
self,
@@ -30,13 +30,13 @@ class BackgroundMultiAgent(Agent):
group_id: str = "",
agent_ids: List[str] = [],
description: str = "",
background_agents_frequency: Optional[int] = None,
sleeptime_agent_frequency: Optional[int] = None,
):
super().__init__(interface, agent_state, user)
self.group_id = group_id
self.agent_ids = agent_ids
self.description = description
self.background_agents_frequency = background_agents_frequency
self.sleeptime_agent_frequency = sleeptime_agent_frequency
self.group_manager = GroupManager()
self.message_manager = MessageManager()
self.job_manager = JobManager()
@@ -118,7 +118,7 @@ class BackgroundMultiAgent(Agent):
)
prior_messages = []
if self.background_agents_frequency:
if self.sleeptime_agent_frequency:
try:
prior_messages = self.message_manager.list_messages_for_agent(
agent_id=self.agent_state.id,
@@ -214,11 +214,11 @@ class BackgroundMultiAgent(Agent):
)
turns_counter = None
if self.background_agents_frequency is not None and self.background_agents_frequency > 0:
if self.sleeptime_agent_frequency is not None and self.sleeptime_agent_frequency > 0:
turns_counter = self.group_manager.bump_turns_counter(group_id=self.group_id, actor=self.user)
if self.background_agents_frequency is None or (
turns_counter is not None and turns_counter % self.background_agents_frequency == 0
if self.sleeptime_agent_frequency is None or (
turns_counter is not None and turns_counter % self.sleeptime_agent_frequency == 0
):
last_response_messages = [message for sublist in usage_stats.steps_messages for message in sublist]
last_processed_message_id = self.group_manager.get_last_processed_message_id_and_update(

View File

@@ -20,7 +20,7 @@ class Group(SqlalchemyBase, OrganizationMixin):
manager_agent_id: Mapped[Optional[str]] = mapped_column(String, ForeignKey("agents.id", ondelete="RESTRICT"), nullable=True, doc="")
termination_token: Mapped[Optional[str]] = mapped_column(nullable=True, doc="")
max_turns: Mapped[Optional[int]] = mapped_column(nullable=True, doc="")
background_agents_frequency: Mapped[Optional[int]] = mapped_column(nullable=True, doc="")
sleeptime_agent_frequency: Mapped[Optional[int]] = mapped_column(nullable=True, doc="")
turns_counter: Mapped[Optional[int]] = mapped_column(nullable=True, doc="")
last_processed_message_id: Mapped[Optional[str]] = mapped_column(nullable=True, doc="")

View File

@@ -10,7 +10,7 @@ class ManagerType(str, Enum):
round_robin = "round_robin"
supervisor = "supervisor"
dynamic = "dynamic"
background = "background"
sleeptime = "sleeptime"
swarm = "swarm"
@@ -28,7 +28,7 @@ class Group(GroupBase):
manager_agent_id: Optional[str] = Field(None, description="")
termination_token: Optional[str] = Field(None, description="")
max_turns: Optional[int] = Field(None, description="")
background_agents_frequency: Optional[int] = Field(None, description="")
sleeptime_agent_frequency: Optional[int] = Field(None, description="")
turns_counter: Optional[int] = Field(None, description="")
last_processed_message_id: Optional[str] = Field(None, description="")
@@ -54,10 +54,10 @@ class DynamicManager(ManagerConfig):
max_turns: Optional[int] = Field(None, description="")
class BackgroundManager(ManagerConfig):
manager_type: Literal[ManagerType.background] = Field(ManagerType.background, description="")
class SleeptimeManager(ManagerConfig):
manager_type: Literal[ManagerType.sleeptime] = Field(ManagerType.sleeptime, description="")
manager_agent_id: str = Field(..., description="")
background_agents_frequency: Optional[int] = Field(None, description="")
sleeptime_agent_frequency: Optional[int] = Field(None, description="")
# class SwarmGroup(ManagerConfig):
@@ -65,7 +65,7 @@ class BackgroundManager(ManagerConfig):
ManagerConfigUnion = Annotated[
Union[RoundRobinManager, SupervisorManager, DynamicManager, BackgroundManager],
Union[RoundRobinManager, SupervisorManager, DynamicManager, SleeptimeManager],
Field(discriminator="manager_type"),
]

View File

@@ -40,7 +40,7 @@ from letta.schemas.embedding_config import EmbeddingConfig
# openai schemas
from letta.schemas.enums import JobStatus, MessageStreamStatus
from letta.schemas.environment_variables import SandboxEnvironmentVariableCreate
from letta.schemas.group import BackgroundManager, GroupCreate
from letta.schemas.group import GroupCreate, SleeptimeManager
from letta.schemas.job import Job, JobUpdate
from letta.schemas.letta_message import LegacyLettaMessage, LettaMessage, ToolReturnMessage
from letta.schemas.letta_message_content import TextContent
@@ -782,7 +782,7 @@ class SyncServer(Server):
group=GroupCreate(
description="",
agent_ids=[sleeptime_agent.id],
manager_config=BackgroundManager(
manager_config=SleeptimeManager(
manager_agent_id=main_agent.id,
),
),

View File

@@ -498,7 +498,7 @@ class AgentManager:
# Delete sleeptime agent and group
if agent.multi_agent_group:
participant_agent_ids = agent.multi_agent_group.agent_ids
if agent.multi_agent_group.manager_type == ManagerType.background and len(participant_agent_ids) == 1:
if agent.multi_agent_group.manager_type == ManagerType.sleeptime and len(participant_agent_ids) == 1:
sleeptime_agent = AgentModel.read(db_session=session, identifier=participant_agent_ids[0], actor=actor)
if sleeptime_agent.agent_type == AgentType.sleeptime_agent:
sleeptime_agent_group = GroupModel.read(db_session=session, identifier=agent.multi_agent_group.id, actor=actor)

View File

@@ -71,11 +71,11 @@ class GroupManager:
case ManagerType.supervisor:
new_group.manager_type = ManagerType.supervisor
new_group.manager_agent_id = group.manager_config.manager_agent_id
case ManagerType.background:
new_group.manager_type = ManagerType.background
case ManagerType.sleeptime:
new_group.manager_type = ManagerType.sleeptime
new_group.manager_agent_id = group.manager_config.manager_agent_id
new_group.background_agents_frequency = group.manager_config.background_agents_frequency
if new_group.background_agents_frequency:
new_group.sleeptime_agent_frequency = group.manager_config.sleeptime_agent_frequency
if new_group.sleeptime_agent_frequency:
new_group.turns_counter = 0
case _:
raise ValueError(f"Unsupported manager type: {group.manager_config.manager_type}")
@@ -93,7 +93,7 @@ class GroupManager:
with self.session_maker() as session:
group = GroupModel.read(db_session=session, identifier=group_id, actor=actor)
background_agents_frequency = None
sleeptime_agent_frequency = None
max_turns = None
termination_token = None
manager_agent_id = None
@@ -109,16 +109,16 @@ class GroupManager:
termination_token = group_update.manager_config.termination_token
case ManagerType.supervisor:
manager_agent_id = group_update.manager_config.manager_agent_id
case ManagerType.background:
case ManagerType.sleeptime:
manager_agent_id = group_update.manager_config.manager_agent_id
background_agents_frequency = group_update.manager_config.background_agents_frequency
if background_agents_frequency and group.turns_counter is None:
sleeptime_agent_frequency = group_update.manager_config.sleeptime_agent_frequency
if sleeptime_agent_frequency and group.turns_counter is None:
group.turns_counter = 0
case _:
raise ValueError(f"Unsupported manager type: {group_update.manager_config.manager_type}")
if background_agents_frequency:
group.background_agents_frequency = background_agents_frequency
if sleeptime_agent_frequency:
group.sleeptime_agent_frequency = sleeptime_agent_frequency
if max_turns:
group.max_turns = max_turns
if termination_token:
@@ -198,7 +198,7 @@ class GroupManager:
group = GroupModel.read(db_session=session, identifier=group_id, actor=actor)
# Update turns counter
group.turns_counter = (group.turns_counter + 1) % group.background_agents_frequency
group.turns_counter = (group.turns_counter + 1) % group.sleeptime_agent_frequency
group.update(session, actor=actor)
return group.turns_counter

View File

@@ -10,12 +10,12 @@ from letta.schemas.agent import CreateAgent
from letta.schemas.block import CreateBlock
from letta.schemas.enums import JobStatus
from letta.schemas.group import (
BackgroundManager,
DynamicManager,
GroupCreate,
GroupUpdate,
ManagerType,
RoundRobinManager,
SleeptimeManager,
SupervisorManager,
)
from letta.schemas.message import MessageCreate
@@ -441,7 +441,7 @@ async def test_dynamic_group_chat(server, actor, manager_agent, participant_agen
@pytest.mark.asyncio
async def test_background_group_chat(server, actor):
async def test_sleeptime_group_chat(server, actor):
# 0. Refresh base tools
server.tool_manager.upsert_base_tools(actor=actor)
@@ -472,16 +472,16 @@ async def test_background_group_chat(server, actor):
group = server.group_manager.modify_group(
group_id=main_agent.multi_agent_group.id,
group_update=GroupUpdate(
manager_config=BackgroundManager(
manager_config=SleeptimeManager(
manager_agent_id=main_agent.id,
background_agents_frequency=2,
sleeptime_agent_frequency=2,
),
),
actor=actor,
)
assert group.manager_type == ManagerType.background
assert group.background_agents_frequency == 2
assert group.manager_type == ManagerType.sleeptime
assert group.sleeptime_agent_frequency == 2
assert len(group.agent_ids) == 1
# 3. Verify shared blocks