73
73
from ..runners import Runner
74
74
from ..sessions .base_session_service import BaseSessionService
75
75
from ..sessions .session import Session
76
+ from ..utils .context_utils import Aclosing
76
77
from .cli_eval import EVAL_SESSION_ID_PREFIX
77
78
from .cli_eval import EvalStatus
78
79
from .utils import cleanup
@@ -828,14 +829,16 @@ async def agent_run(req: AgentRunRequest) -> list[Event]:
828
829
if not session :
829
830
raise HTTPException (status_code = 404 , detail = "Session not found" )
830
831
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 (
834
836
user_id = req .user_id ,
835
837
session_id = req .session_id ,
836
838
new_message = req .new_message ,
837
839
)
838
- ]
840
+ ) as agen :
841
+ events = [event async for event in agen ]
839
842
logger .info ("Generated %s events in agent run" , len (events ))
840
843
logger .debug ("Events generated: %s" , events )
841
844
return events
@@ -856,19 +859,24 @@ async def event_generator():
856
859
StreamingMode .SSE if req .streaming else StreamingMode .NONE
857
860
)
858
861
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 "
872
880
except Exception as e :
873
881
logger .exception ("Error in event_generator: %s" , e )
874
882
# You might want to yield an error event here
@@ -954,12 +962,15 @@ async def agent_live_run(
954
962
955
963
async def forward_events ():
956
964
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
+ )
963
974
964
975
async def process_messages ():
965
976
try :
0 commit comments