7373from ..runners import Runner
7474from ..sessions .base_session_service import BaseSessionService
7575from ..sessions .session import Session
76+ from ..utils .context_utils import Aclosing
7677from .cli_eval import EVAL_SESSION_ID_PREFIX
7778from .cli_eval import EvalStatus
7879from .utils import cleanup
@@ -828,14 +829,16 @@ async def agent_run(req: AgentRunRequest) -> list[Event]:
828829 if not session :
829830 raise HTTPException (status_code = 404 , detail = "Session not found" )
830831 runner = await self .get_runner_async (req .app_name )
831- events = [
832- event
833- async for event in runner .run_async (
832+
833+ events = []
834+ async with Aclosing (
835+ runner .run_async (
834836 user_id = req .user_id ,
835837 session_id = req .session_id ,
836838 new_message = req .new_message ,
837839 )
838- ]
840+ ) as agen :
841+ events = [event async for event in agen ]
839842 logger .info ("Generated %s events in agent run" , len (events ))
840843 logger .debug ("Events generated: %s" , events )
841844 return events
@@ -856,19 +859,24 @@ async def event_generator():
856859 StreamingMode .SSE if req .streaming else StreamingMode .NONE
857860 )
858861 runner = await self .get_runner_async (req .app_name )
859- async for event in runner .run_async (
860- user_id = req .user_id ,
861- session_id = req .session_id ,
862- new_message = req .new_message ,
863- state_delta = req .state_delta ,
864- run_config = RunConfig (streaming_mode = stream_mode ),
865- ):
866- # Format as SSE data
867- sse_event = event .model_dump_json (exclude_none = True , by_alias = True )
868- logger .debug (
869- "Generated event in agent run streaming: %s" , sse_event
870- )
871- yield f"data: { sse_event } \n \n "
862+ async with Aclosing (
863+ runner .run_async (
864+ user_id = req .user_id ,
865+ session_id = req .session_id ,
866+ new_message = req .new_message ,
867+ state_delta = req .state_delta ,
868+ run_config = RunConfig (streaming_mode = stream_mode ),
869+ )
870+ ) as agen :
871+ async for event in agen :
872+ # Format as SSE data
873+ sse_event = event .model_dump_json (
874+ exclude_none = True , by_alias = True
875+ )
876+ logger .debug (
877+ "Generated event in agent run streaming: %s" , sse_event
878+ )
879+ yield f"data: { sse_event } \n \n "
872880 except Exception as e :
873881 logger .exception ("Error in event_generator: %s" , e )
874882 # You might want to yield an error event here
@@ -954,12 +962,15 @@ async def agent_live_run(
954962
955963 async def forward_events ():
956964 runner = await self .get_runner_async (app_name )
957- async for event in runner .run_live (
958- session = session , live_request_queue = live_request_queue
959- ):
960- await websocket .send_text (
961- event .model_dump_json (exclude_none = True , by_alias = True )
962- )
965+ async with Aclosing (
966+ runner .run_live (
967+ session = session , live_request_queue = live_request_queue
968+ )
969+ ) as agen :
970+ async for event in agen :
971+ await websocket .send_text (
972+ event .model_dump_json (exclude_none = True , by_alias = True )
973+ )
963974
964975 async def process_messages ():
965976 try :
0 commit comments