wip train

This commit is contained in:
Dobromir Popov
2025-07-27 20:34:51 +03:00
parent ff66cb8b79
commit d333681447
4 changed files with 160 additions and 49 deletions

View File

@ -2951,35 +2951,34 @@ class CleanTradingDashboard:
'last_training': None,
'inferences_per_second': 0.0,
'trainings_per_second': 0.0,
'prediction_count_24h': 0
'prediction_count_24h': 0,
'average_inference_time_ms': 0.0,
'average_training_time_ms': 0.0
}
try:
if self.orchestrator:
# Get recent predictions for timing analysis
recent_predictions = self.orchestrator.get_recent_model_predictions('ETH/USDT', model_name.lower())
if model_name.lower() in recent_predictions:
predictions = recent_predictions[model_name.lower()]
if predictions:
# Last inference time
last_pred = predictions[-1]
timing['last_inference'] = last_pred.get('timestamp', datetime.now())
# Calculate predictions per second (last 60 seconds)
now = datetime.now()
recent_preds = [p for p in predictions
if (now - p.get('timestamp', now)).total_seconds() <= 60]
timing['inferences_per_second'] = len(recent_preds) / 60.0
# 24h prediction count
preds_24h = [p for p in predictions
if (now - p.get('timestamp', now)).total_seconds() <= 86400]
timing['prediction_count_24h'] = len(preds_24h)
# For training timing, check model-specific training status
if hasattr(self.orchestrator, f'{model_name.lower()}_last_training'):
timing['last_training'] = getattr(self.orchestrator, f'{model_name.lower()}_last_training')
# Use the new model statistics system
model_stats = self.orchestrator.get_model_statistics(model_name.lower())
if model_stats:
# Last inference time
timing['last_inference'] = model_stats.last_inference_time
# Last training time
timing['last_training'] = model_stats.last_training_time
# Inference rate per second
timing['inferences_per_second'] = model_stats.inference_rate_per_second
# Training rate per second
timing['trainings_per_second'] = model_stats.training_rate_per_second
# 24h prediction count (approximate from total inferences)
timing['prediction_count_24h'] = model_stats.total_inferences
# Average timing data
timing['average_inference_time_ms'] = model_stats.average_inference_time_ms
timing['average_training_time_ms'] = model_stats.average_training_time_ms
except Exception as e:
logger.debug(f"Error getting timing info for {model_name}: {e}")
@ -3063,13 +3062,15 @@ class CleanTradingDashboard:
'created_at': dqn_state.get('created_at', 'Unknown'),
'performance_score': dqn_state.get('performance_score', 0.0)
},
# NEW: Timing information
'timing': {
'last_inference': dqn_timing['last_inference'].strftime('%H:%M:%S') if dqn_timing['last_inference'] else 'None',
'last_training': dqn_timing['last_training'].strftime('%H:%M:%S') if dqn_timing['last_training'] else 'None',
'inferences_per_second': f"{dqn_timing['inferences_per_second']:.2f}",
'predictions_24h': dqn_timing['prediction_count_24h']
},
# NEW: Timing information
'timing': {
'last_inference': dqn_timing['last_inference'].strftime('%H:%M:%S') if dqn_timing['last_inference'] else 'None',
'last_training': dqn_timing['last_training'].strftime('%H:%M:%S') if dqn_timing['last_training'] else 'None',
'inferences_per_second': f"{dqn_timing['inferences_per_second']:.2f}",
'predictions_24h': dqn_timing['prediction_count_24h'],
'average_inference_time_ms': f"{dqn_timing.get('average_inference_time_ms', 0):.1f}",
'average_training_time_ms': f"{dqn_timing.get('average_training_time_ms', 0):.1f}"
},
# NEW: Performance metrics for split-second decisions
'performance': self.get_model_performance_metrics().get('dqn', {})
}
@ -3143,7 +3144,9 @@ class CleanTradingDashboard:
'last_inference': cnn_timing['last_inference'].strftime('%H:%M:%S') if cnn_timing['last_inference'] else 'None',
'last_training': cnn_timing['last_training'].strftime('%H:%M:%S') if cnn_timing['last_training'] else 'None',
'inferences_per_second': f"{cnn_timing['inferences_per_second']:.2f}",
'predictions_24h': cnn_timing['prediction_count_24h']
'predictions_24h': cnn_timing['prediction_count_24h'],
'average_inference_time_ms': f"{cnn_timing.get('average_inference_time_ms', 0):.1f}",
'average_training_time_ms': f"{cnn_timing.get('average_training_time_ms', 0):.1f}"
},
# NEW: Performance metrics for split-second decisions
'performance': self.get_model_performance_metrics().get('cnn', {})