diff --git a/letta/server/rest_api/dependencies.py b/letta/server/rest_api/dependencies.py index aa2888d7..2bab4ed3 100644 --- a/letta/server/rest_api/dependencies.py +++ b/letta/server/rest_api/dependencies.py @@ -12,6 +12,7 @@ class ExperimentalParams(BaseModel): message_async: Optional[bool] = None letta_v1_agent: Optional[bool] = None + letta_v1_agent_message_async: Optional[bool] = None class HeaderParams(BaseModel): @@ -31,6 +32,7 @@ def get_headers( sdk_version: Optional[str] = Header(None, alias="X-Stainless-Package-Version"), message_async: Optional[str] = Header(None, alias="X-Experimental-Message-Async"), letta_v1_agent: Optional[str] = Header(None, alias="X-Experimental-Letta-V1-Agent"), + letta_v1_agent_message_async: Optional[str] = Header(None, alias="X-Experimental-Letta-V1-Agent-Message-Async"), ) -> HeaderParams: """Dependency injection function to extract common headers from requests.""" return HeaderParams( @@ -41,6 +43,7 @@ def get_headers( experimental_params=ExperimentalParams( message_async=(message_async == "true") if message_async else None, letta_v1_agent=(letta_v1_agent == "true") if letta_v1_agent else None, + letta_v1_agent_message_async=(letta_v1_agent_message_async == "true") if letta_v1_agent_message_async else None, ), ) diff --git a/letta/server/rest_api/routers/v1/agents.py b/letta/server/rest_api/routers/v1/agents.py index f2146dba..1394afef 100644 --- a/letta/server/rest_api/routers/v1/agents.py +++ b/letta/server/rest_api/routers/v1/agents.py @@ -1825,11 +1825,16 @@ async def send_message_async( pydantic_run=run, actor=actor, ) + if use_lettuce: agent_state = await server.agent_manager.get_agent_by_id_async( agent_id, actor, include_relationships=["memory", "multi_agent_group", "sources", "tool_exec_environment_variables", "tools"] ) - if agent_state.multi_agent_group is None and agent_state.agent_type != AgentType.letta_v1_agent: + # Allow V1 agents only if the message async flag is enabled + is_v1_message_async_enabled = ( + agent_state.agent_type == AgentType.letta_v1_agent and headers.experimental_params.letta_v1_agent_message_async + ) + if agent_state.multi_agent_group is None and (agent_state.agent_type != AgentType.letta_v1_agent or is_v1_message_async_enabled): lettuce_client = await LettuceClient.create() run_id_from_lettuce = await lettuce_client.step( agent_state=agent_state,