5.1 KiB
5.1 KiB
Event-Driven Inference Training System - Implementation Summary
Architecture Decisions
Where Components Fit
-
InferenceTrainingCoordinator → TradingOrchestrator
- Rationale: Orchestrator already manages models, training, and predictions
- Benefits:
- Reduces duplication (orchestrator has model access)
- Centralizes coordination logic
- Reuses existing prediction storage
- Location:
core/orchestrator.py- initialized in__init__
-
DataProvider Subscription Methods → DataProvider
- Rationale: Data layer responsibility - emits events when data changes
- Methods Added:
subscribe_candle_completion()- Subscribe to candle completion eventssubscribe_pivot_events()- Subscribe to pivot events_emit_candle_completion()- Emit event when candle closes_emit_pivot_event()- Emit event when pivot detected
- Location:
core/data_provider.py
-
TrainingEventSubscriber Interface → RealTrainingAdapter
- Rationale: Training layer implements subscriber interface
- Methods Implemented:
on_candle_completion()- Train on candle completionon_pivot_event()- Train on pivot detection
- Location:
ANNOTATE/core/real_training_adapter.py
Code Duplication Reduction
Before (Duplicated Logic)
-
Data Retrieval:
_get_realtime_market_data()in RealTrainingAdapter- Similar logic in orchestrator
- Similar logic in data_provider
-
Prediction Storage:
store_transformer_prediction()in orchestratorinference_input_cachein RealTrainingAdapter sessionprediction_cachein app.py
-
Training Coordination:
- Training logic in RealTrainingAdapter
- Training logic in orchestrator
- Training logic in enhanced_realtime_training
After (Centralized)
-
Data Retrieval:
- Single source:
data_provider.get_historical_data()queries DuckDB - Coordinator retrieves data on-demand using references
- No copying - just timestamp ranges
- Single source:
-
Prediction Storage:
- Orchestrator's
inference_training_coordinatormanages references - References stored in coordinator (not copied)
- Data retrieved from DuckDB when needed
- Orchestrator's
-
Training Coordination:
- Orchestrator's coordinator handles event distribution
- RealTrainingAdapter implements subscriber interface
- Single training lock in RealTrainingAdapter
Implementation Status
✅ Completed
-
InferenceTrainingCoordinator (
inference_training_system.py)- Reference-based storage
- Event subscription system
- Data retrieval from DuckDB
-
DataProvider Extensions (
data_provider.py)subscribe_candle_completion()methodsubscribe_pivot_events()method_emit_candle_completion()method_emit_pivot_event()method- Event emission in
_update_candle()
-
Orchestrator Integration (
orchestrator.py)- Coordinator initialized in
__init__ - Accessible via
orchestrator.inference_training_coordinator
- Coordinator initialized in
-
RealTrainingAdapter Integration (
real_training_adapter.py)- Uses orchestrator's coordinator
- Implements
TrainingEventSubscriberinterface on_candle_completion()methodon_pivot_event()method_register_inference_frame()method- Helper methods for batch creation
⚠️ Needs Completion
-
Pivot Event Emission
- DataProvider needs to detect pivots and emit events
- Currently pivots are calculated but not emitted as events
- Need to integrate with WilliamsMarketStructure pivot detection
-
Norm Params Storage
- Currently norm_params are calculated on retrieval
- Could be stored in reference during registration for efficiency
- Need to pass norm_params from
_get_realtime_market_data()to_register_inference_frame()
-
Device Handling
- Ensure tensors are on correct device when retrieved from DuckDB
- May need to store device info in reference
-
Testing
- Test candle completion events
- Test pivot events
- Test data retrieval from DuckDB
- Test training on inference frames
Key Benefits
- Memory Efficient: No copying 600 candles every second
- Event-Driven: Clean separation of concerns
- Flexible: Supports time-based (candles) and event-based (pivots)
- Centralized: Coordinator in orchestrator reduces duplication
- Extensible: Easy to add new training methods or event types
Next Steps
-
Complete Pivot Event Emission
- Add pivot detection in DataProvider
- Emit events when L2L, L2H, etc. detected
-
Store Norm Params During Registration
- Pass norm_params from prediction to registration
- Store in reference for faster retrieval
-
Add Device Info to References
- Store device in InferenceFrameReference
- Use when creating tensors
-
Remove Old Caching Code
- Remove
inference_input_cachefrom session - Remove
_make_realtime_prediction_with_cache()(deprecated) - Clean up duplicate code
- Remove
-
Extend DuckDB Schema
- Add MA indicators to ohlcv_data
- Create pivot_points table
- Store technical indicators