From 9155b4fa86d62d6a92ef6b00803b992fab8fb4ef Mon Sep 17 00:00:00 2001 From: jnjpng Date: Fri, 20 Feb 2026 15:58:51 -0800 Subject: [PATCH] fix: use canonical stop reason mapping in redis stream finalizer (#9600) fix: derive run status from StopReasonType mapping --- letta/server/rest_api/redis_stream_manager.py | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/letta/server/rest_api/redis_stream_manager.py b/letta/server/rest_api/redis_stream_manager.py index bfa48102..6ae4086d 100644 --- a/letta/server/rest_api/redis_stream_manager.py +++ b/letta/server/rest_api/redis_stream_manager.py @@ -361,25 +361,10 @@ async def create_background_stream_processor( # Update run status to reflect terminal outcome if run_manager and actor and final_stop_reason: - # Map stop_reason to run status - if final_stop_reason in [ - StopReasonType.error.value, - StopReasonType.llm_api_error.value, - StopReasonType.invalid_tool_call.value, - StopReasonType.invalid_llm_response.value, - StopReasonType.no_tool_call.value, - ]: - run_status = RunStatus.failed - elif final_stop_reason == StopReasonType.cancelled.value: - run_status = RunStatus.cancelled - elif final_stop_reason in [ - StopReasonType.end_turn.value, - StopReasonType.max_steps.value, - StopReasonType.tool_rule.value, - StopReasonType.requires_approval.value, - ]: - run_status = RunStatus.completed - else: + # Resolve stop_reason using canonical enum mapping to avoid drift. + try: + run_status = StopReasonType(final_stop_reason).run_status + except ValueError: logger.warning(f"Unknown stop_reason '{final_stop_reason}' for run {run_id}, defaulting to completed") run_status = RunStatus.completed