Success Rate
Success rate is the percentage of tasks that complete with the correct outcome. Tracking and improving success rate is the primary measure of agent quality.
6 min•By Priygop Team•Updated 2026
Success Rate Tracking
Success Rate Tracking
# Success rate tracking across many agent runs
from dataclasses import dataclass, field
from typing import List
from datetime import datetime
@dataclass
class TaskOutcome:
task_id: str
goal_type: str
outcome: str # 'success' | 'failed' | 'escalated' | 'timeout'
steps_taken: int
cost_usd: float
duration_s: float
timestamp: str = field(default_factory=lambda: datetime.now().isoformat())
class SuccessRateTracker:
def __init__(self):
self.outcomes: List[TaskOutcome] = []
def record(self, outcome: TaskOutcome):
self.outcomes.append(outcome)
def report(self, last_n: int = None) -> dict:
data = self.outcomes[-last_n:] if last_n else self.outcomes
if not data:
return {"error": "No data"}
total = len(data)
successes = sum(1 for o in data if o.outcome == "success")
failed = sum(1 for o in data if o.outcome == "failed")
escalated = sum(1 for o in data if o.outcome == "escalated")
return {
"total_tasks": total,
"success_rate": round(successes / total * 100, 1),
"fail_rate": round(failed / total * 100, 1),
"escalation_rate": round(escalated / total * 100, 1),
"avg_steps": round(sum(o.steps_taken for o in data) / total, 1),
"avg_cost_usd": round(sum(o.cost_usd for o in data) / total, 4),
"avg_duration_s": round(sum(o.duration_s for o in data) / total, 2),
}
# Simulate 20 agent runs
import random
tracker = SuccessRateTracker()
for i in range(20):
outcome = random.choices(
["success", "success", "success", "escalated", "failed"],
weights=[70, 10, 10, 7, 3]
)[0]
tracker.record(TaskOutcome(
task_id=f"T{i+1:03}", goal_type="refund",
outcome=outcome, steps_taken=random.randint(3, 8),
cost_usd=round(random.uniform(0.001, 0.01), 4),
duration_s=round(random.uniform(2, 15), 1)
))
report = tracker.report()
for k, v in report.items():
print(f" {k:20}: {v}")