diff --git a/fern/scripts/prepare-openapi.ts b/fern/scripts/prepare-openapi.ts index 7df4d687..e669063b 100644 --- a/fern/scripts/prepare-openapi.ts +++ b/fern/scripts/prepare-openapi.ts @@ -98,7 +98,12 @@ for (const path of Object.keys(lettaAgentsAPI.paths)) { ][method].parameters.filter( (param: Record) => param.in !== 'header' || - (param.name !== 'user_id' && param.name !== 'User-Agent' && param.name !== 'X-Project-Id'), + ( + param.name !== 'user_id' && + param.name !== 'User-Agent' && + param.name !== 'X-Project-Id' && + !param.name.startsWith('X-Experimental') + ), ); } } diff --git a/letta/server/rest_api/dependencies.py b/letta/server/rest_api/dependencies.py index 45a7e8a6..e51d62f8 100644 --- a/letta/server/rest_api/dependencies.py +++ b/letta/server/rest_api/dependencies.py @@ -7,24 +7,35 @@ if TYPE_CHECKING: from letta.server.server import SyncServer +class ExperimentalParams(BaseModel): + """Experimental parameters used across REST API endpoints.""" + + message_async: Optional[str] = None + + class HeaderParams(BaseModel): """Common header parameters used across REST API endpoints.""" actor_id: Optional[str] = None user_agent: Optional[str] = None project_id: Optional[str] = None + experimental_params: Optional[ExperimentalParams] = None def get_headers( actor_id: Optional[str] = Header(None, alias="user_id"), user_agent: Optional[str] = Header(None, alias="User-Agent"), project_id: Optional[str] = Header(None, alias="X-Project-Id"), + message_async: Optional[str] = Header(None, alias="X-Experimental-Message-Async"), ) -> HeaderParams: """Dependency injection function to extract common headers from requests.""" return HeaderParams( actor_id=actor_id, user_agent=user_agent, project_id=project_id, + experimental_params=ExperimentalParams( + message_async=message_async, + ), ) diff --git a/letta/server/rest_api/routers/v1/agents.py b/letta/server/rest_api/routers/v1/agents.py index 2599f0d1..7aa68980 100644 --- a/letta/server/rest_api/routers/v1/agents.py +++ b/letta/server/rest_api/routers/v1/agents.py @@ -1669,7 +1669,7 @@ async def send_message_async( ) run = await server.job_manager.create_job_async(pydantic_job=run, actor=actor) - if settings.temporal_endpoint: + if headers.experimental_params.message_async and settings.temporal_endpoint: 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"] )