mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-01-10 07:18:10 -05:00
Track metrics throughout delegation & Polish UX for out of budget error (#2595)
* Track metrics (costs) throught delegation * Metrics should be shared across agents for better UX * Update cost before starting delegate
This commit is contained in:
@@ -108,7 +108,7 @@ class AgentController:
|
||||
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}, Max budget: {self.max_budget_per_task}'
|
||||
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)
|
||||
|
||||
@@ -222,6 +222,8 @@ class AgentController:
|
||||
max_iterations=self.state.max_iterations,
|
||||
num_of_chars=self.state.num_of_chars,
|
||||
delegate_level=self.state.delegate_level + 1,
|
||||
# metrics should be shared between parent and child
|
||||
metrics=self.state.metrics,
|
||||
)
|
||||
logger.info(f'[Agent Controller {self.id}]: start delegate')
|
||||
self.delegate = AgentController(
|
||||
@@ -230,6 +232,7 @@ class AgentController:
|
||||
event_stream=self.event_stream,
|
||||
max_iterations=self.state.max_iterations,
|
||||
max_chars=self.max_chars,
|
||||
max_budget_per_task=self.max_budget_per_task,
|
||||
initial_state=state,
|
||||
is_delegate=True,
|
||||
)
|
||||
@@ -308,12 +311,15 @@ class AgentController:
|
||||
|
||||
logger.info(action, extra={'msg_type': 'ACTION'})
|
||||
|
||||
await self.update_state_after_step()
|
||||
if action.runnable:
|
||||
self._pending_action = action
|
||||
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)
|
||||
|
||||
|
||||
@@ -44,3 +44,6 @@ class Metrics:
|
||||
for key, value in metrics.items():
|
||||
logs += f'{key}: {value}\n'
|
||||
return logs
|
||||
|
||||
def __repr__(self):
|
||||
return f'Metrics({self.get()}'
|
||||
|
||||
Reference in New Issue
Block a user