Skip to content

Commit 05e4406

Browse files
committed
make the budget check before the step
1 parent 3ad34a9 commit 05e4406

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

opendevin/controller/agent_controller.py

+13-11
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,6 @@ async def update_state_after_step(self):
104104
self.state.updated_info = []
105105
# update metrics especially for cost
106106
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)
114107

115108
async def report_error(self, message: str, exception: Exception | None = None):
116109
"""
@@ -265,9 +258,9 @@ async def _step(self):
265258
if delegate_state == AgentState.ERROR:
266259
# close the delegate upon error
267260
await self.delegate.close()
261+
self.delegate = None
262+
self.delegateAction = None
268263
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)
271264
return
272265
delegate_done = delegate_state in (AgentState.FINISHED, AgentState.REJECTED)
273266
if delegate_done:
@@ -310,6 +303,17 @@ async def _step(self):
310303
await self.set_agent_state_to(AgentState.ERROR)
311304
return
312305

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+
313317
self.update_state_before_step()
314318
action: Action = NullAction()
315319
try:
@@ -333,8 +337,6 @@ async def _step(self):
333337
await self.event_stream.add_event(action, EventSource.AGENT)
334338

335339
await self.update_state_after_step()
336-
if self.state.agent_state == AgentState.ERROR:
337-
return
338340

339341
if self._is_stuck():
340342
await self.report_error('Agent got stuck in a loop')

0 commit comments

Comments
 (0)