(Hotfix): ConversationStats metrics loss for unregistered services (#10676)

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
Rohit Malhotra
2025-08-28 14:15:20 -04:00
committed by GitHub
parent 23713bfe8c
commit 7e3eabe777
2 changed files with 146 additions and 1 deletions

View File

@@ -36,7 +36,30 @@ class ConversationStats:
return
with self._save_lock:
pickled = pickle.dumps(self.service_to_metrics)
# Check for duplicate service IDs between restored and service metrics
duplicate_services = set(self.restored_metrics.keys()) & set(
self.service_to_metrics.keys()
)
if duplicate_services:
logger.error(
f'Duplicate service IDs found between restored and service metrics: {duplicate_services}. '
'This should not happen as registered services should be removed from restored_metrics. '
'Proceeding by preferring service_to_metrics values for duplicates.',
extra={
'conversation_id': self.conversation_id,
'duplicate_services': list(duplicate_services),
},
)
# Combine both restored metrics and service metrics to avoid data loss
# Start with restored metrics (for services not yet registered)
combined_metrics = self.restored_metrics.copy()
# Add service metrics (for registered services)
# Since we checked for duplicates above, this is safe
combined_metrics.update(self.service_to_metrics)
pickled = pickle.dumps(combined_metrics)
serialized_metrics = base64.b64encode(pickled).decode('utf-8')
self.file_store.write(self.metrics_path, serialized_metrics)
logger.info(