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:
Boxuan Li
2024-06-23 18:38:52 -07:00
committed by GitHub
parent 6de584d77d
commit 39d90c0b2a
2 changed files with 11 additions and 2 deletions

View File

@@ -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)

View File

@@ -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()}'