@@ -99,13 +99,6 @@ async def update_state_after_step(self):
99
99
self .state .updated_info = []
100
100
# update metrics especially for cost
101
101
self .state .metrics = self .agent .llm .metrics
102
- if self .max_budget_per_task is not None :
103
- current_cost = self .state .metrics .accumulated_cost
104
- if current_cost > self .max_budget_per_task :
105
- await self .report_error (
106
- f'Task budget exceeded. Current cost: { current_cost :.2f} , Max budget: { self .max_budget_per_task :.2f} '
107
- )
108
- await self .set_agent_state_to (AgentState .ERROR )
109
102
110
103
async def report_error (self , message : str , exception : Exception | None = None ):
111
104
"""
@@ -258,9 +251,9 @@ async def _step(self):
258
251
if delegate_state == AgentState .ERROR :
259
252
# close the delegate upon error
260
253
await self .delegate .close ()
254
+ self .delegate = None
255
+ self .delegateAction = None
261
256
await self .report_error ('Delegator agent encounters an error' )
262
- # propagate error state until an agent or user can handle it
263
- await self .set_agent_state_to (AgentState .ERROR )
264
257
return
265
258
delegate_done = delegate_state in (AgentState .FINISHED , AgentState .REJECTED )
266
259
if delegate_done :
@@ -300,6 +293,18 @@ async def _step(self):
300
293
await self .set_agent_state_to (AgentState .ERROR )
301
294
return
302
295
296
+ if self .max_budget_per_task is not None :
297
+ current_cost = self .state .metrics .accumulated_cost
298
+ if current_cost > self .max_budget_per_task :
299
+ await self .report_error (
300
+ f'Task budget exceeded. Current cost: { current_cost :.2f} , Max budget: { self .max_budget_per_task :.2f} '
301
+ )
302
+ await self .set_agent_state_to (AgentState .ERROR )
303
+ return
304
+
305
+ if self .state .agent_state == AgentState .ERROR :
306
+ return
307
+
303
308
self .update_state_before_step ()
304
309
action : Action = NullAction ()
305
310
try :
@@ -319,13 +324,11 @@ async def _step(self):
319
324
else :
320
325
await self .add_history (action , NullObservation ('' ))
321
326
322
- await self .update_state_after_step ()
323
- if self .state .agent_state == AgentState .ERROR :
324
- return
325
-
326
327
if not isinstance (action , NullAction ):
327
328
await self .event_stream .add_event (action , EventSource .AGENT )
328
329
330
+ await self .update_state_after_step ()
331
+
329
332
if self ._is_stuck ():
330
333
await self .report_error ('Agent got stuck in a loop' )
331
334
await self .set_agent_state_to (AgentState .ERROR )
0 commit comments