Spaces:
Sleeping
Sleeping
import time | |
from functools import wraps | |
from collections import defaultdict | |
import numpy as np | |
class PerformanceMonitor: | |
def __init__(self): | |
self.response_times = defaultdict(list) | |
self.success_counts = defaultdict(int) | |
self.total_counts = defaultdict(int) | |
self.problem_types = defaultdict(int) | |
self.total_problems = 0 | |
def record_response_time(self, model_type: str, time: float): | |
"""Record response time for a model""" | |
self.response_times[model_type].append(time) | |
def record_success(self, model_type: str, success: bool): | |
"""Record success/failure for a model""" | |
self.total_counts[model_type] += 1 | |
if success: | |
self.success_counts[model_type] += 1 | |
def record_problem_type(self, problem_type: str): | |
"""Record problem type""" | |
self.problem_types[problem_type] += 1 | |
self.total_problems += 1 | |
def get_statistics(self) -> dict: | |
"""Get current performance statistics""" | |
stats = {} | |
# Calculate average response times | |
for model_type, times in self.response_times.items(): | |
if times: | |
stats[f'{model_type}_avg_response_time'] = np.mean(times) | |
# Calculate success rates | |
for model_type in self.total_counts.keys(): | |
total = self.total_counts[model_type] | |
if total > 0: | |
success_rate = (self.success_counts[model_type] / total) * 100 | |
stats[f'{model_type}_success_rate'] = success_rate | |
# Calculate problem type distribution | |
if self.total_problems > 0: | |
distribution = { | |
ptype: (count / self.total_problems) * 100 | |
for ptype, count in self.problem_types.items() | |
} | |
stats['problem_type_distribution'] = distribution | |
return stats | |
def measure_time(func): | |
"""Decorator to measure function execution time""" | |
def wrapper(*args, **kwargs): | |
start_time = time.time() | |
result = func(*args, **kwargs) | |
end_time = time.time() | |
return result, end_time - start_time | |
return wrapper | |