mirror of
https://github.com/OpenHands/OpenHands.git
synced 2026-03-22 13:47:19 +08:00
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 <liboxuan@connect.hku.hk> --------- Co-authored-by: Boxuan Li <liboxuan@connect.hku.hk>
This commit is contained in:
@@ -99,13 +99,6 @@ class AgentController:
|
||||
self.state.updated_info = []
|
||||
# update metrics especially for cost
|
||||
self.state.metrics = self.agent.llm.metrics
|
||||
if self.max_budget_per_task is not None:
|
||||
current_cost = self.state.metrics.accumulated_cost
|
||||
if current_cost > self.max_budget_per_task:
|
||||
await self.report_error(
|
||||
f'Task budget exceeded. Current cost: {current_cost:.2f}, Max budget: {self.max_budget_per_task:.2f}'
|
||||
)
|
||||
await self.set_agent_state_to(AgentState.ERROR)
|
||||
|
||||
async def report_error(self, message: str, exception: Exception | None = None):
|
||||
"""
|
||||
@@ -258,9 +251,9 @@ class AgentController:
|
||||
if delegate_state == AgentState.ERROR:
|
||||
# close the delegate upon error
|
||||
await self.delegate.close()
|
||||
self.delegate = None
|
||||
self.delegateAction = None
|
||||
await self.report_error('Delegator agent encounters an error')
|
||||
# propagate error state until an agent or user can handle it
|
||||
await self.set_agent_state_to(AgentState.ERROR)
|
||||
return
|
||||
delegate_done = delegate_state in (AgentState.FINISHED, AgentState.REJECTED)
|
||||
if delegate_done:
|
||||
@@ -300,6 +293,18 @@ class AgentController:
|
||||
await self.set_agent_state_to(AgentState.ERROR)
|
||||
return
|
||||
|
||||
if self.max_budget_per_task is not None:
|
||||
current_cost = self.state.metrics.accumulated_cost
|
||||
if current_cost > self.max_budget_per_task:
|
||||
await self.report_error(
|
||||
f'Task budget exceeded. Current cost: {current_cost:.2f}, Max budget: {self.max_budget_per_task:.2f}'
|
||||
)
|
||||
await self.set_agent_state_to(AgentState.ERROR)
|
||||
return
|
||||
|
||||
if self.state.agent_state == AgentState.ERROR:
|
||||
return
|
||||
|
||||
self.update_state_before_step()
|
||||
action: Action = NullAction()
|
||||
try:
|
||||
@@ -319,13 +324,11 @@ class AgentController:
|
||||
else:
|
||||
await self.add_history(action, NullObservation(''))
|
||||
|
||||
await self.update_state_after_step()
|
||||
if self.state.agent_state == AgentState.ERROR:
|
||||
return
|
||||
|
||||
if not isinstance(action, NullAction):
|
||||
await self.event_stream.add_event(action, EventSource.AGENT)
|
||||
|
||||
await self.update_state_after_step()
|
||||
|
||||
if self._is_stuck():
|
||||
await self.report_error('Agent got stuck in a loop')
|
||||
await self.set_agent_state_to(AgentState.ERROR)
|
||||
|
||||
Reference in New Issue
Block a user