from prometheus_client import Counter, Histogram, Gauge
import time
class PrometheusLatencyTracker:
def __init__(self):
# Define metrics
self.request_count = Counter(
'praisonai_requests_total',
'Total number of requests',
['agent', 'phase']
)
self.request_duration = Histogram(
'praisonai_request_duration_seconds',
'Request duration in seconds',
['agent', 'phase'],
buckets=(0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0)
)
self.active_requests = Gauge(
'praisonai_active_requests',
'Number of active requests',
['agent']
)
def track_request(self, agent_name, phase):
self.request_count.labels(agent=agent_name, phase=phase).inc()
self.active_requests.labels(agent=agent_name).inc()
start_time = time.time()
def complete():
duration = time.time() - start_time
self.request_duration.labels(
agent=agent_name,
phase=phase
).observe(duration)
self.active_requests.labels(agent=agent_name).dec()
return complete
# Usage with agent
prom_tracker = PrometheusLatencyTracker()
class MonitoredAgent(Agent):
def chat(self, message):
# Track overall request
complete_request = prom_tracker.track_request(self.name, "total")
try:
# Track planning
complete_planning = prom_tracker.track_request(self.name, "planning")
plan = self.plan(message)
complete_planning()
# Track execution
complete_execution = prom_tracker.track_request(self.name, "execution")
result = self.execute(plan)
complete_execution()
return result
finally:
complete_request()