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.

Files changed (186) hide show
  1. mcli/app/chat_cmd.py +42 -0
  2. mcli/app/commands_cmd.py +226 -0
  3. mcli/app/completion_cmd.py +216 -0
  4. mcli/app/completion_helpers.py +288 -0
  5. mcli/app/cron_test_cmd.py +697 -0
  6. mcli/app/logs_cmd.py +419 -0
  7. mcli/app/main.py +492 -0
  8. mcli/app/model/model.py +1060 -0
  9. mcli/app/model_cmd.py +227 -0
  10. mcli/app/redis_cmd.py +269 -0
  11. mcli/app/video/video.py +1114 -0
  12. mcli/app/visual_cmd.py +303 -0
  13. mcli/chat/chat.py +2409 -0
  14. mcli/chat/command_rag.py +514 -0
  15. mcli/chat/enhanced_chat.py +652 -0
  16. mcli/chat/system_controller.py +1010 -0
  17. mcli/chat/system_integration.py +1016 -0
  18. mcli/cli.py +25 -0
  19. mcli/config.toml +20 -0
  20. mcli/lib/api/api.py +586 -0
  21. mcli/lib/api/daemon_client.py +203 -0
  22. mcli/lib/api/daemon_client_local.py +44 -0
  23. mcli/lib/api/daemon_decorator.py +217 -0
  24. mcli/lib/api/mcli_decorators.py +1032 -0
  25. mcli/lib/auth/auth.py +85 -0
  26. mcli/lib/auth/aws_manager.py +85 -0
  27. mcli/lib/auth/azure_manager.py +91 -0
  28. mcli/lib/auth/credential_manager.py +192 -0
  29. mcli/lib/auth/gcp_manager.py +93 -0
  30. mcli/lib/auth/key_manager.py +117 -0
  31. mcli/lib/auth/mcli_manager.py +93 -0
  32. mcli/lib/auth/token_manager.py +75 -0
  33. mcli/lib/auth/token_util.py +1011 -0
  34. mcli/lib/config/config.py +47 -0
  35. mcli/lib/discovery/__init__.py +1 -0
  36. mcli/lib/discovery/command_discovery.py +274 -0
  37. mcli/lib/erd/erd.py +1345 -0
  38. mcli/lib/erd/generate_graph.py +453 -0
  39. mcli/lib/files/files.py +76 -0
  40. mcli/lib/fs/fs.py +109 -0
  41. mcli/lib/lib.py +29 -0
  42. mcli/lib/logger/logger.py +611 -0
  43. mcli/lib/performance/optimizer.py +409 -0
  44. mcli/lib/performance/rust_bridge.py +502 -0
  45. mcli/lib/performance/uvloop_config.py +154 -0
  46. mcli/lib/pickles/pickles.py +50 -0
  47. mcli/lib/search/cached_vectorizer.py +479 -0
  48. mcli/lib/services/data_pipeline.py +460 -0
  49. mcli/lib/services/lsh_client.py +441 -0
  50. mcli/lib/services/redis_service.py +387 -0
  51. mcli/lib/shell/shell.py +137 -0
  52. mcli/lib/toml/toml.py +33 -0
  53. mcli/lib/ui/styling.py +47 -0
  54. mcli/lib/ui/visual_effects.py +634 -0
  55. mcli/lib/watcher/watcher.py +185 -0
  56. mcli/ml/api/app.py +215 -0
  57. mcli/ml/api/middleware.py +224 -0
  58. mcli/ml/api/routers/admin_router.py +12 -0
  59. mcli/ml/api/routers/auth_router.py +244 -0
  60. mcli/ml/api/routers/backtest_router.py +12 -0
  61. mcli/ml/api/routers/data_router.py +12 -0
  62. mcli/ml/api/routers/model_router.py +302 -0
  63. mcli/ml/api/routers/monitoring_router.py +12 -0
  64. mcli/ml/api/routers/portfolio_router.py +12 -0
  65. mcli/ml/api/routers/prediction_router.py +267 -0
  66. mcli/ml/api/routers/trade_router.py +12 -0
  67. mcli/ml/api/routers/websocket_router.py +76 -0
  68. mcli/ml/api/schemas.py +64 -0
  69. mcli/ml/auth/auth_manager.py +425 -0
  70. mcli/ml/auth/models.py +154 -0
  71. mcli/ml/auth/permissions.py +302 -0
  72. mcli/ml/backtesting/backtest_engine.py +502 -0
  73. mcli/ml/backtesting/performance_metrics.py +393 -0
  74. mcli/ml/cache.py +400 -0
  75. mcli/ml/cli/main.py +398 -0
  76. mcli/ml/config/settings.py +394 -0
  77. mcli/ml/configs/dvc_config.py +230 -0
  78. mcli/ml/configs/mlflow_config.py +131 -0
  79. mcli/ml/configs/mlops_manager.py +293 -0
  80. mcli/ml/dashboard/app.py +532 -0
  81. mcli/ml/dashboard/app_integrated.py +738 -0
  82. mcli/ml/dashboard/app_supabase.py +560 -0
  83. mcli/ml/dashboard/app_training.py +615 -0
  84. mcli/ml/dashboard/cli.py +51 -0
  85. mcli/ml/data_ingestion/api_connectors.py +501 -0
  86. mcli/ml/data_ingestion/data_pipeline.py +567 -0
  87. mcli/ml/data_ingestion/stream_processor.py +512 -0
  88. mcli/ml/database/migrations/env.py +94 -0
  89. mcli/ml/database/models.py +667 -0
  90. mcli/ml/database/session.py +200 -0
  91. mcli/ml/experimentation/ab_testing.py +845 -0
  92. mcli/ml/features/ensemble_features.py +607 -0
  93. mcli/ml/features/political_features.py +676 -0
  94. mcli/ml/features/recommendation_engine.py +809 -0
  95. mcli/ml/features/stock_features.py +573 -0
  96. mcli/ml/features/test_feature_engineering.py +346 -0
  97. mcli/ml/logging.py +85 -0
  98. mcli/ml/mlops/data_versioning.py +518 -0
  99. mcli/ml/mlops/experiment_tracker.py +377 -0
  100. mcli/ml/mlops/model_serving.py +481 -0
  101. mcli/ml/mlops/pipeline_orchestrator.py +614 -0
  102. mcli/ml/models/base_models.py +324 -0
  103. mcli/ml/models/ensemble_models.py +675 -0
  104. mcli/ml/models/recommendation_models.py +474 -0
  105. mcli/ml/models/test_models.py +487 -0
  106. mcli/ml/monitoring/drift_detection.py +676 -0
  107. mcli/ml/monitoring/metrics.py +45 -0
  108. mcli/ml/optimization/portfolio_optimizer.py +834 -0
  109. mcli/ml/preprocessing/data_cleaners.py +451 -0
  110. mcli/ml/preprocessing/feature_extractors.py +491 -0
  111. mcli/ml/preprocessing/ml_pipeline.py +382 -0
  112. mcli/ml/preprocessing/politician_trading_preprocessor.py +569 -0
  113. mcli/ml/preprocessing/test_preprocessing.py +294 -0
  114. mcli/ml/scripts/populate_sample_data.py +200 -0
  115. mcli/ml/tasks.py +400 -0
  116. mcli/ml/tests/test_integration.py +429 -0
  117. mcli/ml/tests/test_training_dashboard.py +387 -0
  118. mcli/public/oi/oi.py +15 -0
  119. mcli/public/public.py +4 -0
  120. mcli/self/self_cmd.py +1246 -0
  121. mcli/workflow/daemon/api_daemon.py +800 -0
  122. mcli/workflow/daemon/async_command_database.py +681 -0
  123. mcli/workflow/daemon/async_process_manager.py +591 -0
  124. mcli/workflow/daemon/client.py +530 -0
  125. mcli/workflow/daemon/commands.py +1196 -0
  126. mcli/workflow/daemon/daemon.py +905 -0
  127. mcli/workflow/daemon/daemon_api.py +59 -0
  128. mcli/workflow/daemon/enhanced_daemon.py +571 -0
  129. mcli/workflow/daemon/process_cli.py +244 -0
  130. mcli/workflow/daemon/process_manager.py +439 -0
  131. mcli/workflow/daemon/test_daemon.py +275 -0
  132. mcli/workflow/dashboard/dashboard_cmd.py +113 -0
  133. mcli/workflow/docker/docker.py +0 -0
  134. mcli/workflow/file/file.py +100 -0
  135. mcli/workflow/gcloud/config.toml +21 -0
  136. mcli/workflow/gcloud/gcloud.py +58 -0
  137. mcli/workflow/git_commit/ai_service.py +328 -0
  138. mcli/workflow/git_commit/commands.py +430 -0
  139. mcli/workflow/lsh_integration.py +355 -0
  140. mcli/workflow/model_service/client.py +594 -0
  141. mcli/workflow/model_service/download_and_run_efficient_models.py +288 -0
  142. mcli/workflow/model_service/lightweight_embedder.py +397 -0
  143. mcli/workflow/model_service/lightweight_model_server.py +714 -0
  144. mcli/workflow/model_service/lightweight_test.py +241 -0
  145. mcli/workflow/model_service/model_service.py +1955 -0
  146. mcli/workflow/model_service/ollama_efficient_runner.py +425 -0
  147. mcli/workflow/model_service/pdf_processor.py +386 -0
  148. mcli/workflow/model_service/test_efficient_runner.py +234 -0
  149. mcli/workflow/model_service/test_example.py +315 -0
  150. mcli/workflow/model_service/test_integration.py +131 -0
  151. mcli/workflow/model_service/test_new_features.py +149 -0
  152. mcli/workflow/openai/openai.py +99 -0
  153. mcli/workflow/politician_trading/commands.py +1790 -0
  154. mcli/workflow/politician_trading/config.py +134 -0
  155. mcli/workflow/politician_trading/connectivity.py +490 -0
  156. mcli/workflow/politician_trading/data_sources.py +395 -0
  157. mcli/workflow/politician_trading/database.py +410 -0
  158. mcli/workflow/politician_trading/demo.py +248 -0
  159. mcli/workflow/politician_trading/models.py +165 -0
  160. mcli/workflow/politician_trading/monitoring.py +413 -0
  161. mcli/workflow/politician_trading/scrapers.py +966 -0
  162. mcli/workflow/politician_trading/scrapers_california.py +412 -0
  163. mcli/workflow/politician_trading/scrapers_eu.py +377 -0
  164. mcli/workflow/politician_trading/scrapers_uk.py +350 -0
  165. mcli/workflow/politician_trading/scrapers_us_states.py +438 -0
  166. mcli/workflow/politician_trading/supabase_functions.py +354 -0
  167. mcli/workflow/politician_trading/workflow.py +852 -0
  168. mcli/workflow/registry/registry.py +180 -0
  169. mcli/workflow/repo/repo.py +223 -0
  170. mcli/workflow/scheduler/commands.py +493 -0
  171. mcli/workflow/scheduler/cron_parser.py +238 -0
  172. mcli/workflow/scheduler/job.py +182 -0
  173. mcli/workflow/scheduler/monitor.py +139 -0
  174. mcli/workflow/scheduler/persistence.py +324 -0
  175. mcli/workflow/scheduler/scheduler.py +679 -0
  176. mcli/workflow/sync/sync_cmd.py +437 -0
  177. mcli/workflow/sync/test_cmd.py +314 -0
  178. mcli/workflow/videos/videos.py +242 -0
  179. mcli/workflow/wakatime/wakatime.py +11 -0
  180. mcli/workflow/workflow.py +37 -0
  181. mcli_framework-7.0.0.dist-info/METADATA +479 -0
  182. mcli_framework-7.0.0.dist-info/RECORD +186 -0
  183. mcli_framework-7.0.0.dist-info/WHEEL +5 -0
  184. mcli_framework-7.0.0.dist-info/entry_points.txt +7 -0
  185. mcli_framework-7.0.0.dist-info/licenses/LICENSE +21 -0
  186. mcli_framework-7.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,200 @@
