agent-browser / app /core /scoring.py
anileo1's picture
Add agentic web browser app and frontend
78bccb2
Raw
History Blame Contribute Delete
2.03 kB
"""
Scoring system for evaluating agent browsing interactions.
Five dimensions, each 0.0–1.0:
- Completeness: Was the information found?
- Confidence: How confident is the agent in its answer?
- Efficiency: How few steps did it take relative to the max?
- Speed: How fast was the run relative to a baseline?
- Reliability: Did it complete successfully without errors?
Overall score is a weighted average of these dimensions.
"""
WEIGHTS = {
"completeness": 0.30,
"confidence": 0.25,
"efficiency": 0.15,
"speed": 0.10,
"reliability": 0.20,
}
# Baseline: runs under this duration (seconds) get a perfect speed score
SPEED_BASELINE_SECONDS = 60.0
def compute_scores(
found: bool,
confidence: float,
steps_taken: int,
max_steps: int,
duration_seconds: float,
errors_encountered: int,
) -> dict:
completeness = 1.0 if found else 0.0
confidence_score = max(0.0, min(1.0, confidence))
# Fewer steps = better. 1 step = 1.0, max_steps = 0.0
if max_steps <= 1:
efficiency = 1.0
else:
efficiency = max(0.0, 1.0 - (steps_taken - 1) / (max_steps - 1))
# Faster = better. Under baseline = 1.0, scales down linearly to 0 at 5x baseline
if duration_seconds <= SPEED_BASELINE_SECONDS:
speed = 1.0
else:
speed = max(0.0, 1.0 - (duration_seconds - SPEED_BASELINE_SECONDS) / (4 * SPEED_BASELINE_SECONDS))
# Base reliability from code errors: each error reduces by 0.25
reliability = max(0.0, 1.0 - errors_encountered * 0.25)
# If the task failed (not found), cap reliability at 0.5
if not found:
reliability = min(reliability, 0.5)
scores = {
"completeness": round(completeness, 3),
"confidence": round(confidence_score, 3),
"efficiency": round(efficiency, 3),
"speed": round(speed, 3),
"reliability": round(reliability, 3),
}
overall = sum(scores[k] * WEIGHTS[k] for k in WEIGHTS)
scores["overall"] = round(overall, 3)
return scores