anotation system operational

This commit is contained in:
Dobromir Popov
2025-10-18 18:41:58 +03:00
parent 3d91cb0e8f
commit 38d6a01f8e
12 changed files with 1996 additions and 116 deletions

View File

@@ -38,6 +38,7 @@ sys.path.insert(0, str(annotate_dir))
try:
from core.annotation_manager import AnnotationManager
from core.training_simulator import TrainingSimulator
from core.data_loader import HistoricalDataLoader, TimeRangeManager
except ImportError:
# Try alternative import path
import importlib.util
@@ -59,6 +60,16 @@ except ImportError:
train_module = importlib.util.module_from_spec(train_spec)
train_spec.loader.exec_module(train_module)
TrainingSimulator = train_module.TrainingSimulator
# Load data_loader
data_spec = importlib.util.spec_from_file_location(
"data_loader",
annotate_dir / "core" / "data_loader.py"
)
data_module = importlib.util.module_from_spec(data_spec)
data_spec.loader.exec_module(data_module)
HistoricalDataLoader = data_module.HistoricalDataLoader
TimeRangeManager = data_module.TimeRangeManager
# Setup logging
logging.basicConfig(
@@ -113,6 +124,10 @@ class AnnotationDashboard:
self.annotation_manager = AnnotationManager()
self.training_simulator = TrainingSimulator(self.orchestrator) if self.orchestrator else None
# Initialize data loader with existing DataProvider
self.data_loader = HistoricalDataLoader(self.data_provider) if self.data_provider else None
self.time_range_manager = TimeRangeManager(self.data_loader) if self.data_loader else None
# Setup routes
self._setup_routes()
@@ -191,24 +206,30 @@ class AnnotationDashboard:
data = request.get_json()
symbol = data.get('symbol', 'ETH/USDT')
timeframes = data.get('timeframes', ['1s', '1m', '1h', '1d'])
start_time = data.get('start_time')
end_time = data.get('end_time')
start_time_str = data.get('start_time')
end_time_str = data.get('end_time')
if not self.data_provider:
if not self.data_loader:
return jsonify({
'success': False,
'error': {
'code': 'DATA_PROVIDER_UNAVAILABLE',
'message': 'Data provider not available'
'code': 'DATA_LOADER_UNAVAILABLE',
'message': 'Data loader not available'
}
})
# Fetch data for each timeframe
# Parse time strings if provided
start_time = datetime.fromisoformat(start_time_str.replace('Z', '+00:00')) if start_time_str else None
end_time = datetime.fromisoformat(end_time_str.replace('Z', '+00:00')) if end_time_str else None
# Fetch data for each timeframe using data loader
chart_data = {}
for timeframe in timeframes:
df = self.data_provider.get_historical_data(
df = self.data_loader.get_data(
symbol=symbol,
timeframe=timeframe,
start_time=start_time,
end_time=end_time,
limit=500
)
@@ -313,8 +334,11 @@ class AnnotationDashboard:
}
})
# Generate test case
test_case = self.annotation_manager.generate_test_case(annotation)
# Generate test case with market context
test_case = self.annotation_manager.generate_test_case(
annotation,
data_provider=self.data_provider
)
return jsonify({
'success': True,
@@ -440,6 +464,36 @@ class AnnotationDashboard:
'message': str(e)
}
})
@self.server.route('/api/available-models', methods=['GET'])
def get_available_models():
"""Get list of available models"""
try:
if not self.training_simulator:
return jsonify({
'success': False,
'error': {
'code': 'TRAINING_UNAVAILABLE',
'message': 'Training simulator not available'
}
})
models = self.training_simulator.get_available_models()
return jsonify({
'success': True,
'models': models
})
except Exception as e:
logger.error(f"Error getting available models: {e}")
return jsonify({
'success': False,
'error': {
'code': 'MODEL_LIST_ERROR',
'message': str(e)
}
})
def run(self, host='127.0.0.1', port=8051, debug=False):
"""Run the application"""