import time
from collections import defaultdict
class ScalingMetrics:
def __init__(self):
self.agent_metrics = defaultdict(lambda: {
"requests": 0,
"successes": 0,
"failures": 0,
"total_duration": 0.0,
})
def record(self, agent_name, success, duration):
metrics = self.agent_metrics[agent_name]
metrics["requests"] += 1
metrics["total_duration"] += duration
if success:
metrics["successes"] += 1
else:
metrics["failures"] += 1
def get_summary(self):
summary = {}
for agent_name, metrics in self.agent_metrics.items():
avg_duration = (
metrics["total_duration"] / metrics["requests"]
if metrics["requests"] > 0 else 0
)
success_rate = (
metrics["successes"] / metrics["requests"]
if metrics["requests"] > 0 else 0
)
summary[agent_name] = {
"requests": metrics["requests"],
"success_rate": f"{success_rate:.1%}",
"avg_duration": f"{avg_duration:.2f}s",
}
return summary
metrics = ScalingMetrics()
def monitored_run(agent, task):
start = time.time()
success = False
try:
result = agent.run(task)
success = True
return result
finally:
duration = time.time() - start
metrics.record(agent.agent_name, success, duration)