chore: rename background to sleeptime (#1558)
This commit is contained in:
@@ -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 ###
|
||||
@@ -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.")
|
||||
|
||||
@@ -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(
|
||||
@@ -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="")
|
||||
|
||||
|
||||
@@ -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"),
|
||||
]
|
||||
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user