mcli-framework 7.0.0__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/app/chat_cmd.py +42 -0
- mcli/app/commands_cmd.py +226 -0
- mcli/app/completion_cmd.py +216 -0
- mcli/app/completion_helpers.py +288 -0
- mcli/app/cron_test_cmd.py +697 -0
- mcli/app/logs_cmd.py +419 -0
- mcli/app/main.py +492 -0
- mcli/app/model/model.py +1060 -0
- mcli/app/model_cmd.py +227 -0
- mcli/app/redis_cmd.py +269 -0
- mcli/app/video/video.py +1114 -0
- mcli/app/visual_cmd.py +303 -0
- mcli/chat/chat.py +2409 -0
- mcli/chat/command_rag.py +514 -0
- mcli/chat/enhanced_chat.py +652 -0
- mcli/chat/system_controller.py +1010 -0
- mcli/chat/system_integration.py +1016 -0
- mcli/cli.py +25 -0
- mcli/config.toml +20 -0
- mcli/lib/api/api.py +586 -0
- mcli/lib/api/daemon_client.py +203 -0
- mcli/lib/api/daemon_client_local.py +44 -0
- mcli/lib/api/daemon_decorator.py +217 -0
- mcli/lib/api/mcli_decorators.py +1032 -0
- mcli/lib/auth/auth.py +85 -0
- mcli/lib/auth/aws_manager.py +85 -0
- mcli/lib/auth/azure_manager.py +91 -0
- mcli/lib/auth/credential_manager.py +192 -0
- mcli/lib/auth/gcp_manager.py +93 -0
- mcli/lib/auth/key_manager.py +117 -0
- mcli/lib/auth/mcli_manager.py +93 -0
- mcli/lib/auth/token_manager.py +75 -0
- mcli/lib/auth/token_util.py +1011 -0
- mcli/lib/config/config.py +47 -0
- mcli/lib/discovery/__init__.py +1 -0
- mcli/lib/discovery/command_discovery.py +274 -0
- mcli/lib/erd/erd.py +1345 -0
- mcli/lib/erd/generate_graph.py +453 -0
- mcli/lib/files/files.py +76 -0
- mcli/lib/fs/fs.py +109 -0
- mcli/lib/lib.py +29 -0
- mcli/lib/logger/logger.py +611 -0
- mcli/lib/performance/optimizer.py +409 -0
- mcli/lib/performance/rust_bridge.py +502 -0
- mcli/lib/performance/uvloop_config.py +154 -0
- mcli/lib/pickles/pickles.py +50 -0
- mcli/lib/search/cached_vectorizer.py +479 -0
- mcli/lib/services/data_pipeline.py +460 -0
- mcli/lib/services/lsh_client.py +441 -0
- mcli/lib/services/redis_service.py +387 -0
- mcli/lib/shell/shell.py +137 -0
- mcli/lib/toml/toml.py +33 -0
- mcli/lib/ui/styling.py +47 -0
- mcli/lib/ui/visual_effects.py +634 -0
- mcli/lib/watcher/watcher.py +185 -0
- mcli/ml/api/app.py +215 -0
- mcli/ml/api/middleware.py +224 -0
- mcli/ml/api/routers/admin_router.py +12 -0
- mcli/ml/api/routers/auth_router.py +244 -0
- mcli/ml/api/routers/backtest_router.py +12 -0
- mcli/ml/api/routers/data_router.py +12 -0
- mcli/ml/api/routers/model_router.py +302 -0
- mcli/ml/api/routers/monitoring_router.py +12 -0
- mcli/ml/api/routers/portfolio_router.py +12 -0
- mcli/ml/api/routers/prediction_router.py +267 -0
- mcli/ml/api/routers/trade_router.py +12 -0
- mcli/ml/api/routers/websocket_router.py +76 -0
- mcli/ml/api/schemas.py +64 -0
- mcli/ml/auth/auth_manager.py +425 -0
- mcli/ml/auth/models.py +154 -0
- mcli/ml/auth/permissions.py +302 -0
- mcli/ml/backtesting/backtest_engine.py +502 -0
- mcli/ml/backtesting/performance_metrics.py +393 -0
- mcli/ml/cache.py +400 -0
- mcli/ml/cli/main.py +398 -0
- mcli/ml/config/settings.py +394 -0
- mcli/ml/configs/dvc_config.py +230 -0
- mcli/ml/configs/mlflow_config.py +131 -0
- mcli/ml/configs/mlops_manager.py +293 -0
- mcli/ml/dashboard/app.py +532 -0
- mcli/ml/dashboard/app_integrated.py +738 -0
- mcli/ml/dashboard/app_supabase.py +560 -0
- mcli/ml/dashboard/app_training.py +615 -0
- mcli/ml/dashboard/cli.py +51 -0
- mcli/ml/data_ingestion/api_connectors.py +501 -0
- mcli/ml/data_ingestion/data_pipeline.py +567 -0
- mcli/ml/data_ingestion/stream_processor.py +512 -0
- mcli/ml/database/migrations/env.py +94 -0
- mcli/ml/database/models.py +667 -0
- mcli/ml/database/session.py +200 -0
- mcli/ml/experimentation/ab_testing.py +845 -0
- mcli/ml/features/ensemble_features.py +607 -0
- mcli/ml/features/political_features.py +676 -0
- mcli/ml/features/recommendation_engine.py +809 -0
- mcli/ml/features/stock_features.py +573 -0
- mcli/ml/features/test_feature_engineering.py +346 -0
- mcli/ml/logging.py +85 -0
- mcli/ml/mlops/data_versioning.py +518 -0
- mcli/ml/mlops/experiment_tracker.py +377 -0
- mcli/ml/mlops/model_serving.py +481 -0
- mcli/ml/mlops/pipeline_orchestrator.py +614 -0
- mcli/ml/models/base_models.py +324 -0
- mcli/ml/models/ensemble_models.py +675 -0
- mcli/ml/models/recommendation_models.py +474 -0
- mcli/ml/models/test_models.py +487 -0
- mcli/ml/monitoring/drift_detection.py +676 -0
- mcli/ml/monitoring/metrics.py +45 -0
- mcli/ml/optimization/portfolio_optimizer.py +834 -0
- mcli/ml/preprocessing/data_cleaners.py +451 -0
- mcli/ml/preprocessing/feature_extractors.py +491 -0
- mcli/ml/preprocessing/ml_pipeline.py +382 -0
- mcli/ml/preprocessing/politician_trading_preprocessor.py +569 -0
- mcli/ml/preprocessing/test_preprocessing.py +294 -0
- mcli/ml/scripts/populate_sample_data.py +200 -0
- mcli/ml/tasks.py +400 -0
- mcli/ml/tests/test_integration.py +429 -0
- mcli/ml/tests/test_training_dashboard.py +387 -0
- mcli/public/oi/oi.py +15 -0
- mcli/public/public.py +4 -0
- mcli/self/self_cmd.py +1246 -0
- mcli/workflow/daemon/api_daemon.py +800 -0
- mcli/workflow/daemon/async_command_database.py +681 -0
- mcli/workflow/daemon/async_process_manager.py +591 -0
- mcli/workflow/daemon/client.py +530 -0
- mcli/workflow/daemon/commands.py +1196 -0
- mcli/workflow/daemon/daemon.py +905 -0
- mcli/workflow/daemon/daemon_api.py +59 -0
- mcli/workflow/daemon/enhanced_daemon.py +571 -0
- mcli/workflow/daemon/process_cli.py +244 -0
- mcli/workflow/daemon/process_manager.py +439 -0
- mcli/workflow/daemon/test_daemon.py +275 -0
- mcli/workflow/dashboard/dashboard_cmd.py +113 -0
- mcli/workflow/docker/docker.py +0 -0
- mcli/workflow/file/file.py +100 -0
- mcli/workflow/gcloud/config.toml +21 -0
- mcli/workflow/gcloud/gcloud.py +58 -0
- mcli/workflow/git_commit/ai_service.py +328 -0
- mcli/workflow/git_commit/commands.py +430 -0
- mcli/workflow/lsh_integration.py +355 -0
- mcli/workflow/model_service/client.py +594 -0
- mcli/workflow/model_service/download_and_run_efficient_models.py +288 -0
- mcli/workflow/model_service/lightweight_embedder.py +397 -0
- mcli/workflow/model_service/lightweight_model_server.py +714 -0
- mcli/workflow/model_service/lightweight_test.py +241 -0
- mcli/workflow/model_service/model_service.py +1955 -0
- mcli/workflow/model_service/ollama_efficient_runner.py +425 -0
- mcli/workflow/model_service/pdf_processor.py +386 -0
- mcli/workflow/model_service/test_efficient_runner.py +234 -0
- mcli/workflow/model_service/test_example.py +315 -0
- mcli/workflow/model_service/test_integration.py +131 -0
- mcli/workflow/model_service/test_new_features.py +149 -0
- mcli/workflow/openai/openai.py +99 -0
- mcli/workflow/politician_trading/commands.py +1790 -0
- mcli/workflow/politician_trading/config.py +134 -0
- mcli/workflow/politician_trading/connectivity.py +490 -0
- mcli/workflow/politician_trading/data_sources.py +395 -0
- mcli/workflow/politician_trading/database.py +410 -0
- mcli/workflow/politician_trading/demo.py +248 -0
- mcli/workflow/politician_trading/models.py +165 -0
- mcli/workflow/politician_trading/monitoring.py +413 -0
- mcli/workflow/politician_trading/scrapers.py +966 -0
- mcli/workflow/politician_trading/scrapers_california.py +412 -0
- mcli/workflow/politician_trading/scrapers_eu.py +377 -0
- mcli/workflow/politician_trading/scrapers_uk.py +350 -0
- mcli/workflow/politician_trading/scrapers_us_states.py +438 -0
- mcli/workflow/politician_trading/supabase_functions.py +354 -0
- mcli/workflow/politician_trading/workflow.py +852 -0
- mcli/workflow/registry/registry.py +180 -0
- mcli/workflow/repo/repo.py +223 -0
- mcli/workflow/scheduler/commands.py +493 -0
- mcli/workflow/scheduler/cron_parser.py +238 -0
- mcli/workflow/scheduler/job.py +182 -0
- mcli/workflow/scheduler/monitor.py +139 -0
- mcli/workflow/scheduler/persistence.py +324 -0
- mcli/workflow/scheduler/scheduler.py +679 -0
- mcli/workflow/sync/sync_cmd.py +437 -0
- mcli/workflow/sync/test_cmd.py +314 -0
- mcli/workflow/videos/videos.py +242 -0
- mcli/workflow/wakatime/wakatime.py +11 -0
- mcli/workflow/workflow.py +37 -0
- mcli_framework-7.0.0.dist-info/METADATA +479 -0
- mcli_framework-7.0.0.dist-info/RECORD +186 -0
- mcli_framework-7.0.0.dist-info/WHEEL +5 -0
- mcli_framework-7.0.0.dist-info/entry_points.txt +7 -0
- mcli_framework-7.0.0.dist-info/licenses/LICENSE +21 -0
- mcli_framework-7.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Completion helpers for MCLI that provide tab completion without loading heavy modules
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import List, Dict, Any
|
|
6
|
+
import click
|
|
7
|
+
from click.shell_completion import CompletionItem
|
|
8
|
+
|
|
9
|
+
# Static completion data for lazy-loaded commands
|
|
10
|
+
LAZY_COMMAND_COMPLETIONS = {
|
|
11
|
+
"workflow": {
|
|
12
|
+
"subcommands": [
|
|
13
|
+
"api-daemon",
|
|
14
|
+
"daemon",
|
|
15
|
+
"file",
|
|
16
|
+
"politician-trading",
|
|
17
|
+
"scheduler",
|
|
18
|
+
"sync",
|
|
19
|
+
"videos"
|
|
20
|
+
],
|
|
21
|
+
"politician-trading": {
|
|
22
|
+
"subcommands": [
|
|
23
|
+
"connectivity",
|
|
24
|
+
"cron-job",
|
|
25
|
+
"data-sources",
|
|
26
|
+
"disclosures",
|
|
27
|
+
"health",
|
|
28
|
+
"jobs",
|
|
29
|
+
"monitor",
|
|
30
|
+
"politicians",
|
|
31
|
+
"run",
|
|
32
|
+
"schema",
|
|
33
|
+
"setup",
|
|
34
|
+
"stats",
|
|
35
|
+
"status",
|
|
36
|
+
"test-workflow",
|
|
37
|
+
"verify"
|
|
38
|
+
],
|
|
39
|
+
"cron-job": {
|
|
40
|
+
"options": ["--create", "--test"]
|
|
41
|
+
},
|
|
42
|
+
"setup": {
|
|
43
|
+
"options": ["--create-tables", "--verify", "--generate-schema", "--output-dir"]
|
|
44
|
+
},
|
|
45
|
+
"run": {
|
|
46
|
+
"options": ["--full", "--us-only", "--eu-only"]
|
|
47
|
+
},
|
|
48
|
+
"connectivity": {
|
|
49
|
+
"options": ["--json", "--continuous", "--interval", "--duration"]
|
|
50
|
+
},
|
|
51
|
+
"health": {
|
|
52
|
+
"options": ["--json"]
|
|
53
|
+
},
|
|
54
|
+
"monitor": {
|
|
55
|
+
"options": ["--interval", "--count"]
|
|
56
|
+
},
|
|
57
|
+
"status": {
|
|
58
|
+
"options": ["--json"]
|
|
59
|
+
},
|
|
60
|
+
"stats": {
|
|
61
|
+
"options": ["--json"]
|
|
62
|
+
},
|
|
63
|
+
"test-workflow": {
|
|
64
|
+
"options": ["--verbose", "--validate-writes"]
|
|
65
|
+
},
|
|
66
|
+
"schema": {
|
|
67
|
+
"options": ["--show-location", "--generate", "--output-dir"]
|
|
68
|
+
},
|
|
69
|
+
"data-sources": {
|
|
70
|
+
"options": ["--json"]
|
|
71
|
+
},
|
|
72
|
+
"jobs": {
|
|
73
|
+
"options": ["--json", "--limit"]
|
|
74
|
+
},
|
|
75
|
+
"politicians": {
|
|
76
|
+
"options": ["--json", "--limit", "--role", "--party", "--state", "--search"]
|
|
77
|
+
},
|
|
78
|
+
"disclosures": {
|
|
79
|
+
"options": ["--json", "--limit", "--politician", "--asset", "--transaction-type", "--amount-min", "--amount-max", "--days", "--details"]
|
|
80
|
+
},
|
|
81
|
+
"verify": {
|
|
82
|
+
"options": ["--json"]
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"scheduler": {
|
|
86
|
+
"subcommands": [
|
|
87
|
+
"add",
|
|
88
|
+
"cancel",
|
|
89
|
+
"list",
|
|
90
|
+
"monitor",
|
|
91
|
+
"remove",
|
|
92
|
+
"start",
|
|
93
|
+
"status",
|
|
94
|
+
"stop"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"daemon": {
|
|
98
|
+
"subcommands": [
|
|
99
|
+
"start",
|
|
100
|
+
"stop",
|
|
101
|
+
"status",
|
|
102
|
+
"logs"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
"api-daemon": {
|
|
106
|
+
"subcommands": [
|
|
107
|
+
"start",
|
|
108
|
+
"stop",
|
|
109
|
+
"status",
|
|
110
|
+
"logs"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"videos": {
|
|
114
|
+
"subcommands": [
|
|
115
|
+
"remove-overlay",
|
|
116
|
+
"extract-frames",
|
|
117
|
+
"create-video"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
"sync": {
|
|
121
|
+
"subcommands": [
|
|
122
|
+
"status",
|
|
123
|
+
"sync"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
"file": {
|
|
127
|
+
"subcommands": [
|
|
128
|
+
"search",
|
|
129
|
+
"organize"
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"chat": {
|
|
134
|
+
"options": ["--model", "--system", "--temperature", "--max-tokens", "--stream"]
|
|
135
|
+
},
|
|
136
|
+
"model": {
|
|
137
|
+
"subcommands": [
|
|
138
|
+
"download",
|
|
139
|
+
"list",
|
|
140
|
+
"remove",
|
|
141
|
+
"info"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
"cron-test": {
|
|
145
|
+
"options": ["--quick", "--cleanup", "--verbose"]
|
|
146
|
+
},
|
|
147
|
+
"visual": {
|
|
148
|
+
"subcommands": [
|
|
149
|
+
"demo",
|
|
150
|
+
"spinner-test"
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
"redis": {
|
|
154
|
+
"subcommands": [
|
|
155
|
+
"start",
|
|
156
|
+
"stop",
|
|
157
|
+
"status",
|
|
158
|
+
"flush"
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"logs": {
|
|
162
|
+
"subcommands": [
|
|
163
|
+
"tail",
|
|
164
|
+
"view",
|
|
165
|
+
"clear"
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
"completion": {
|
|
169
|
+
"subcommands": [
|
|
170
|
+
"bash",
|
|
171
|
+
"zsh",
|
|
172
|
+
"fish",
|
|
173
|
+
"install",
|
|
174
|
+
"status"
|
|
175
|
+
],
|
|
176
|
+
"install": {
|
|
177
|
+
"options": ["--shell"]
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def get_completion_items(cmd_path: List[str], incomplete: str = "") -> List[CompletionItem]:
|
|
184
|
+
"""Get completion items for a given command path without loading modules"""
|
|
185
|
+
items = []
|
|
186
|
+
|
|
187
|
+
# Navigate to the completion data for this path
|
|
188
|
+
current_data = LAZY_COMMAND_COMPLETIONS
|
|
189
|
+
|
|
190
|
+
for part in cmd_path:
|
|
191
|
+
if part in current_data:
|
|
192
|
+
current_data = current_data[part]
|
|
193
|
+
else:
|
|
194
|
+
return items # No completion data available
|
|
195
|
+
|
|
196
|
+
# Add subcommands
|
|
197
|
+
if "subcommands" in current_data:
|
|
198
|
+
for subcommand in current_data["subcommands"]:
|
|
199
|
+
if subcommand.startswith(incomplete):
|
|
200
|
+
items.append(CompletionItem(subcommand))
|
|
201
|
+
|
|
202
|
+
# Add options
|
|
203
|
+
if "options" in current_data:
|
|
204
|
+
for option in current_data["options"]:
|
|
205
|
+
if option.startswith(incomplete):
|
|
206
|
+
items.append(CompletionItem(option))
|
|
207
|
+
|
|
208
|
+
return items
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
class CompletionAwareLazyGroup(click.Group):
|
|
212
|
+
"""A Click group that provides completion without loading modules"""
|
|
213
|
+
|
|
214
|
+
def __init__(self, name, import_path, *args, **kwargs):
|
|
215
|
+
self.import_path = import_path
|
|
216
|
+
self._loaded_group = None
|
|
217
|
+
super().__init__(name, *args, **kwargs)
|
|
218
|
+
|
|
219
|
+
def _load_group(self):
|
|
220
|
+
"""Load the actual group on first use."""
|
|
221
|
+
if self._loaded_group is None:
|
|
222
|
+
try:
|
|
223
|
+
import importlib
|
|
224
|
+
module_path, attr_name = self.import_path.rsplit(".", 1)
|
|
225
|
+
module = importlib.import_module(module_path)
|
|
226
|
+
self._loaded_group = getattr(module, attr_name)
|
|
227
|
+
except Exception as e:
|
|
228
|
+
# Return a dummy group that shows an error
|
|
229
|
+
def error_callback():
|
|
230
|
+
click.echo(f"Error: Command group {self.name} is not available")
|
|
231
|
+
self._loaded_group = click.Group(self.name, callback=error_callback)
|
|
232
|
+
return self._loaded_group
|
|
233
|
+
|
|
234
|
+
def invoke(self, ctx):
|
|
235
|
+
"""Invoke the lazily loaded group."""
|
|
236
|
+
group = self._load_group()
|
|
237
|
+
return group.invoke(ctx)
|
|
238
|
+
|
|
239
|
+
def get_command(self, ctx, cmd_name):
|
|
240
|
+
"""Get a command from the lazily loaded group."""
|
|
241
|
+
group = self._load_group()
|
|
242
|
+
return group.get_command(ctx, cmd_name)
|
|
243
|
+
|
|
244
|
+
def list_commands(self, ctx):
|
|
245
|
+
"""List commands from completion data first, then load if needed."""
|
|
246
|
+
# Always try to get from static completion data first for workflow
|
|
247
|
+
if self.name == "workflow" and self.name in LAZY_COMMAND_COMPLETIONS:
|
|
248
|
+
data = LAZY_COMMAND_COMPLETIONS[self.name]
|
|
249
|
+
if "subcommands" in data:
|
|
250
|
+
return sorted(data["subcommands"])
|
|
251
|
+
|
|
252
|
+
# Try to get from static completion data for other commands
|
|
253
|
+
if self.name in LAZY_COMMAND_COMPLETIONS:
|
|
254
|
+
data = LAZY_COMMAND_COMPLETIONS[self.name]
|
|
255
|
+
if "subcommands" in data:
|
|
256
|
+
return sorted(data["subcommands"])
|
|
257
|
+
|
|
258
|
+
# Fallback to loading the actual group
|
|
259
|
+
group = self._load_group()
|
|
260
|
+
return group.list_commands(ctx)
|
|
261
|
+
|
|
262
|
+
def shell_complete(self, ctx, incomplete):
|
|
263
|
+
"""Provide shell completion using static data when possible."""
|
|
264
|
+
# For workflow group, provide static subcommand completions
|
|
265
|
+
if self.name in LAZY_COMMAND_COMPLETIONS:
|
|
266
|
+
data = LAZY_COMMAND_COMPLETIONS[self.name]
|
|
267
|
+
if "subcommands" in data:
|
|
268
|
+
items = []
|
|
269
|
+
for subcommand in data["subcommands"]:
|
|
270
|
+
if subcommand.startswith(incomplete):
|
|
271
|
+
items.append(CompletionItem(subcommand))
|
|
272
|
+
return items
|
|
273
|
+
|
|
274
|
+
# Fallback to loading the actual group
|
|
275
|
+
group = self._load_group()
|
|
276
|
+
if hasattr(group, 'shell_complete'):
|
|
277
|
+
return group.shell_complete(ctx, incomplete)
|
|
278
|
+
return []
|
|
279
|
+
|
|
280
|
+
def get_params(self, ctx):
|
|
281
|
+
"""Get parameters from the lazily loaded group."""
|
|
282
|
+
group = self._load_group()
|
|
283
|
+
return group.get_params(ctx)
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def create_completion_aware_lazy_group(name: str, import_path: str, help_text: str = None) -> CompletionAwareLazyGroup:
|
|
287
|
+
"""Create a completion-aware lazy group"""
|
|
288
|
+
return CompletionAwareLazyGroup(name, import_path, help=help_text)
|