@@ -104,13 +104,6 @@ async def update_state_after_step(self):
104
104
self .state .updated_info = []
105
105
# update metrics especially for cost
106
106
self .state .metrics = self .agent .llm .metrics
107
- if self .max_budget_per_task is not None :
108
- current_cost = self .state .metrics .accumulated_cost
109
- if current_cost > self .max_budget_per_task :
110
- await self .report_error (
111
- f'Task budget exceeded. Current cost: { current_cost :.2f} , Max budget: { self .max_budget_per_task :.2f} '
112
- )
113
- await self .set_agent_state_to (AgentState .ERROR )
114
107
115
108
async def report_error (self , message : str , exception : Exception | None = None ):
116
109
"""
@@ -265,9 +258,9 @@ async def _step(self):
265
258
if delegate_state == AgentState .ERROR :
266
259
# close the delegate upon error
267
260
await self .delegate .close ()
261
+ self .delegate = None
262
+ self .delegateAction = None
268
263
await self .report_error ('Delegator agent encounters an error' )
269
- # propagate error state until an agent or user can handle it
270
- await self .set_agent_state_to (AgentState .ERROR )
271
264
return
272
265
delegate_done = delegate_state in (AgentState .FINISHED , AgentState .REJECTED )
273
266
if delegate_done :
@@ -310,6 +303,17 @@ async def _step(self):
310
303
await self .set_agent_state_to (AgentState .ERROR )
311
304
return
312
305
306
+ if self .max_budget_per_task is not None :
307
+ current_cost = self .state .metrics .accumulated_cost
308
+ if current_cost > self .max_budget_per_task :
309
+ await self .report_error (
310
+ f'Task budget exceeded. Current cost: { current_cost :.2f} , Max budget: { self .max_budget_per_task :.2f} '
311
+ )
312
+ await self .set_agent_state_to (AgentState .ERROR )
313
+
314
+ if self .state .agent_state == AgentState .ERROR :
315
+ return
316
+
313
317
self .update_state_before_step ()
314
318
action : Action = NullAction ()
315
319
try :
@@ -333,8 +337,6 @@ async def _step(self):
333
337
await self .event_stream .add_event (action , EventSource .AGENT )
334
338
335
339
await self .update_state_after_step ()
336
- if self .state .agent_state == AgentState .ERROR :
337
- return
338
340
339
341
if self ._is_stuck ():
340
342
await self .report_error ('Agent got stuck in a loop' )
0 commit comments