mcli-framework 7.9.5__py3-none-any.whl → 7.9.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mcli-framework might be problematic. Click here for more details.
- mcli/__init__.py +160 -0
- mcli/__main__.py +14 -0
- mcli/app/__init__.py +23 -0
- mcli/app/model/__init__.py +0 -0
- mcli/app/model_cmd.py +0 -2
- mcli/app/video/__init__.py +5 -0
- mcli/chat/__init__.py +34 -0
- mcli/lib/__init__.py +0 -0
- mcli/lib/api/__init__.py +0 -0
- mcli/lib/auth/__init__.py +1 -0
- mcli/lib/config/__init__.py +1 -0
- mcli/lib/erd/__init__.py +25 -0
- mcli/lib/files/__init__.py +0 -0
- mcli/lib/fs/__init__.py +1 -0
- mcli/lib/logger/__init__.py +3 -0
- mcli/lib/performance/__init__.py +17 -0
- mcli/lib/pickles/__init__.py +1 -0
- mcli/lib/secrets/__init__.py +10 -0
- mcli/lib/shell/__init__.py +0 -0
- mcli/lib/toml/__init__.py +1 -0
- mcli/lib/watcher/__init__.py +0 -0
- mcli/ml/__init__.py +16 -0
- mcli/ml/api/__init__.py +30 -0
- mcli/ml/api/routers/__init__.py +27 -0
- mcli/ml/auth/__init__.py +41 -0
- mcli/ml/backtesting/__init__.py +33 -0
- mcli/ml/backtesting/run.py +5 -3
- mcli/ml/cli/__init__.py +5 -0
- mcli/ml/config/__init__.py +33 -0
- mcli/ml/configs/__init__.py +16 -0
- mcli/ml/dashboard/__init__.py +12 -0
- mcli/ml/dashboard/components/__init__.py +7 -0
- mcli/ml/dashboard/pages/__init__.py +6 -0
- mcli/ml/data_ingestion/__init__.py +29 -0
- mcli/ml/database/__init__.py +40 -0
- mcli/ml/experimentation/__init__.py +29 -0
- mcli/ml/features/__init__.py +39 -0
- mcli/ml/mlops/__init__.py +19 -0
- mcli/ml/models/__init__.py +90 -0
- mcli/ml/models/ensemble_models.py +1 -0
- mcli/ml/models/recommendation_models.py +1 -0
- mcli/ml/monitoring/__init__.py +25 -0
- mcli/ml/optimization/__init__.py +27 -0
- mcli/ml/optimization/optimize.py +6 -4
- mcli/ml/predictions/__init__.py +5 -0
- mcli/ml/preprocessing/__init__.py +24 -0
- mcli/ml/scripts/__init__.py +1 -0
- mcli/ml/serving/__init__.py +1 -0
- mcli/ml/serving/serve.py +2 -2
- mcli/ml/trading/__init__.py +63 -0
- mcli/ml/training/__init__.py +7 -0
- mcli/ml/training/train.py +14 -7
- mcli/mygroup/__init__.py +3 -0
- mcli/public/__init__.py +1 -0
- mcli/public/commands/__init__.py +2 -0
- mcli/self/__init__.py +3 -0
- mcli/workflow/__init__.py +0 -0
- mcli/workflow/daemon/__init__.py +15 -0
- mcli/workflow/dashboard/__init__.py +5 -0
- mcli/workflow/doc_convert.py +213 -115
- mcli/workflow/docker/__init__.py +0 -0
- mcli/workflow/file/__init__.py +0 -0
- mcli/workflow/gcloud/__init__.py +1 -0
- mcli/workflow/git_commit/__init__.py +0 -0
- mcli/workflow/interview/__init__.py +0 -0
- mcli/workflow/politician_trading/__init__.py +4 -0
- mcli/workflow/registry/__init__.py +0 -0
- mcli/workflow/repo/__init__.py +0 -0
- mcli/workflow/scheduler/__init__.py +25 -0
- mcli/workflow/search/__init__.py +0 -0
- mcli/workflow/sync/__init__.py +5 -0
- mcli/workflow/videos/__init__.py +1 -0
- mcli/workflow/wakatime/__init__.py +80 -0
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/METADATA +1 -1
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/RECORD +79 -14
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/WHEEL +0 -0
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/entry_points.txt +0 -0
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/licenses/LICENSE +0 -0
- {mcli_framework-7.9.5.dist-info → mcli_framework-7.9.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Database models and utilities"""
|
|
2
|
+
|
|
3
|
+
from .models import (
|
|
4
|
+
Alert,
|
|
5
|
+
BacktestResult,
|
|
6
|
+
Base,
|
|
7
|
+
DataVersion,
|
|
8
|
+
Experiment,
|
|
9
|
+
FeatureSet,
|
|
10
|
+
Model,
|
|
11
|
+
Politician,
|
|
12
|
+
Portfolio,
|
|
13
|
+
Prediction,
|
|
14
|
+
StockData,
|
|
15
|
+
Trade,
|
|
16
|
+
User,
|
|
17
|
+
)
|
|
18
|
+
from .session import AsyncSessionLocal, SessionLocal, async_engine, engine, get_async_db, get_db
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"Base",
|
|
22
|
+
"User",
|
|
23
|
+
"Trade",
|
|
24
|
+
"Politician",
|
|
25
|
+
"StockData",
|
|
26
|
+
"Prediction",
|
|
27
|
+
"Portfolio",
|
|
28
|
+
"Alert",
|
|
29
|
+
"BacktestResult",
|
|
30
|
+
"Experiment",
|
|
31
|
+
"Model",
|
|
32
|
+
"FeatureSet",
|
|
33
|
+
"DataVersion",
|
|
34
|
+
"get_db",
|
|
35
|
+
"get_async_db",
|
|
36
|
+
"SessionLocal",
|
|
37
|
+
"AsyncSessionLocal",
|
|
38
|
+
"engine",
|
|
39
|
+
"async_engine",
|
|
40
|
+
]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""ML Experimentation and A/B Testing Framework"""
|
|
2
|
+
|
|
3
|
+
from .ab_testing import (
|
|
4
|
+
ABTestingFramework,
|
|
5
|
+
ExperimentConfig,
|
|
6
|
+
ExperimentResult,
|
|
7
|
+
ExperimentStatus,
|
|
8
|
+
Metric,
|
|
9
|
+
MetricsCollector,
|
|
10
|
+
StatisticalAnalyzer,
|
|
11
|
+
TrafficSplitter,
|
|
12
|
+
UserAssignment,
|
|
13
|
+
Variant,
|
|
14
|
+
VariantType,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"ABTestingFramework",
|
|
19
|
+
"ExperimentConfig",
|
|
20
|
+
"Variant",
|
|
21
|
+
"VariantType",
|
|
22
|
+
"Metric",
|
|
23
|
+
"ExperimentStatus",
|
|
24
|
+
"ExperimentResult",
|
|
25
|
+
"UserAssignment",
|
|
26
|
+
"TrafficSplitter",
|
|
27
|
+
"MetricsCollector",
|
|
28
|
+
"StatisticalAnalyzer",
|
|
29
|
+
]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Feature Engineering Module for Stock Recommendation Models"""
|
|
2
|
+
|
|
3
|
+
from .ensemble_features import (
|
|
4
|
+
DynamicFeatureSelector,
|
|
5
|
+
EnsembleFeatureBuilder,
|
|
6
|
+
FeatureInteractionEngine,
|
|
7
|
+
)
|
|
8
|
+
from .political_features import (
|
|
9
|
+
CongressionalTrackingFeatures,
|
|
10
|
+
PolicyImpactFeatures,
|
|
11
|
+
PoliticalInfluenceFeatures,
|
|
12
|
+
)
|
|
13
|
+
from .recommendation_engine import (
|
|
14
|
+
RecommendationConfig,
|
|
15
|
+
RecommendationResult,
|
|
16
|
+
StockRecommendationEngine,
|
|
17
|
+
)
|
|
18
|
+
from .stock_features import (
|
|
19
|
+
CrossAssetFeatures,
|
|
20
|
+
MarketRegimeFeatures,
|
|
21
|
+
StockRecommendationFeatures,
|
|
22
|
+
TechnicalIndicatorFeatures,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"StockRecommendationFeatures",
|
|
27
|
+
"TechnicalIndicatorFeatures",
|
|
28
|
+
"MarketRegimeFeatures",
|
|
29
|
+
"CrossAssetFeatures",
|
|
30
|
+
"PoliticalInfluenceFeatures",
|
|
31
|
+
"CongressionalTrackingFeatures",
|
|
32
|
+
"PolicyImpactFeatures",
|
|
33
|
+
"EnsembleFeatureBuilder",
|
|
34
|
+
"FeatureInteractionEngine",
|
|
35
|
+
"DynamicFeatureSelector",
|
|
36
|
+
"StockRecommendationEngine",
|
|
37
|
+
"RecommendationConfig",
|
|
38
|
+
"RecommendationResult",
|
|
39
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""MLOps components for ML pipeline management"""
|
|
2
|
+
|
|
3
|
+
from .experiment_tracker import ExperimentRun, ExperimentTracker, MLflowConfig, ModelRegistry
|
|
4
|
+
from .model_serving import ModelEndpoint, ModelServer, PredictionService
|
|
5
|
+
from .pipeline_orchestrator import MLPipeline, PipelineConfig, PipelineExecutor, PipelineStep
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"ExperimentTracker",
|
|
9
|
+
"ModelRegistry",
|
|
10
|
+
"MLflowConfig",
|
|
11
|
+
"ExperimentRun",
|
|
12
|
+
"ModelServer",
|
|
13
|
+
"PredictionService",
|
|
14
|
+
"ModelEndpoint",
|
|
15
|
+
"MLPipeline",
|
|
16
|
+
"PipelineStep",
|
|
17
|
+
"PipelineConfig",
|
|
18
|
+
"PipelineExecutor",
|
|
19
|
+
]
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""ML Models for Stock Recommendation System"""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
from .base_models import BaseStockModel, ModelMetrics, ValidationResult
|
|
9
|
+
from .ensemble_models import (
|
|
10
|
+
AttentionStockPredictor,
|
|
11
|
+
CNNFeatureExtractor,
|
|
12
|
+
DeepEnsembleModel,
|
|
13
|
+
EnsembleConfig,
|
|
14
|
+
EnsembleTrainer,
|
|
15
|
+
LSTMStockPredictor,
|
|
16
|
+
ModelConfig,
|
|
17
|
+
TransformerStockModel,
|
|
18
|
+
)
|
|
19
|
+
from .recommendation_models import (
|
|
20
|
+
RecommendationConfig,
|
|
21
|
+
RecommendationTrainer,
|
|
22
|
+
StockRecommendationModel,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Model registry
|
|
26
|
+
_loaded_models: Dict[str, Any] = {}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
async def load_production_models():
|
|
30
|
+
"""Load production models into memory"""
|
|
31
|
+
from mcli.ml.config import settings
|
|
32
|
+
from mcli.ml.logging import get_logger
|
|
33
|
+
|
|
34
|
+
logger = get_logger(__name__)
|
|
35
|
+
model_dir = settings.model.model_dir
|
|
36
|
+
|
|
37
|
+
if not model_dir.exists():
|
|
38
|
+
model_dir.mkdir(parents=True, exist_ok=True)
|
|
39
|
+
return
|
|
40
|
+
|
|
41
|
+
for model_path in model_dir.glob("*.pt"):
|
|
42
|
+
try:
|
|
43
|
+
model_id = model_path.stem
|
|
44
|
+
model = torch.load(model_path, map_location=settings.model.device)
|
|
45
|
+
_loaded_models[model_id] = model
|
|
46
|
+
logger.info(f"Loaded model: {model_id}")
|
|
47
|
+
except Exception as e:
|
|
48
|
+
logger.error(f"Failed to load model {model_path}: {e}")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
async def get_model_by_id(model_id: str):
|
|
52
|
+
"""Get loaded model by ID"""
|
|
53
|
+
from mcli.ml.config import settings
|
|
54
|
+
|
|
55
|
+
if model_id not in _loaded_models:
|
|
56
|
+
# Try to load from disk
|
|
57
|
+
model_path = settings.model.model_dir / f"{model_id}.pt"
|
|
58
|
+
if model_path.exists():
|
|
59
|
+
_loaded_models[model_id] = torch.load(model_path, map_location=settings.model.device)
|
|
60
|
+
|
|
61
|
+
return _loaded_models.get(model_id)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def initialize_models():
|
|
65
|
+
"""Initialize models on startup"""
|
|
66
|
+
from mcli.ml.logging import get_logger
|
|
67
|
+
|
|
68
|
+
logger = get_logger(__name__)
|
|
69
|
+
logger.info("Initializing ML models...")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
__all__ = [
|
|
73
|
+
"DeepEnsembleModel",
|
|
74
|
+
"AttentionStockPredictor",
|
|
75
|
+
"TransformerStockModel",
|
|
76
|
+
"LSTMStockPredictor",
|
|
77
|
+
"CNNFeatureExtractor",
|
|
78
|
+
"EnsembleTrainer",
|
|
79
|
+
"ModelConfig",
|
|
80
|
+
"EnsembleConfig",
|
|
81
|
+
"BaseStockModel",
|
|
82
|
+
"ModelMetrics",
|
|
83
|
+
"ValidationResult",
|
|
84
|
+
"StockRecommendationModel",
|
|
85
|
+
"RecommendationTrainer",
|
|
86
|
+
"RecommendationConfig",
|
|
87
|
+
"load_production_models",
|
|
88
|
+
"get_model_by_id",
|
|
89
|
+
"initialize_models",
|
|
90
|
+
]
|
|
@@ -10,6 +10,7 @@ import pandas as pd
|
|
|
10
10
|
import torch
|
|
11
11
|
import torch.nn as nn
|
|
12
12
|
import torch.nn.functional as F
|
|
13
|
+
|
|
13
14
|
from mcli.ml.models.base_models import BaseStockModel, ModelMetrics, ValidationResult
|
|
14
15
|
from mcli.ml.models.ensemble_models import DeepEnsembleModel, EnsembleConfig, ModelConfig
|
|
15
16
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""ML Model Monitoring and Drift Detection"""
|
|
2
|
+
|
|
3
|
+
from .drift_detection import (
|
|
4
|
+
AlertSeverity,
|
|
5
|
+
ConceptDriftDetector,
|
|
6
|
+
DataProfile,
|
|
7
|
+
DriftAlert,
|
|
8
|
+
DriftType,
|
|
9
|
+
ModelMetrics,
|
|
10
|
+
ModelMonitor,
|
|
11
|
+
OutlierDetector,
|
|
12
|
+
StatisticalDriftDetector,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"ModelMonitor",
|
|
17
|
+
"StatisticalDriftDetector",
|
|
18
|
+
"ConceptDriftDetector",
|
|
19
|
+
"OutlierDetector",
|
|
20
|
+
"DriftAlert",
|
|
21
|
+
"DriftType",
|
|
22
|
+
"AlertSeverity",
|
|
23
|
+
"ModelMetrics",
|
|
24
|
+
"DataProfile",
|
|
25
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Advanced Portfolio Optimization"""
|
|
2
|
+
|
|
3
|
+
from .portfolio_optimizer import (
|
|
4
|
+
AdvancedPortfolioOptimizer,
|
|
5
|
+
BaseOptimizer,
|
|
6
|
+
BlackLittermanOptimizer,
|
|
7
|
+
CVaROptimizer,
|
|
8
|
+
KellyCriterionOptimizer,
|
|
9
|
+
MeanVarianceOptimizer,
|
|
10
|
+
OptimizationConstraints,
|
|
11
|
+
OptimizationObjective,
|
|
12
|
+
PortfolioAllocation,
|
|
13
|
+
RiskParityOptimizer,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"AdvancedPortfolioOptimizer",
|
|
18
|
+
"OptimizationObjective",
|
|
19
|
+
"OptimizationConstraints",
|
|
20
|
+
"PortfolioAllocation",
|
|
21
|
+
"MeanVarianceOptimizer",
|
|
22
|
+
"RiskParityOptimizer",
|
|
23
|
+
"BlackLittermanOptimizer",
|
|
24
|
+
"CVaROptimizer",
|
|
25
|
+
"KellyCriterionOptimizer",
|
|
26
|
+
"BaseOptimizer",
|
|
27
|
+
]
|
mcli/ml/optimization/optimize.py
CHANGED
|
@@ -18,13 +18,15 @@ def cli():
|
|
|
18
18
|
@click.option("--end-date", required=True, help="End date (YYYY-MM-DD)")
|
|
19
19
|
@click.option("--risk-free-rate", default=0.02, help="Risk-free rate")
|
|
20
20
|
@click.option("--output", help="Output file for results")
|
|
21
|
-
def optimize_portfolio(
|
|
21
|
+
def optimize_portfolio(
|
|
22
|
+
symbols: str, start_date: str, end_date: str, risk_free_rate: float, output: str
|
|
23
|
+
):
|
|
22
24
|
"""Optimize portfolio allocation for given symbols."""
|
|
23
25
|
symbol_list = [s.strip() for s in symbols.split(",")]
|
|
24
26
|
info(f"Optimizing portfolio for: {', '.join(symbol_list)}")
|
|
25
27
|
info(f"Period: {start_date} to {end_date}")
|
|
26
28
|
info(f"Risk-free rate: {risk_free_rate:.2%}")
|
|
27
|
-
|
|
29
|
+
|
|
28
30
|
# TODO: Implement actual optimization
|
|
29
31
|
error("Portfolio optimization not yet implemented")
|
|
30
32
|
|
|
@@ -37,7 +39,7 @@ def efficient_frontier(symbols: str, points: int):
|
|
|
37
39
|
symbol_list = [s.strip() for s in symbols.split(",")]
|
|
38
40
|
info(f"Generating efficient frontier for: {', '.join(symbol_list)}")
|
|
39
41
|
info(f"Points: {points}")
|
|
40
|
-
|
|
42
|
+
|
|
41
43
|
# TODO: Implement efficient frontier generation
|
|
42
44
|
error("Efficient frontier generation not yet implemented")
|
|
43
45
|
|
|
@@ -48,4 +50,4 @@ def main():
|
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
if __name__ == "__main__":
|
|
51
|
-
main()
|
|
53
|
+
main()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""ML Data Preprocessing Module"""
|
|
2
|
+
|
|
3
|
+
from .data_cleaners import MissingValueHandler, OutlierDetector, TradingDataCleaner
|
|
4
|
+
from .feature_extractors import (
|
|
5
|
+
MarketFeatureExtractor,
|
|
6
|
+
PoliticianFeatureExtractor,
|
|
7
|
+
SentimentFeatureExtractor,
|
|
8
|
+
TemporalFeatureExtractor,
|
|
9
|
+
)
|
|
10
|
+
from .ml_pipeline import MLDataPipeline, MLDataPipelineConfig
|
|
11
|
+
from .politician_trading_preprocessor import PoliticianTradingPreprocessor
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"PoliticianTradingPreprocessor",
|
|
15
|
+
"PoliticianFeatureExtractor",
|
|
16
|
+
"MarketFeatureExtractor",
|
|
17
|
+
"TemporalFeatureExtractor",
|
|
18
|
+
"SentimentFeatureExtractor",
|
|
19
|
+
"TradingDataCleaner",
|
|
20
|
+
"OutlierDetector",
|
|
21
|
+
"MissingValueHandler",
|
|
22
|
+
"MLDataPipeline",
|
|
23
|
+
"MLDataPipelineConfig",
|
|
24
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""ML scripts module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Model serving module for MCLI ML system."""
|
mcli/ml/serving/serve.py
CHANGED
|
@@ -20,7 +20,7 @@ def start_server(model: str, port: int, host: str):
|
|
|
20
20
|
"""Start the model serving server."""
|
|
21
21
|
info(f"Starting model server for: {model}")
|
|
22
22
|
info(f"Serving on {host}:{port}")
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
# TODO: Implement actual model serving
|
|
25
25
|
error("Model serving functionality not yet implemented")
|
|
26
26
|
|
|
@@ -47,4 +47,4 @@ def main():
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
if __name__ == "__main__":
|
|
50
|
-
main()
|
|
50
|
+
main()
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Trading module for portfolio management and trade execution"""
|
|
2
|
+
|
|
3
|
+
from mcli.ml.trading.alpaca_client import (
|
|
4
|
+
AlpacaTradingClient,
|
|
5
|
+
create_trading_client,
|
|
6
|
+
get_alpaca_config_from_env,
|
|
7
|
+
)
|
|
8
|
+
from mcli.ml.trading.models import ( # Enums; Database models; Pydantic models
|
|
9
|
+
OrderCreate,
|
|
10
|
+
OrderResponse,
|
|
11
|
+
OrderSide,
|
|
12
|
+
OrderStatus,
|
|
13
|
+
OrderType,
|
|
14
|
+
Portfolio,
|
|
15
|
+
PortfolioCreate,
|
|
16
|
+
PortfolioPerformanceSnapshot,
|
|
17
|
+
PortfolioResponse,
|
|
18
|
+
PortfolioType,
|
|
19
|
+
Position,
|
|
20
|
+
PositionResponse,
|
|
21
|
+
PositionSide,
|
|
22
|
+
RiskLevel,
|
|
23
|
+
TradingAccount,
|
|
24
|
+
TradingAccountCreate,
|
|
25
|
+
TradingOrder,
|
|
26
|
+
TradingSignal,
|
|
27
|
+
TradingSignalResponse,
|
|
28
|
+
)
|
|
29
|
+
from mcli.ml.trading.paper_trading import PaperTradingEngine
|
|
30
|
+
from mcli.ml.trading.risk_management import RiskManager
|
|
31
|
+
from mcli.ml.trading.trading_service import TradingService
|
|
32
|
+
|
|
33
|
+
__all__ = [
|
|
34
|
+
# Enums
|
|
35
|
+
"OrderStatus",
|
|
36
|
+
"OrderType",
|
|
37
|
+
"OrderSide",
|
|
38
|
+
"PositionSide",
|
|
39
|
+
"PortfolioType",
|
|
40
|
+
"RiskLevel",
|
|
41
|
+
# Database models
|
|
42
|
+
"TradingAccount",
|
|
43
|
+
"Portfolio",
|
|
44
|
+
"Position",
|
|
45
|
+
"TradingOrder",
|
|
46
|
+
"PortfolioPerformanceSnapshot",
|
|
47
|
+
"TradingSignal",
|
|
48
|
+
# Pydantic models
|
|
49
|
+
"TradingAccountCreate",
|
|
50
|
+
"PortfolioCreate",
|
|
51
|
+
"OrderCreate",
|
|
52
|
+
"PositionResponse",
|
|
53
|
+
"OrderResponse",
|
|
54
|
+
"PortfolioResponse",
|
|
55
|
+
"TradingSignalResponse",
|
|
56
|
+
# Services
|
|
57
|
+
"TradingService",
|
|
58
|
+
"AlpacaTradingClient",
|
|
59
|
+
"create_trading_client",
|
|
60
|
+
"get_alpaca_config_from_env",
|
|
61
|
+
"RiskManager",
|
|
62
|
+
"PaperTradingEngine",
|
|
63
|
+
]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""ML model training module"""
|
|
2
|
+
|
|
3
|
+
from .train_model import PoliticianTradingNet, fetch_training_data
|
|
4
|
+
from .train_model import main as train_model
|
|
5
|
+
from .train_model import prepare_dataset
|
|
6
|
+
|
|
7
|
+
__all__ = ["PoliticianTradingNet", "train_model", "fetch_training_data", "prepare_dataset"]
|
mcli/ml/training/train.py
CHANGED
|
@@ -19,12 +19,19 @@ def cli():
|
|
|
19
19
|
@click.option("--batch-size", default=32, help="Batch size for training")
|
|
20
20
|
@click.option("--learning-rate", default=0.001, help="Learning rate")
|
|
21
21
|
@click.option("--output-dir", help="Directory to save trained model")
|
|
22
|
-
def train_model(
|
|
22
|
+
def train_model(
|
|
23
|
+
model_type: str,
|
|
24
|
+
dataset: str,
|
|
25
|
+
epochs: int,
|
|
26
|
+
batch_size: int,
|
|
27
|
+
learning_rate: float,
|
|
28
|
+
output_dir: str,
|
|
29
|
+
):
|
|
23
30
|
"""Train a model with the specified parameters."""
|
|
24
31
|
info(f"Training {model_type} model")
|
|
25
32
|
info(f"Dataset: {dataset}")
|
|
26
33
|
info(f"Epochs: {epochs}, Batch size: {batch_size}, Learning rate: {learning_rate}")
|
|
27
|
-
|
|
34
|
+
|
|
28
35
|
# TODO: Implement actual training logic
|
|
29
36
|
error("Model training functionality not yet implemented")
|
|
30
37
|
|
|
@@ -36,7 +43,7 @@ def resume_training(checkpoint: str, epochs: int):
|
|
|
36
43
|
"""Resume training from a checkpoint."""
|
|
37
44
|
info(f"Resuming training from: {checkpoint}")
|
|
38
45
|
info(f"Additional epochs: {epochs}")
|
|
39
|
-
|
|
46
|
+
|
|
40
47
|
# TODO: Implement resume functionality
|
|
41
48
|
error("Resume training not yet implemented")
|
|
42
49
|
|
|
@@ -46,14 +53,14 @@ def resume_training(checkpoint: str, epochs: int):
|
|
|
46
53
|
def train_politician_trading(output_dir: str):
|
|
47
54
|
"""Train the politician trading prediction model."""
|
|
48
55
|
info("Training politician trading prediction model...")
|
|
49
|
-
|
|
56
|
+
|
|
50
57
|
try:
|
|
51
58
|
# Import the actual training function
|
|
52
59
|
from mcli.ml.training.train_model import train_politician_trading_model
|
|
53
|
-
|
|
60
|
+
|
|
54
61
|
# Run the training
|
|
55
62
|
metrics = train_politician_trading_model(output_dir)
|
|
56
|
-
|
|
63
|
+
|
|
57
64
|
if metrics:
|
|
58
65
|
success(f"Training completed! Final loss: {metrics.get('final_loss', 'N/A')}")
|
|
59
66
|
else:
|
|
@@ -70,4 +77,4 @@ def main():
|
|
|
70
77
|
|
|
71
78
|
|
|
72
79
|
if __name__ == "__main__":
|
|
73
|
-
main()
|
|
80
|
+
main()
|
mcli/mygroup/__init__.py
ADDED
mcli/public/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# logger.info("I am in mcli.public.__init__.py")
|
mcli/self/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Daemon service for command management and execution.
|
|
3
|
+
|
|
4
|
+
This module provides a background daemon service that can store, manage, and execute
|
|
5
|
+
commands written in various programming languages (Python, Node.js, Lua, Shell).
|
|
6
|
+
Commands are stored in a SQLite database with embeddings for similarity search and
|
|
7
|
+
hierarchical grouping.
|
|
8
|
+
|
|
9
|
+
The daemon CLI commands are now loaded from portable JSON files in ~/.mcli/commands/
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from .daemon import Command, CommandExecutor, DaemonService
|
|
13
|
+
|
|
14
|
+
# Export main components
|
|
15
|
+
__all__ = ["Command", "CommandExecutor", "DaemonService"]
|