Smart_Code_Generator / agent /evaluator.py
SaiSankarSwarna's picture
Initial commit
3962d8b
Raw
History Blame Contribute Delete
1.97 kB
from collections import Counter
class Evaluator:
def compute_metrics(self, session: dict) -> dict:
iterations = session.get("iterations", [])
success = session.get("success", False)
total_time = session.get("total_time", 0.0)
n = len(iterations)
error_types = [
it["error"]["type"]
for it in iterations
if it.get("status") == "failed" and "error" in it
]
exec_times = [
it["execution"].get("elapsed", 0.0)
for it in iterations
if "execution" in it
]
code_lengths = [
len(it.get("code", "").splitlines())
for it in iterations
]
return {
"total_iterations": n,
"success": success,
"total_time_s": total_time,
"avg_exec_time_s": round(sum(exec_times) / len(exec_times), 3) if exec_times else 0,
"error_types": error_types,
"error_distribution": dict(Counter(error_types)),
"code_lengths": code_lengths,
"iterations_to_success": n if success else None,
}
def build_chart_data(self, iterations: list) -> dict:
labels = [f"Iter {it['iteration']}" for it in iterations]
statuses = [1 if it.get("status") == "success" else 0 for it in iterations]
exec_times = [it["execution"].get("elapsed", 0) for it in iterations if "execution" in it]
code_lengths = [len(it.get("code", "").splitlines()) for it in iterations]
error_types = [
it["error"]["type"]
for it in iterations
if it.get("status") == "failed" and "error" in it
]
error_dist = dict(Counter(error_types))
return {
"labels": labels,
"statuses": statuses,
"exec_times": exec_times,
"code_lengths": code_lengths,
"error_distribution": error_dist,
}