From aea60b2c28edc4a2c32f5cc1daa9d533cd01cac4 Mon Sep 17 00:00:00 2001 From: Andy Li <55300002+cliandy@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:12:49 -0700 Subject: [PATCH] feat: add trace_id filter for listing steps (#2560) --- letta/server/rest_api/routers/v1/steps.py | 2 ++ letta/services/step_manager.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/letta/server/rest_api/routers/v1/steps.py b/letta/server/rest_api/routers/v1/steps.py index c8018f17..cf6c9565 100644 --- a/letta/server/rest_api/routers/v1/steps.py +++ b/letta/server/rest_api/routers/v1/steps.py @@ -21,6 +21,7 @@ async def list_steps( end_date: Optional[str] = Query(None, description='Return steps before this ISO datetime (e.g. "2025-01-29T15:01:19-08:00")'), model: Optional[str] = Query(None, description="Filter by the name of the model used for the step"), agent_id: Optional[str] = Query(None, description="Filter by the ID of the agent that performed the step"), + trace_ids: Optional[list[str]] = Query(None, description="Filter by trace ids returned by the server"), server: SyncServer = Depends(get_letta_server), actor_id: Optional[str] = Header(None, alias="user_id"), ): @@ -44,6 +45,7 @@ async def list_steps( order=order, model=model, agent_id=agent_id, + trace_ids=trace_ids, ) diff --git a/letta/services/step_manager.py b/letta/services/step_manager.py index fc955db0..ea30e2d5 100644 --- a/letta/services/step_manager.py +++ b/letta/services/step_manager.py @@ -33,6 +33,7 @@ class StepManager: order: Optional[str] = None, model: Optional[str] = None, agent_id: Optional[str] = None, + trace_ids: Optional[list[str]] = None, ) -> List[PydanticStep]: """List all jobs with optional pagination and status filter.""" async with db_registry.async_session() as session: @@ -41,6 +42,8 @@ class StepManager: filter_kwargs["model"] = model if agent_id: filter_kwargs["agent_id"] = agent_id + if trace_ids: + filter_kwargs["trace_id"] = trace_ids steps = await StepModel.list_async( db_session=session,