ETS integration and UI

This commit is contained in:
Dobromir Popov
2025-07-05 00:33:32 +03:00
parent d260e73f9a
commit 97d9bc97ee
4 changed files with 399 additions and 1 deletions

View File

@ -793,6 +793,135 @@ class DashboardComponentManager:
html.Span(f"{training_status.get('last_update', 'N/A')}", className="text-muted small")
]))
# Enhanced Training Statistics (if available)
if 'enhanced_training_stats' in metrics_data:
enhanced_stats = metrics_data['enhanced_training_stats']
if enhanced_stats and not enhanced_stats.get('error'):
content.append(html.Hr())
content.append(html.H6([
html.I(className="fas fa-rocket me-2 text-primary"),
"Enhanced Training System"
], className="mb-2"))
# Training system status
is_training = enhanced_stats.get('is_training', False)
training_iteration = enhanced_stats.get('training_iteration', 0)
content.append(html.Div([
html.Span("Status: ", className="text-muted small"),
html.Span("ACTIVE" if is_training else "INACTIVE",
className=f"small fw-bold {'text-success' if is_training else 'text-warning'}"),
html.Span(f" | Iteration: {training_iteration:,}", className="text-info small ms-2")
], className="mb-1"))
# Buffer statistics
exp_buffer_size = enhanced_stats.get('experience_buffer_size', 0)
priority_buffer_size = enhanced_stats.get('priority_buffer_size', 0)
content.append(html.Div([
html.Span("Experience Buffer: ", className="text-muted small"),
html.Span(f"{exp_buffer_size:,}", className="text-success small fw-bold"),
html.Span(" | Priority: ", className="text-muted small"),
html.Span(f"{priority_buffer_size:,}", className="text-warning small fw-bold")
], className="mb-1"))
# Data collection stats
if 'data_collection_stats' in enhanced_stats:
data_stats = enhanced_stats['data_collection_stats']
content.append(html.Div([
html.Span("Data: ", className="text-muted small"),
html.Span(f"OHLCV: {data_stats.get('ohlcv_1m_bars', 0)}", className="text-info small"),
html.Span(f" | Ticks: {data_stats.get('tick_data_points', 0)}", className="text-primary small"),
html.Span(f" | COB: {data_stats.get('cob_snapshots', 0)}", className="text-success small")
], className="mb-1"))
# Orchestrator Integration Stats (NEW)
if 'orchestrator_integration' in enhanced_stats:
orch_stats = enhanced_stats['orchestrator_integration']
content.append(html.Div([
html.Span("Integration: ", className="text-muted small"),
html.Span(f"Models: {orch_stats.get('models_connected', 0)}", className="text-success small"),
html.Span(f" | COB: {'ON' if orch_stats.get('cob_integration_active') else 'OFF'}",
className=f"small {'text-success' if orch_stats.get('cob_integration_active') else 'text-warning'}"),
html.Span(f" | Fusion: {'ON' if orch_stats.get('decision_fusion_enabled') else 'OFF'}",
className=f"small {'text-success' if orch_stats.get('decision_fusion_enabled') else 'text-warning'}"),
html.Span(f" | Symbols: {orch_stats.get('symbols_tracking', 0)}", className="text-info small")
], className="mb-1"))
content.append(html.Div([
html.Span("Decisions: ", className="text-muted small"),
html.Span(f"{orch_stats.get('recent_decisions_count', 0):,}", className="text-primary small fw-bold"),
html.Span(" | RT Processing: ", className="text-muted small"),
html.Span("ON" if orch_stats.get('realtime_processing') else "OFF",
className=f"small {'text-success' if orch_stats.get('realtime_processing') else 'text-muted'}")
], className="mb-1"))
# Model Training Status (NEW)
if 'model_training_status' in enhanced_stats:
model_status = enhanced_stats['model_training_status']
content.append(html.Div([
html.Span("Model Status: ", className="text-muted small"),
html.Br()
] + [
html.Div([
html.Span(f"{model_name.upper()}: ", className="text-muted small"),
html.Span("LOADED" if status.get('model_loaded') else "MISSING",
className=f"small {'text-success' if status.get('model_loaded') else 'text-danger'}"),
html.Span(f" | Mem: {status.get('memory_usage', 0):,}", className="text-info small"),
html.Span(f" | Steps: {status.get('training_steps', 0):,}", className="text-warning small"),
*([html.Span(f" | Loss: {status['last_loss']:.4f}", className="text-primary small")]
if status.get('last_loss') is not None else [])
], className="ms-2 mb-1")
for model_name, status in model_status.items()
], className="mb-1"))
# Prediction Tracking Stats (NEW)
if 'prediction_tracking' in enhanced_stats:
pred_stats = enhanced_stats['prediction_tracking']
content.append(html.Div([
html.Span("Predictions: ", className="text-muted small"),
html.Span(f"DQN: {pred_stats.get('dqn_predictions_tracked', 0):,}", className="text-success small"),
html.Span(f" | CNN: {pred_stats.get('cnn_predictions_tracked', 0):,}", className="text-warning small"),
html.Span(f" | Accuracy: {pred_stats.get('accuracy_history_tracked', 0):,}", className="text-info small")
], className="mb-1"))
symbols_with_preds = pred_stats.get('symbols_with_predictions', [])
if symbols_with_preds:
content.append(html.Div([
html.Span("Active Symbols: ", className="text-muted small"),
html.Span(", ".join(symbols_with_preds), className="text-primary small fw-bold")
], className="mb-1"))
# COB Integration Stats (NEW)
if 'cob_integration_stats' in enhanced_stats:
cob_stats = enhanced_stats['cob_integration_stats']
content.append(html.Div([
html.Span("COB Data: ", className="text-muted small"),
html.Span(f"Symbols: {len(cob_stats.get('latest_cob_data_symbols', []))}", className="text-success small"),
html.Span(f" | Features: {len(cob_stats.get('cob_features_available', []))}", className="text-warning small"),
html.Span(f" | States: {len(cob_stats.get('cob_state_available', []))}", className="text-info small")
], className="mb-1"))
# Recent losses
if enhanced_stats.get('dqn_recent_loss') is not None:
content.append(html.Div([
html.Span("DQN Loss: ", className="text-muted small"),
html.Span(f"{enhanced_stats['dqn_recent_loss']:.4f}", className="text-info small fw-bold")
], className="mb-1"))
if enhanced_stats.get('cnn_recent_loss') is not None:
content.append(html.Div([
html.Span("CNN Loss: ", className="text-muted small"),
html.Span(f"{enhanced_stats['cnn_recent_loss']:.4f}", className="text-warning small fw-bold")
], className="mb-1"))
# Validation score
if enhanced_stats.get('recent_validation_score') is not None:
content.append(html.Div([
html.Span("Validation Score: ", className="text-muted small"),
html.Span(f"{enhanced_stats['recent_validation_score']:.3f}", className="text-primary small fw-bold")
], className="mb-1"))
return content
except Exception as e: