diff --git a/letta/agents/letta_agent.py b/letta/agents/letta_agent.py index d774f110..f1a2b794 100644 --- a/letta/agents/letta_agent.py +++ b/letta/agents/letta_agent.py @@ -131,7 +131,7 @@ class LettaAgent(BaseAgent): agent_state = await self.agent_manager.get_agent_by_id_async( agent_id=self.agent_id, include_relationships=["tools", "memory", "tool_exec_environment_variables"], actor=self.actor ) - _, new_in_context_messages, usage, stop_reason = await self._step( + _, new_in_context_messages, stop_reason, usage = await self._step( agent_state=agent_state, input_messages=input_messages, max_steps=max_steps, @@ -441,7 +441,7 @@ class LettaAgent(BaseAgent): force=False, ) - return current_in_context_messages, new_in_context_messages, usage, stop_reason + return current_in_context_messages, new_in_context_messages, stop_reason, usage async def _update_agent_last_run_metrics(self, completion_time: datetime, duration_ms: float) -> None: try: diff --git a/letta/agents/voice_agent.py b/letta/agents/voice_agent.py index e31e983f..d49c7289 100644 --- a/letta/agents/voice_agent.py +++ b/letta/agents/voice_agent.py @@ -38,6 +38,7 @@ from letta.server.rest_api.utils import ( from letta.services.agent_manager import AgentManager from letta.services.block_manager import BlockManager from letta.services.helpers.agent_manager_helper import compile_system_message +from letta.services.job_manager import JobManager from letta.services.message_manager import MessageManager from letta.services.passage_manager import PassageManager from letta.services.summarizer.enums import SummarizationMode @@ -64,6 +65,7 @@ class VoiceAgent(BaseAgent): message_manager: MessageManager, agent_manager: AgentManager, block_manager: BlockManager, + job_manager: JobManager, passage_manager: PassageManager, actor: User, ): @@ -73,6 +75,7 @@ class VoiceAgent(BaseAgent): # Summarizer settings self.block_manager = block_manager + self.job_manager = job_manager self.passage_manager = passage_manager # TODO: This is not guaranteed to exist! self.summary_block_label = "human" @@ -98,6 +101,7 @@ class VoiceAgent(BaseAgent): agent_manager=self.agent_manager, actor=self.actor, block_manager=self.block_manager, + job_manager=self.job_manager, passage_manager=self.passage_manager, target_block_label=self.summary_block_label, ), @@ -439,6 +443,7 @@ class VoiceAgent(BaseAgent): message_manager=self.message_manager, agent_manager=self.agent_manager, block_manager=self.block_manager, + job_manager=self.job_manager, passage_manager=self.passage_manager, sandbox_env_vars=sandbox_env_vars, actor=self.actor, diff --git a/letta/agents/voice_sleeptime_agent.py b/letta/agents/voice_sleeptime_agent.py index 4e70c56e..1d997be2 100644 --- a/letta/agents/voice_sleeptime_agent.py +++ b/letta/agents/voice_sleeptime_agent.py @@ -15,6 +15,7 @@ from letta.schemas.tool_rule import ChildToolRule, ContinueToolRule, InitToolRul from letta.schemas.user import User from letta.services.agent_manager import AgentManager from letta.services.block_manager import BlockManager +from letta.services.job_manager import JobManager from letta.services.message_manager import MessageManager from letta.services.passage_manager import PassageManager from letta.services.summarizer.enums import SummarizationMode @@ -34,6 +35,7 @@ class VoiceSleeptimeAgent(LettaAgent): message_manager: MessageManager, agent_manager: AgentManager, block_manager: BlockManager, + job_manager: JobManager, passage_manager: PassageManager, target_block_label: str, actor: User, @@ -43,6 +45,7 @@ class VoiceSleeptimeAgent(LettaAgent): message_manager=message_manager, agent_manager=agent_manager, block_manager=block_manager, + job_manager=job_manager, passage_manager=passage_manager, actor=actor, ) @@ -64,7 +67,9 @@ class VoiceSleeptimeAgent(LettaAgent): self, input_messages: List[MessageCreate], max_steps: int = DEFAULT_MAX_STEPS, + run_id: Optional[str] = None, use_assistant_message: bool = True, + request_start_timestamp_ns: Optional[int] = None, include_return_message_types: Optional[List[MessageType]] = None, ) -> LettaResponse: """ @@ -82,7 +87,7 @@ class VoiceSleeptimeAgent(LettaAgent): ] # Summarize - current_in_context_messages, new_in_context_messages, usage, stop_reason = await super()._step( + current_in_context_messages, new_in_context_messages, stop_reason, usage = await super()._step( agent_state=agent_state, input_messages=input_messages, max_steps=max_steps ) new_in_context_messages, updated = self.summarizer.summarize( @@ -172,7 +177,12 @@ class VoiceSleeptimeAgent(LettaAgent): return f"Failed to store memory given start_index {start_index} and end_index {end_index}: {e}", False async def step_stream( - self, input_messages: List[MessageCreate], max_steps: int = DEFAULT_MAX_STEPS, use_assistant_message: bool = True + self, + input_messages: List[MessageCreate], + max_steps: int = DEFAULT_MAX_STEPS, + use_assistant_message: bool = True, + request_start_timestamp_ns: Optional[int] = None, + include_return_message_types: Optional[List[MessageType]] = None, ) -> AsyncGenerator[Union[LettaMessage, LegacyLettaMessage, MessageStreamStatus], None]: """ This agent is synchronous-only. If called in an async context, raise an error. diff --git a/letta/server/rest_api/routers/v1/voice.py b/letta/server/rest_api/routers/v1/voice.py index e147eca4..e33bf9bf 100644 --- a/letta/server/rest_api/routers/v1/voice.py +++ b/letta/server/rest_api/routers/v1/voice.py @@ -53,6 +53,7 @@ async def create_voice_chat_completions( message_manager=server.message_manager, agent_manager=server.agent_manager, block_manager=server.block_manager, + job_manager=server.job_manager, passage_manager=server.passage_manager, actor=actor, ) diff --git a/tests/integration_test_voice_agent.py b/tests/integration_test_voice_agent.py index 2da7d19f..60a3c904 100644 --- a/tests/integration_test_voice_agent.py +++ b/tests/integration_test_voice_agent.py @@ -26,6 +26,7 @@ from letta.schemas.usage import LettaUsageStatistics from letta.server.server import SyncServer from letta.services.agent_manager import AgentManager from letta.services.block_manager import BlockManager +from letta.services.job_manager import JobManager from letta.services.message_manager import MessageManager from letta.services.passage_manager import PassageManager from letta.services.summarizer.enums import SummarizationMode @@ -377,6 +378,7 @@ async def test_summarization(disable_e2b_api_key, voice_agent, server_url): agent_manager=agent_manager, actor=actor, block_manager=BlockManager(), + job_manager=JobManager(), passage_manager=PassageManager(), target_block_label="human", ) @@ -455,6 +457,7 @@ async def test_voice_sleeptime_agent(disable_e2b_api_key, voice_agent, server_ur agent_manager=agent_manager, actor=actor, block_manager=BlockManager(), + job_manager=JobManager(), passage_manager=PassageManager(), target_block_label="human", )