Files
gogo2/ARCHITECTURE_REFACTORING_PLAN.md
Dobromir Popov bfaba556ea merge annotate /ANNOTATE/core into /core.
fix chart updates
2025-12-10 14:07:14 +02:00

171 lines
5.3 KiB
Markdown

# Architecture Refactoring Plan
## Current Issues
### 1. Duplicate Core Implementations
- **ANNOTATE/core/data_loader.py** vs **core/data_provider.py** - overlapping data loading
- **ANNOTATE/core/inference_training_system.py** vs **core/orchestrator.py** - overlapping training coordination
- **ANNOTATE/core/real_training_adapter.py** - should be in main core
- Multiple data models scattered across both cores
### 2. Import Dependencies
- Main core imports from ANNOTATE/core (wrong direction)
- Circular dependencies between systems
- Inconsistent data flow
### 3. Responsibilities Overlap
- Both orchestrator and InferenceTrainingCoordinator handle training
- Both data_provider and data_loader handle data fetching
- Duplicate model management
## Refactoring Strategy
### Phase 1: Move Core Classes to Main Core
#### 1.1 Move InferenceFrameReference to core/data_models.py
```python
# Move from: ANNOTATE/core/inference_training_system.py
# To: core/data_models.py
@dataclass
class InferenceFrameReference:
# ... existing implementation
```
#### 1.2 Integrate InferenceTrainingCoordinator into Orchestrator
```python
# In core/orchestrator.py - merge functionality instead of importing
class TradingOrchestrator:
def __init__(self):
# Integrate training coordination directly
self.training_event_subscribers = []
self.inference_frames = {}
# ... merge InferenceTrainingCoordinator methods
```
#### 1.3 Move RealTrainingAdapter to Main Core
```python
# Move from: ANNOTATE/core/real_training_adapter.py
# To: core/enhanced_rl_training_adapter.py (extend existing)
```
### Phase 2: Eliminate ANNOTATE/core/data_loader.py
#### 2.1 Extend Main DataProvider
```python
# In core/data_provider.py - add methods from HistoricalDataLoader
class DataProvider:
def get_data_for_annotation(self, symbol, timeframe, start_time=None, end_time=None, limit=2500, direction='latest'):
"""Method specifically for annotation UI needs"""
# Implement annotation-specific data loading
def get_multi_timeframe_data(self, symbol, timeframes, start_time=None, end_time=None, limit=2500):
"""Multi-timeframe data for annotation UI"""
# Implement multi-timeframe loading
```
#### 2.2 Update ANNOTATE App
```python
# In ANNOTATE/web/app.py
from core.data_provider import DataProvider # Use main data provider directly
class AnnotationDashboard:
def __init__(self):
# Use main data provider instead of wrapper
self.data_provider = DataProvider(config)
```
### Phase 3: Consolidate Training Systems
#### 3.1 Merge Training Responsibilities
```python
# In core/orchestrator.py
class TradingOrchestrator:
def subscribe_training_events(self, callback, event_types):
"""Unified training event subscription"""
def store_inference_frame(self, symbol, timeframe, prediction_data):
"""Store inference frames for training"""
def trigger_training_on_event(self, event_type, event_data):
"""Unified training trigger system"""
```
#### 3.2 Remove Duplicate Classes
- Delete ANNOTATE/core/inference_training_system.py
- Delete ANNOTATE/core/data_loader.py
- Move useful methods to main core classes
### Phase 4: Clean Architecture
#### 4.1 Single Data Flow
```
Exchange APIs → DataProvider → Orchestrator → Models
↓ ↓
ANNOTATE UI ← Training System
```
#### 4.2 Clear Responsibilities
- **core/data_provider.py**: All data fetching, caching, real-time integration
- **core/orchestrator.py**: All model coordination, training events, inference
- **core/data_models.py**: All shared data structures
- **ANNOTATE/**: UI only, no core logic
## Implementation Steps
### Step 1: Move InferenceFrameReference
1. Copy class to core/data_models.py
2. Update imports in orchestrator
3. Remove from ANNOTATE/core/
### Step 2: Integrate Training Coordination
1. Move InferenceTrainingCoordinator methods into orchestrator
2. Update ANNOTATE app to use orchestrator directly
3. Remove duplicate training system
### Step 3: Extend DataProvider
1. Add annotation-specific methods to main DataProvider
2. Update ANNOTATE app to use main DataProvider
3. Remove ANNOTATE/core/data_loader.py
### Step 4: Clean Up
1. Remove ANNOTATE/core/ directory entirely
2. Update all imports
3. Test live data flow
## Expected Benefits
### 1. Single Source of Truth
- One DataProvider handling all data
- One Orchestrator handling all training
- One set of data models
### 2. Proper Live Data Flow
- WebSocket → DataProvider → API → Charts
- No duplicate caching or stale data
### 3. Cleaner Architecture
- ANNOTATE becomes pure UI
- Core contains all business logic
- Clear dependency direction
### 4. Easier Maintenance
- No duplicate code to maintain
- Single place to fix issues
- Consistent behavior across apps
## Files to Modify
### Move/Merge:
- ANNOTATE/core/inference_training_system.py → core/orchestrator.py
- ANNOTATE/core/real_training_adapter.py → core/enhanced_rl_training_adapter.py
- InferenceFrameReference → core/data_models.py
### Update:
- ANNOTATE/web/app.py (use main core classes)
- core/orchestrator.py (integrate training coordination)
- core/data_provider.py (add annotation methods)
### Delete:
- ANNOTATE/core/data_loader.py
- ANNOTATE/core/inference_training_system.py (after merge)
- Entire ANNOTATE/core/ directory (eventually)