Skip to content

Commit 4b1cc56

Browse files
enystli-boxuan
andauthored
Sync history to stream (#2640)
* add event to stream before budget check * make the budget check before the step * Update opendevin/controller/agent_controller.py Co-authored-by: Boxuan Li <[email protected]> --------- Co-authored-by: Boxuan Li <[email protected]>
1 parent b4f63ae commit 4b1cc56

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

opendevin/controller/agent_controller.py

+16-13
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,6 @@ async def update_state_after_step(self):
9999
self.state.updated_info = []
100100
# update metrics especially for cost
101101
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)
109102

110103
async def report_error(self, message: str, exception: Exception | None = None):
111104
"""
@@ -258,9 +251,9 @@ async def _step(self):
258251
if delegate_state == AgentState.ERROR:
259252
# close the delegate upon error
260253
await self.delegate.close()
254+
self.delegate = None
255+
self.delegateAction = None
261256
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)
264257
return
265258
delegate_done = delegate_state in (AgentState.FINISHED, AgentState.REJECTED)
266259
if delegate_done:
@@ -300,6 +293,18 @@ async def _step(self):
300293
await self.set_agent_state_to(AgentState.ERROR)
301294
return
302295

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+
303308
self.update_state_before_step()
304309
action: Action = NullAction()
305310
try:
@@ -319,13 +324,11 @@ async def _step(self):
319324
else:
320325
await self.add_history(action, NullObservation(''))
321326

322-
await self.update_state_after_step()
323-
if self.state.agent_state == AgentState.ERROR:
324-
return
325-
326327
if not isinstance(action, NullAction):
327328
await self.event_stream.add_event(action, EventSource.AGENT)
328329

330+
await self.update_state_after_step()
331+
329332
if self._is_stuck():
330333
await self.report_error('Agent got stuck in a loop')
331334
await self.set_agent_state_to(AgentState.ERROR)

0 commit comments

Comments
 (0)