flowyml 1.7.2__py3-none-any.whl → 1.8.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.
Files changed (126) hide show
  1. flowyml/assets/base.py +15 -0
  2. flowyml/assets/metrics.py +5 -0
  3. flowyml/cli/main.py +709 -0
  4. flowyml/cli/stack_cli.py +138 -25
  5. flowyml/core/__init__.py +17 -0
  6. flowyml/core/executor.py +161 -26
  7. flowyml/core/image_builder.py +129 -0
  8. flowyml/core/log_streamer.py +227 -0
  9. flowyml/core/orchestrator.py +22 -2
  10. flowyml/core/pipeline.py +34 -10
  11. flowyml/core/routing.py +558 -0
  12. flowyml/core/step.py +9 -1
  13. flowyml/core/step_grouping.py +49 -35
  14. flowyml/core/types.py +407 -0
  15. flowyml/monitoring/alerts.py +10 -0
  16. flowyml/monitoring/notifications.py +104 -25
  17. flowyml/monitoring/slack_blocks.py +323 -0
  18. flowyml/plugins/__init__.py +251 -0
  19. flowyml/plugins/alerters/__init__.py +1 -0
  20. flowyml/plugins/alerters/slack.py +168 -0
  21. flowyml/plugins/base.py +752 -0
  22. flowyml/plugins/config.py +478 -0
  23. flowyml/plugins/deployers/__init__.py +22 -0
  24. flowyml/plugins/deployers/gcp_cloud_run.py +200 -0
  25. flowyml/plugins/deployers/sagemaker.py +306 -0
  26. flowyml/plugins/deployers/vertex.py +290 -0
  27. flowyml/plugins/integration.py +369 -0
  28. flowyml/plugins/manager.py +510 -0
  29. flowyml/plugins/model_registries/__init__.py +22 -0
  30. flowyml/plugins/model_registries/mlflow.py +159 -0
  31. flowyml/plugins/model_registries/sagemaker.py +489 -0
  32. flowyml/plugins/model_registries/vertex.py +386 -0
  33. flowyml/plugins/orchestrators/__init__.py +13 -0
  34. flowyml/plugins/orchestrators/sagemaker.py +443 -0
  35. flowyml/plugins/orchestrators/vertex_ai.py +461 -0
  36. flowyml/plugins/registries/__init__.py +13 -0
  37. flowyml/plugins/registries/ecr.py +321 -0
  38. flowyml/plugins/registries/gcr.py +313 -0
  39. flowyml/plugins/registry.py +454 -0
  40. flowyml/plugins/stack.py +494 -0
  41. flowyml/plugins/stack_config.py +537 -0
  42. flowyml/plugins/stores/__init__.py +13 -0
  43. flowyml/plugins/stores/gcs.py +460 -0
  44. flowyml/plugins/stores/s3.py +453 -0
  45. flowyml/plugins/trackers/__init__.py +11 -0
  46. flowyml/plugins/trackers/mlflow.py +316 -0
  47. flowyml/plugins/validators/__init__.py +3 -0
  48. flowyml/plugins/validators/deepchecks.py +119 -0
  49. flowyml/registry/__init__.py +2 -1
  50. flowyml/registry/model_environment.py +109 -0
  51. flowyml/registry/model_registry.py +241 -96
  52. flowyml/serving/__init__.py +17 -0
  53. flowyml/serving/model_server.py +628 -0
  54. flowyml/stacks/__init__.py +60 -0
  55. flowyml/stacks/aws.py +93 -0
  56. flowyml/stacks/base.py +62 -0
  57. flowyml/stacks/components.py +12 -0
  58. flowyml/stacks/gcp.py +44 -9
  59. flowyml/stacks/plugins.py +115 -0
  60. flowyml/stacks/registry.py +2 -1
  61. flowyml/storage/sql.py +401 -12
  62. flowyml/tracking/experiment.py +8 -5
  63. flowyml/ui/backend/Dockerfile +87 -16
  64. flowyml/ui/backend/auth.py +12 -2
  65. flowyml/ui/backend/main.py +149 -5
  66. flowyml/ui/backend/routers/ai_context.py +226 -0
  67. flowyml/ui/backend/routers/assets.py +23 -4
  68. flowyml/ui/backend/routers/auth.py +96 -0
  69. flowyml/ui/backend/routers/deployments.py +660 -0
  70. flowyml/ui/backend/routers/model_explorer.py +597 -0
  71. flowyml/ui/backend/routers/plugins.py +103 -51
  72. flowyml/ui/backend/routers/projects.py +91 -8
  73. flowyml/ui/backend/routers/runs.py +20 -1
  74. flowyml/ui/backend/routers/schedules.py +22 -17
  75. flowyml/ui/backend/routers/templates.py +319 -0
  76. flowyml/ui/backend/routers/websocket.py +2 -2
  77. flowyml/ui/frontend/Dockerfile +55 -6
  78. flowyml/ui/frontend/dist/assets/index-B5AsPTSz.css +1 -0
  79. flowyml/ui/frontend/dist/assets/index-dFbZ8wD8.js +753 -0
  80. flowyml/ui/frontend/dist/index.html +2 -2
  81. flowyml/ui/frontend/dist/logo.png +0 -0
  82. flowyml/ui/frontend/nginx.conf +65 -4
  83. flowyml/ui/frontend/package-lock.json +1404 -74
  84. flowyml/ui/frontend/package.json +3 -0
  85. flowyml/ui/frontend/public/logo.png +0 -0
  86. flowyml/ui/frontend/src/App.jsx +10 -7
  87. flowyml/ui/frontend/src/app/auth/Login.jsx +90 -0
  88. flowyml/ui/frontend/src/app/dashboard/page.jsx +8 -8
  89. flowyml/ui/frontend/src/app/deployments/page.jsx +786 -0
  90. flowyml/ui/frontend/src/app/model-explorer/page.jsx +1031 -0
  91. flowyml/ui/frontend/src/app/pipelines/page.jsx +12 -2
  92. flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectExperimentsList.jsx +19 -6
  93. flowyml/ui/frontend/src/app/runs/[runId]/page.jsx +36 -24
  94. flowyml/ui/frontend/src/app/runs/page.jsx +8 -2
  95. flowyml/ui/frontend/src/app/settings/page.jsx +267 -253
  96. flowyml/ui/frontend/src/components/AssetDetailsPanel.jsx +29 -7
  97. flowyml/ui/frontend/src/components/Layout.jsx +6 -0
  98. flowyml/ui/frontend/src/components/PipelineGraph.jsx +79 -29
  99. flowyml/ui/frontend/src/components/RunDetailsPanel.jsx +36 -6
  100. flowyml/ui/frontend/src/components/RunMetaPanel.jsx +113 -0
  101. flowyml/ui/frontend/src/components/ai/AIAssistantButton.jsx +71 -0
  102. flowyml/ui/frontend/src/components/ai/AIAssistantPanel.jsx +420 -0
  103. flowyml/ui/frontend/src/components/header/Header.jsx +22 -0
  104. flowyml/ui/frontend/src/components/plugins/PluginManager.jsx +4 -4
  105. flowyml/ui/frontend/src/components/plugins/{ZenMLIntegration.jsx → StackImport.jsx} +38 -12
  106. flowyml/ui/frontend/src/components/sidebar/Sidebar.jsx +36 -13
  107. flowyml/ui/frontend/src/contexts/AIAssistantContext.jsx +245 -0
  108. flowyml/ui/frontend/src/contexts/AuthContext.jsx +108 -0
  109. flowyml/ui/frontend/src/hooks/useAIContext.js +156 -0
  110. flowyml/ui/frontend/src/hooks/useWebGPU.js +54 -0
  111. flowyml/ui/frontend/src/layouts/MainLayout.jsx +6 -0
  112. flowyml/ui/frontend/src/router/index.jsx +47 -20
  113. flowyml/ui/frontend/src/services/pluginService.js +3 -1
  114. flowyml/ui/server_manager.py +5 -5
  115. flowyml/ui/utils.py +157 -39
  116. flowyml/utils/config.py +37 -15
  117. flowyml/utils/model_introspection.py +123 -0
  118. flowyml/utils/observability.py +30 -0
  119. flowyml-1.8.0.dist-info/METADATA +174 -0
  120. {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/RECORD +123 -65
  121. {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/WHEEL +1 -1
  122. flowyml/ui/frontend/dist/assets/index-B40RsQDq.css +0 -1
  123. flowyml/ui/frontend/dist/assets/index-CjI0zKCn.js +0 -685
  124. flowyml-1.7.2.dist-info/METADATA +0 -477
  125. {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/entry_points.txt +0 -0
  126. {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,477 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: flowyml
3
- Version: 1.7.2
4
- Summary: Next-Generation ML Pipeline Framework
5
- License: Apache-2.0
6
- License-File: LICENSE
7
- Author: flowyml Team
8
- Author-email: support@unicolab.ai
9
- Requires-Python: >=3.10,<4.0
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: Intended Audience :: Developers
12
- Classifier: Intended Audience :: Science/Research
13
- Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Programming Language :: Python :: 3.11
17
- Classifier: Programming Language :: Python :: 3.12
18
- Classifier: Programming Language :: Python :: 3.13
19
- Classifier: Programming Language :: Python :: 3.14
20
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
21
- Provides-Extra: all
22
- Provides-Extra: aws
23
- Provides-Extra: azure
24
- Provides-Extra: gcp
25
- Provides-Extra: pytorch
26
- Provides-Extra: rich
27
- Provides-Extra: sklearn
28
- Provides-Extra: tensorflow
29
- Provides-Extra: ui
30
- Requires-Dist: click (>=8.0.0)
31
- Requires-Dist: cloudpickle (>=2.0.0)
32
- Requires-Dist: croniter (>=2.0.1,<3.0.0)
33
- Requires-Dist: fastapi (>=0.122.0,<0.123.0) ; extra == "ui" or extra == "all"
34
- Requires-Dist: google-cloud-aiplatform (>=1.35.0) ; extra == "gcp" or extra == "all"
35
- Requires-Dist: google-cloud-storage (>=2.10.0) ; extra == "gcp" or extra == "all"
36
- Requires-Dist: httpx (>=0.24,<0.28)
37
- Requires-Dist: loguru (>=0.7.3,<0.8.0)
38
- Requires-Dist: numpy (>=1.20.0)
39
- Requires-Dist: pandas (>=1.3.0)
40
- Requires-Dist: psycopg2-binary (>=2.9.0)
41
- Requires-Dist: pydantic (>=2.0.0)
42
- Requires-Dist: python-multipart (>=0.0.6) ; extra == "ui" or extra == "all"
43
- Requires-Dist: pytz (>=2024.1,<2025.0)
44
- Requires-Dist: pyyaml (>=6.0)
45
- Requires-Dist: rich (>=13.0.0) ; extra == "rich"
46
- Requires-Dist: scikit-learn (>=1.0.0) ; extra == "sklearn" or extra == "all"
47
- Requires-Dist: sqlalchemy (>=2.0.0)
48
- Requires-Dist: tensorflow (>=2.12.0) ; extra == "tensorflow" or extra == "all"
49
- Requires-Dist: toml (>=0.10.2)
50
- Requires-Dist: torch (>=2.0.0) ; extra == "pytorch" or extra == "all"
51
- Requires-Dist: uvicorn[standard] (>=0.23.0) ; extra == "ui" or extra == "all"
52
- Requires-Dist: websockets (>=11.0) ; extra == "ui" or extra == "all"
53
- Project-URL: Documentation, https://unicolab.github.io/FlowyML/latest
54
- Project-URL: Homepage, https://github.com/UnicoLab/FlowyML
55
- Project-URL: Repository, https://github.com/UnicoLab/FlowyML
56
- Description-Content-Type: text/markdown
57
-
58
- # 🌊 flowyml
59
-
60
- <p align="center">
61
- <img src="docs/logo.png" width="350" alt="flowyml Logo"/>
62
- <br>
63
- <em>The Enterprise-Grade ML Pipeline Framework for Humans</em>
64
- <br>
65
- <br>
66
- <p align="center">
67
- <a href="https://github.com/UnicoLab/FlowyML/actions"><img src="https://img.shields.io/github/actions/workflow/status/UnicoLab/FlowyML/ci.yml?branch=main" alt="CI Status"></a>
68
- <a href="https://pypi.org/project/flowyml/"><img src="https://img.shields.io/pypi/v/flowyml" alt="PyPI Version"></a>
69
- <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" alt="Python 3.10+"></a>
70
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="License"></a>
71
- <a href="https://unicolab.ai"><img src="https://img.shields.io/badge/UnicoLab-ai-red.svg" alt="UnicoLab"></a>
72
- </p>
73
- </p>
74
-
75
- ---
76
-
77
- **FlowyML** is the comprehensive ML pipeline framework that combines the **simplicity of a Python script** with the **power of an enterprise MLOps platform**.
78
-
79
- ## 🚀 Why FlowyML?
80
-
81
- | Feature | FlowyML | Traditional Orchestrators |
82
- |---------|---------|---------------------------|
83
- | **Developer Experience** | 🐍 **Native Python** - No DSLs, no YAML hell. | 📜 Complex YAML or rigid DSLs. |
84
- | **Context Awareness** | 🧠 **Auto-Injection** - Params are just function args. | 🔌 Manual wiring of every parameter. |
85
- | **Caching** | ⚡ **Multi-Level** - Smart content-hashing & memoization. | 🐢 Basic file-timestamp checking. |
86
- | **Asset Management** | 📦 **First-Class Assets** - Models & Datasets with lineage. | 📁 Generic file paths only. |
87
- | **Architecture** | 🏗️ **Modular Stacks** - Local, Cloud, Hybrid. | 🔒 Vendor lock-in or complex setup. |
88
- | **Deployment** | 🏢 **Local or Centralized** - Run locally or deploy as a company-wide hub. | 🧩 Fragmented or cloud-only. |
89
- | **Flexibility** | 🔌 **Extensive Plugin Ecosystem** | Fixed integration with specific orchestrators or custom tools to be developed. |
90
- | **Separation of Concerns** | 🪾 **Steps Grouping, branching and conditions** | Handling only orchestrator logic and task execution oriented. |
91
- | **Features Rich** | 🌟 **Built-in experiment tracking, model leaderboard, human-in-the-loop, notifications, scheduling** | Very limited or none extra features. |
92
-
93
- ## 🚀 Feature Showcase
94
-
95
- FlowyML is a complete toolkit for building, debugging, and deploying ML applications.
96
-
97
- ### 1. Zero-Boilerplate Orchestration
98
- Write pipelines as standard Python functions. No YAML, no DSLs.
99
-
100
- ```python
101
- @step(outputs=["data"])
102
- def load(): return [1, 2, 3]
103
-
104
- @step(inputs=["data"], outputs=["model"])
105
- def train(data): return Model.train(data)
106
-
107
- # It's just Python!
108
- pipeline = Pipeline("simple").add_step(load).add_step(train)
109
- pipeline.run()
110
- ```
111
-
112
- ### 2. 🧠 Intelligent Caching
113
- Don't waste time re-running successful steps.
114
- - **Code Hash**: Re-runs only when code changes.
115
- - **Input Hash**: Re-runs only when data changes.
116
-
117
- ```python
118
- # Only re-runs if 'data' changes, ignoring code changes
119
- @step(cache="input_hash", outputs=["processed"])
120
- def expensive_processing(data):
121
- return process(data)
122
- ```
123
-
124
- ### 3. 🤖 LLM & GenAI Ready
125
- Trace token usage, latency, and costs automatically with built-in observability.
126
-
127
- ```python
128
- @step
129
- @trace_llm(model="gpt-4", tags=["production"])
130
- def generate_summary(text: str):
131
- # flowyml automatically tracks:
132
- # - Token usage (prompt/completion)
133
- # - Cost estimation
134
- # - Latency & Success/Failure rates
135
- return openai.ChatCompletion.create(...)
136
- ```
137
-
138
- ### 4. ⚡ Efficient Step Grouping & Separation of Concerns
139
- Group related steps to run in the same container - reduce overhead, maintain clarity, and keep logic separate from configuration.
140
-
141
- ```python
142
- # Run preprocessing steps in same container (shares resources)
143
- @step(outputs=["raw"], execution_group="preprocessing")
144
- def load(): return fetch_data()
145
-
146
- @step(inputs=["raw"], outputs=["clean"], execution_group="preprocessing")
147
- def clean(raw): return preprocess(raw)
148
-
149
- # flowyml automatically aggregates resources (max CPU, memory, best GPU)
150
- # and executes consecutively in same environment
151
- ```
152
-
153
- ### 5. 🔀 Dynamic Workflows
154
- Build adaptive workflows with conditional logic.
155
-
156
- ```python
157
- # Run 'deploy' only if model accuracy > 0.9
158
- pipeline.add_step(
159
- If(condition=lambda ctx: ctx["accuracy"] > 0.9)
160
- .then(deploy_model)
161
- .else_(notify_team)
162
- )
163
- ```
164
-
165
- ### 6. 🧩 Universal Plugin System
166
- Extend flowyml with any tool - even wrap ZenML components!
167
-
168
- ```python
169
- from flowyml.stacks.plugins import load_component
170
-
171
- # Use any ZenML orchestrator, artifact store, or integration
172
- k8s_orch = load_component("zenml:zenml.integrations.kubernetes.orchestrators.KubernetesOrchestrator")
173
- mlflow = load_component("zenml:zenml.integrations.mlflow.MLflowExperimentTracker")
174
- ```
175
-
176
- ### 7. 👤 Human-in-the-Loop
177
- Pause pipelines for manual approval or review.
178
-
179
- ```python
180
- from flowyml import approval
181
-
182
- approval_step = approval(
183
- name="approve_deployment",
184
- approver="ml-team",
185
- timeout_seconds=3600
186
- )
187
- ```
188
-
189
- ### 8. 📊 Built-in Experiment Tracking
190
- No external tools needed - tracking is built-in.
191
-
192
- ```python
193
- from flowyml.tracking import Experiment
194
-
195
- exp = Experiment("baseline_training")
196
- exp.log_run(run_id="run_001", metrics={"accuracy": 0.95}, parameters={"lr": 0.01})
197
- best = exp.get_best_run("accuracy", maximize=True)
198
- ```
199
-
200
- ### 9. 🏆 Model Leaderboard & Registry
201
- Track, compare, and version your models.
202
-
203
- ```python
204
- from flowyml import ModelLeaderboard
205
- from flowyml.core import Model
206
-
207
- # Track performance
208
- leaderboard = ModelLeaderboard(metric="accuracy")
209
- leaderboard.add_score(model_name="bert-base", score=0.92)
210
-
211
- # Register models with stages
212
- model = Model.create(artifact={...})
213
- model.register(name="text_classifier", stage="production")
214
- ```
215
-
216
- ### 10. 📅 Built-in Scheduling
217
- Schedule recurring jobs without external orchestrators.
218
-
219
- ```python
220
- from flowyml import PipelineScheduler
221
-
222
- scheduler = PipelineScheduler()
223
- scheduler.schedule_daily(
224
- name="daily_training",
225
- pipeline_func=lambda: pipeline.run(),
226
- hour=2, minute=0
227
- )
228
- scheduler.start()
229
- ```
230
-
231
- ### 11. 🔔 Smart Notifications
232
- Slack, Email, and custom alerts built-in.
233
-
234
- ```python
235
- from flowyml import configure_notifications
236
-
237
- configure_notifications(
238
- slack_webhook="https://hooks.slack.com/...",
239
- email_config={...}
240
- )
241
- # Automatic notifications on pipeline success/failure
242
- ```
243
-
244
- ### 12. 🎯 Step-Level Debugging
245
- Set breakpoints and inspect state mid-pipeline.
246
-
247
- ```python
248
- from flowyml import StepDebugger
249
-
250
- debugger = StepDebugger()
251
- debugger.set_breakpoint("train_model")
252
- pipeline.run(debug=True) # Pauses at breakpoint
253
- ```
254
-
255
- ### 13. 📦 First-Class Assets
256
- Assets are not just files; they are first-class citizens with lineage, metadata, and versioning.
257
-
258
- ```python
259
- from flowyml import Dataset, Model, Metrics, FeatureSet
260
-
261
- # Assets track their producer, lineage, and metadata automatically
262
- dataset = Dataset.create(data=df, name="training_data", metadata={"source": "s3"})
263
- model = Model.create(artifact=trained_model, score=0.95)
264
- metrics = Metrics.create(values={"accuracy": 0.95})
265
- ```
266
-
267
- ### 14. 🔄 Smart Retries & Circuit Breakers
268
- Handle failures gracefully.
269
-
270
- ```python
271
- @step(retry=3, timeout=300)
272
- def flaky_api_call():
273
- return external_api.fetch()
274
-
275
- # Circuit breakers prevent cascading failures
276
- ```
277
-
278
- ### 15. 📈 Data Drift Detection
279
- Monitor distribution shifts automatically.
280
-
281
- ```python
282
- from flowyml import detect_drift
283
-
284
- drift = detect_drift(
285
- reference_data=train_feature,
286
- current_data=prod_feature,
287
- threshold=0.1
288
- )
289
- if drift['drift_detected']:
290
- trigger_retraining()
291
- ```
292
-
293
- ### 16. 🔍 Interactive Debugging
294
- - **StepDebugger**: Set breakpoints in your pipeline.
295
- - **Artifact Inspection**: View intermediate data in the UI.
296
- - **Local Execution**: Run the exact same code locally as in production.
297
-
298
- ### 17. 🏭 Enterprise Production Features
299
- - **🔄 Automatic Retries**: Handle transient failures.
300
- - **⏰ Scheduling**: Built-in cron scheduler.
301
- - **🔔 Notifications**: Slack/Email alerts.
302
- - **🛡️ Circuit Breakers**: Stop cascading failures.
303
-
304
- ### 18. 🏢 Centralized Hub & Docker
305
- Ready for the enterprise. Run locally per project or deploy as a centralized entity for the company.
306
- - **Docker Ready**: Backend and Frontend are fully dockerized.
307
- - **Centralized Hub**: Share pipelines, artifacts, and experiments across the team.
308
- - **Remote Execution**: Configure local clients to execute on the remote hub.
309
-
310
- ### 19. 🔌 Universal Integrations
311
- - **ML Frameworks**: PyTorch, TensorFlow, Keras, Scikit-learn, HuggingFace.
312
- - **Cloud Providers**: AWS, GCP, Azure (via plugins).
313
- - **Tools**: MLflow, Weights & Biases, Great Expectations.
314
-
315
- ### 20. 📊 Automatic Training History Tracking
316
- FlowyML automatically captures and visualizes your model training progress with zero manual intervention.
317
-
318
- ```python
319
- from flowyml.integrations.keras import FlowymlKerasCallback
320
-
321
- # Just add the callback - that's it!
322
- callback = FlowymlKerasCallback(
323
- experiment_name="my-experiment",
324
- project="my-project"
325
- )
326
-
327
- model.fit(
328
- x_train, y_train,
329
- validation_data=(x_val, y_val),
330
- epochs=50,
331
- callbacks=[callback] # Auto-tracks all metrics!
332
- )
333
- ```
334
-
335
- **What gets captured automatically:**
336
- - ✅ Loss (train & validation) per epoch
337
- - ✅ Accuracy (train & validation) per epoch
338
- - ✅ All custom metrics (F1, precision, recall, etc.)
339
- - ✅ Model architecture and parameters
340
- - ✅ Interactive charts in the UI
341
-
342
- **View beautiful training graphs in the UI:**
343
- 1. Navigate to your project's Structure tab
344
- 2. Click on any model artifact
345
- 3. See interactive loss/accuracy charts over epochs!
346
-
347
- No external tools needed - all visualization built into FlowyML.
348
-
349
- ### 21. 📂 Project-Based Organization
350
- Built-in multi-tenancy for managing multiple teams and initiatives.
351
-
352
- ```python
353
- from flowyml import Project
354
-
355
- project = Project("recommendation_system")
356
- pipeline = project.create_pipeline("training")
357
-
358
- # All runs, artifacts, and metadata are automatically scoped to the project
359
- runs = project.list_runs()
360
- stats = project.get_stats()
361
- ```
362
-
363
- ### 22. 📝 Pipeline Templates
364
- Stop reinventing the wheel. Use pre-built templates for common ML patterns.
365
-
366
- ```python
367
- from flowyml.core.templates import create_from_template
368
-
369
- # Create a standard training pipeline in one line
370
- pipeline = create_from_template(
371
- "ml_training",
372
- data_loader=my_loader,
373
- trainer=my_trainer,
374
- evaluator=my_evaluator
375
- )
376
- ```
377
-
378
- ## 📦 Installation
379
-
380
- ```bash
381
- # Install core
382
- pip install flowyml
383
-
384
- # Install with UI support
385
- pip install "flowyml[ui]"
386
-
387
- # Install with all features (recommended for dev)
388
- pip install "flowyml[all]"
389
- ```
390
-
391
- ## ⚡ Quick Start
392
-
393
- ```python
394
- from flowyml import Pipeline, step, context, Dataset, Model
395
-
396
- # 1. Define your configuration (Auto-injected!)
397
- ctx = context(
398
- learning_rate=0.01,
399
- batch_size=32,
400
- epochs=10
401
- )
402
-
403
- # 2. Define your steps (Pure Python)
404
- @step(outputs=["dataset"])
405
- def load_data(batch_size: int):
406
- # 'batch_size' is automatically injected from context!
407
- print(f"Loading data with batch size: {batch_size}")
408
- return Dataset.create(data=[1, 2, 3], name="mnist")
409
-
410
- @step(inputs=["dataset"], outputs=["model"])
411
- def train(dataset: Dataset, learning_rate: float, epochs: int):
412
- print(f"Training on {dataset.name} with lr={learning_rate}")
413
- # Simulate training...
414
- return Model.create(artifact={"weights": "..."}, score=0.98)
415
-
416
- # 3. Run it!
417
- pipeline = Pipeline("mnist_training", context=ctx)
418
- pipeline.add_step(load_data)
419
- pipeline.add_step(train)
420
-
421
- result = pipeline.run()
422
-
423
- print(f"Run ID: {result.run_id}")
424
- print(f"Model Score: {result.outputs['model'].score}")
425
- ```
426
-
427
- ### 23. 🌐 Pipeline Versioning
428
- Git-like versioning for pipelines. Track changes, compare, rollback.
429
-
430
- ```python
431
- from flowyml import VersionedPipeline
432
-
433
- pipeline = VersionedPipeline("training", version="v1.0.0")
434
- pipeline.add_step(load_data)
435
- pipeline.save_version()
436
-
437
- # ... make changes ...
438
- pipeline.version = "v1.1.0"
439
- pipeline.save_version()
440
-
441
- # Compare versions to see exactly what changed (steps, code, context)
442
- diff = pipeline.compare_with("v1.0.0")
443
- print(diff["modified_steps"]) # ['train_model']
444
- print(diff["context_changes"]) # {'learning_rate': {'old': 0.01, 'new': 0.001}}
445
- ```
446
-
447
- ## 🖥️ The flowyml UI
448
-
449
- Visualize your workflows, inspect artifacts, and monitor runs in real-time.
450
-
451
- ```bash
452
- # Start the UI server
453
- flowyml ui start --open-browser
454
- ```
455
-
456
- Visit **http://localhost:8080** to access the dashboard.
457
-
458
- ## 📚 Documentation
459
-
460
- - **[Getting Started](docs/getting-started.md)**: Your first 5 minutes with flowyml.
461
- - **[Core Concepts](docs/core/pipelines.md)**: Deep dive into Pipelines, Steps, and Context.
462
- - **[Advanced Features](docs/advanced/caching.md)**: Learn about Caching, Parallelism, and Conditional Execution.
463
- - **[API Reference](docs/api/core.md)**: Detailed class and function documentation.
464
-
465
- ## 🤝 Contributing
466
-
467
- We love contributions! Check out our [Contributing Guide](CONTRIBUTING.md) to get started.
468
-
469
- ## 📝 License
470
-
471
- Apache 2.0 - See [LICENSE](LICENSE) for details.
472
-
473
- ---
474
- <p align="center">
475
- <strong>Built with ❤️ by <a href="https://unicolab.ai">UnicoLab</a></strong>
476
- </p>
477
-