1
+ """Database session management"""
2
+
3
+ from typing import AsyncGenerator, Generator
4
+ from contextlib import contextmanager, asynccontextmanager
5
+
6
+ from sqlalchemy import create_engine
7
+ from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
8
+ from sqlalchemy.orm import sessionmaker, Session
9
+ from sqlalchemy.pool import NullPool, StaticPool
10
+
11
+ from mcli.ml.config import settings
12
+ from .models import Base
13
+
14
+
15
+ # Synchronous database setup
16
+ engine = create_engine(
17
+ settings.database.url,
18
+ **settings.get_database_config(),
19
+ )
20
+
21
+ SessionLocal = sessionmaker(
22
+ autocommit=False,
23
+ autoflush=False,
24
+ bind=engine,
25
+ expire_on_commit=False,
26
+ )
27
+
28
+
29
+ # Asynchronous database setup
30
+ async_engine = create_async_engine(
31
+ settings.database.async_url,
32
+ pool_size=settings.database.pool_size,
33
+ max_overflow=settings.database.max_overflow,
34
+ pool_timeout=settings.database.pool_timeout,
35
+ pool_pre_ping=True,
36
+ echo=settings.debug,
37
+ )
38
+
39
+ AsyncSessionLocal = async_sessionmaker(
40
+ async_engine,
41
+ class_=AsyncSession,
42
+ autocommit=False,
43
+ autoflush=False,
44
+ expire_on_commit=False,
45
+ )
46
+
47
+
48
+ def get_db() -> Generator[Session, None, None]:
49
+ """
50
+ Dependency for getting database session.
51
+
52
+ Usage:
53
+ @app.get("/items")
54
+ def get_items(db: Session = Depends(get_db)):
55
+ return db.query(Item).all()
56
+ """
57
+ db = SessionLocal()
58
+ try:
59
+ yield db
60
+ finally:
61
+ db.close()
62
+
63
+
64
+ async def get_async_db() -> AsyncGenerator[AsyncSession, None]:
65
+ """
66
+ Async dependency for getting database session.
67
+
68
+ Usage:
69
+ @app.get("/items")
70
+ async def get_items(db: AsyncSession = Depends(get_async_db)):
71
+ result = await db.execute(select(Item))
72
+ return result.scalars().all()
73
+ """
74
+ async with AsyncSessionLocal() as session:
75
+ try:
76
+ yield session
77
+ finally:
78
+ await session.close()
79
+
80
+
81
+ @contextmanager
82
+ def get_session() -> Generator[Session, None, None]:
83
+ """
84
+ Context manager for database session.
85
+
86
+ Usage:
87
+ with get_session() as session:
88
+ user = session.query(User).first()
89
+ """
90
+ session = SessionLocal()
91
+ try:
92
+ yield session
93
+ session.commit()
94
+ except Exception:
95
+ session.rollback()
96
+ raise
97
+ finally:
98
+ session.close()
99
+
100
+
101
+ @asynccontextmanager
102
+ async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
103
+ """
104
+ Async context manager for database session.
105
+
106
+ Usage:
107
+ async with get_async_session() as session:
108
+ result = await session.execute(select(User))
109
+ users = result.scalars().all()
110
+ """
111
+ async with AsyncSessionLocal() as session:
112
+ try:
113
+ yield session
114
+ await session.commit()
115
+ except Exception:
116
+ await session.rollback()
117
+ raise
118
+ finally:
119
+ await session.close()
120
+
121
+
122
+ def init_db() -> None:
123
+ """Initialize database tables"""
124
+ Base.metadata.create_all(bind=engine)
125
+
126
+ # Create additional indexes
127
+ from .models import create_indexes
128
+ create_indexes(engine)
129
+
130
+
131
+ async def init_async_db() -> None:
132
+ """Initialize database tables asynchronously"""
133
+ async with async_engine.begin() as conn:
134
+ await conn.run_sync(Base.metadata.create_all)
135
+
136
+
137
+ def drop_db() -> None:
138
+ """Drop all database tables (use with caution!)"""
139
+ Base.metadata.drop_all(bind=engine)
140
+
141
+
142
+ async def drop_async_db() -> None:
143
+ """Drop all database tables asynchronously"""
144
+ async with async_engine.begin() as conn:
145
+ await conn.run_sync(Base.metadata.drop_all)
146
+
147
+
148
+ # Test database setup (for unit tests)
149
+ def get_test_engine():
150
+ """Create test database engine with in-memory SQLite"""
151
+ from sqlalchemy import create_engine
152
+
153
+ engine = create_engine(
154
+ "sqlite:///:memory:",
155
+ connect_args={"check_same_thread": False},
156
+ poolclass=StaticPool,
157
+ )
158
+
159
+ Base.metadata.create_all(bind=engine)
160
+ return engine
161
+
162
+
163
+ def get_test_session():
164
+ """Create test database session"""
165
+ engine = get_test_engine()
166
+ TestSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
167
+ return TestSessionLocal()
168
+
169
+
170
+ # Database health check
171
+ async def check_database_health() -> bool:
172
+ """Check if database is accessible and healthy"""
173
+ try:
174
+ async with get_async_session() as session:
175
+ await session.execute("SELECT 1")
176
+ return True
177
+ except Exception as e:
178
+ print(f"Database health check failed: {e}")
179
+ return False
180
+
181
+
182
+ # Utility functions for bulk operations
183
+ async def bulk_insert(model_class, data: list) -> None:
184
+ """Bulk insert data into database"""
185
+ async with get_async_session() as session:
186
+ session.add_all([model_class(**item) for item in data])
187
+ await session.commit()
188
+
189
+
190
+ async def bulk_update(model_class, data: list, key_field: str = "id") -> None:
191
+ """Bulk update data in database"""
192
+ async with get_async_session() as session:
193
+ for item in data:
194
+ key_value = item.pop(key_field)
195
+ await session.execute(
196
+ model_class.__table__.update()
197
+ .where(getattr(model_class, key_field) == key_value)
198
+ .values(**item)
199
+ )
200
+ await session.commit()