wip model CP storage/loading,

models are aware of current position
fix kill stale procc task
This commit is contained in:
Dobromir Popov
2025-07-29 14:51:40 +03:00
parent f34b2a46a2
commit afde58bc40
7 changed files with 472 additions and 82 deletions

View File

@ -239,8 +239,18 @@ class CleanTradingDashboard:
self._cached_live_balance: float = 0.0
# ENHANCED: Model control toggles - separate inference and training
# Initialize with defaults, will be updated from orchestrator's persisted state
self.dqn_inference_enabled = True # Default: enabled
self.dqn_training_enabled = True # Default: enabled
self.cnn_inference_enabled = True
self.cnn_training_enabled = True
self.cob_rl_inference_enabled = True # Default: enabled
self.cob_rl_training_enabled = True # Default: enabled
self.decision_fusion_inference_enabled = True # Default: enabled
self.decision_fusion_training_enabled = True # Default: enabled
# Load persisted UI state from orchestrator
self._sync_ui_state_from_orchestrator()
# Trading mode and cold start settings from config
from core.config import get_config
@ -254,8 +264,6 @@ class CleanTradingDashboard:
self.cold_start_enabled = config.get('cold_start', {}).get('enabled', True)
logger.info(f"Dashboard initialized - Trading Mode: {'LIVE' if self.trading_mode_live else 'SIM'}, Cold Start: {'ON' if self.cold_start_enabled else 'OFF'}")
self.cnn_inference_enabled = True
self.cnn_training_enabled = True
# Leverage management - adjustable x1 to x100
self.current_leverage = 50 # Default x50 leverage
@ -1145,12 +1153,12 @@ class CleanTradingDashboard:
for model_name in ["dqn", "cnn", "cob_rl", "decision_fusion"]:
toggle_states[model_name] = self.orchestrator.get_model_toggle_state(model_name)
else:
# Fallback to dashboard state
# Fallback to dashboard state - use actual dashboard state variables
toggle_states = {
"dqn": {"inference_enabled": self.dqn_inference_enabled, "training_enabled": self.dqn_training_enabled},
"cnn": {"inference_enabled": self.cnn_inference_enabled, "training_enabled": self.cnn_training_enabled},
"cob_rl": {"inference_enabled": True, "training_enabled": True},
"decision_fusion": {"inference_enabled": True, "training_enabled": True}
"cob_rl": {"inference_enabled": self.cob_rl_inference_enabled, "training_enabled": self.cob_rl_training_enabled},
"decision_fusion": {"inference_enabled": self.decision_fusion_inference_enabled, "training_enabled": self.decision_fusion_training_enabled}
}
# Now using slow-interval-component (10s) - no batching needed
@ -1330,6 +1338,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("dqn", inference_enabled=enabled)
# Update dashboard state variable
self.dqn_inference_enabled = enabled
logger.info(f"DQN inference toggle: {enabled}")
return value
@ -1342,6 +1352,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("dqn", training_enabled=enabled)
# Update dashboard state variable
self.dqn_training_enabled = enabled
logger.info(f"DQN training toggle: {enabled}")
return value
@ -1354,6 +1366,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("cnn", inference_enabled=enabled)
# Update dashboard state variable
self.cnn_inference_enabled = enabled
logger.info(f"CNN inference toggle: {enabled}")
return value
@ -1366,6 +1380,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("cnn", training_enabled=enabled)
# Update dashboard state variable
self.cnn_training_enabled = enabled
logger.info(f"CNN training toggle: {enabled}")
return value
@ -1378,6 +1394,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("cob_rl", inference_enabled=enabled)
# Update dashboard state variable
self.cob_rl_inference_enabled = enabled
logger.info(f"COB RL inference toggle: {enabled}")
return value
@ -1390,6 +1408,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("cob_rl", training_enabled=enabled)
# Update dashboard state variable
self.cob_rl_training_enabled = enabled
logger.info(f"COB RL training toggle: {enabled}")
return value
@ -1402,6 +1422,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("decision_fusion", inference_enabled=enabled)
# Update dashboard state variable
self.decision_fusion_inference_enabled = enabled
logger.info(f"Decision Fusion inference toggle: {enabled}")
return value
@ -1414,6 +1436,8 @@ class CleanTradingDashboard:
if self.orchestrator:
enabled = bool(value and len(value) > 0) # Convert list to boolean
self.orchestrator.set_model_toggle_state("decision_fusion", training_enabled=enabled)
# Update dashboard state variable
self.decision_fusion_training_enabled = enabled
logger.info(f"Decision Fusion training toggle: {enabled}")
return value
"""Update cold start training mode"""
@ -3378,13 +3402,13 @@ class CleanTradingDashboard:
except Exception as e:
logger.debug(f"Error getting orchestrator model statistics: {e}")
# Ensure toggle_states are available
# Ensure toggle_states are available - use dashboard state variables as fallback
if toggle_states is None:
toggle_states = {
"dqn": {"inference_enabled": True, "training_enabled": True},
"cnn": {"inference_enabled": True, "training_enabled": True},
"cob_rl": {"inference_enabled": True, "training_enabled": True},
"decision_fusion": {"inference_enabled": True, "training_enabled": True}
"dqn": {"inference_enabled": self.dqn_inference_enabled, "training_enabled": self.dqn_training_enabled},
"cnn": {"inference_enabled": self.cnn_inference_enabled, "training_enabled": self.cnn_training_enabled},
"cob_rl": {"inference_enabled": self.cob_rl_inference_enabled, "training_enabled": self.cob_rl_training_enabled},
"decision_fusion": {"inference_enabled": self.decision_fusion_inference_enabled, "training_enabled": self.decision_fusion_training_enabled}
}
# Helper function to safely calculate improvement percentage
@ -8275,6 +8299,37 @@ class CleanTradingDashboard:
except Exception as e:
logger.error(f"Error handling trading decision: {e}")
def _sync_ui_state_from_orchestrator(self):
"""Sync dashboard UI state with orchestrator's persisted state"""
try:
if self.orchestrator and hasattr(self.orchestrator, 'model_toggle_states'):
# Get persisted states from orchestrator
toggle_states = self.orchestrator.model_toggle_states
# Update dashboard state variables for all models
if 'dqn' in toggle_states:
self.dqn_inference_enabled = toggle_states['dqn'].get('inference_enabled', True)
self.dqn_training_enabled = toggle_states['dqn'].get('training_enabled', True)
if 'cnn' in toggle_states:
self.cnn_inference_enabled = toggle_states['cnn'].get('inference_enabled', True)
self.cnn_training_enabled = toggle_states['cnn'].get('training_enabled', True)
# Add COB RL and Decision Fusion state sync
if 'cob_rl' in toggle_states:
self.cob_rl_inference_enabled = toggle_states['cob_rl'].get('inference_enabled', True)
self.cob_rl_training_enabled = toggle_states['cob_rl'].get('training_enabled', True)
if 'decision_fusion' in toggle_states:
self.decision_fusion_inference_enabled = toggle_states['decision_fusion'].get('inference_enabled', True)
self.decision_fusion_training_enabled = toggle_states['decision_fusion'].get('training_enabled', True)
logger.info(f"✅ UI state synced from orchestrator: DQN(inf:{self.dqn_inference_enabled}, train:{self.dqn_training_enabled}), CNN(inf:{self.cnn_inference_enabled}, train:{self.cnn_training_enabled}), COB_RL(inf:{getattr(self, 'cob_rl_inference_enabled', True)}, train:{getattr(self, 'cob_rl_training_enabled', True)}), Decision_Fusion(inf:{getattr(self, 'decision_fusion_inference_enabled', True)}, train:{getattr(self, 'decision_fusion_training_enabled', True)})")
else:
logger.debug("Orchestrator not available for UI state sync, using defaults")
except Exception as e:
logger.error(f"Error syncing UI state from orchestrator: {e}")
def _initialize_streaming(self):
"""Initialize data streaming"""
try: