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.
- flowyml/assets/base.py +15 -0
- flowyml/assets/metrics.py +5 -0
- flowyml/cli/main.py +709 -0
- flowyml/cli/stack_cli.py +138 -25
- flowyml/core/__init__.py +17 -0
- flowyml/core/executor.py +161 -26
- flowyml/core/image_builder.py +129 -0
- flowyml/core/log_streamer.py +227 -0
- flowyml/core/orchestrator.py +22 -2
- flowyml/core/pipeline.py +34 -10
- flowyml/core/routing.py +558 -0
- flowyml/core/step.py +9 -1
- flowyml/core/step_grouping.py +49 -35
- flowyml/core/types.py +407 -0
- flowyml/monitoring/alerts.py +10 -0
- flowyml/monitoring/notifications.py +104 -25
- flowyml/monitoring/slack_blocks.py +323 -0
- flowyml/plugins/__init__.py +251 -0
- flowyml/plugins/alerters/__init__.py +1 -0
- flowyml/plugins/alerters/slack.py +168 -0
- flowyml/plugins/base.py +752 -0
- flowyml/plugins/config.py +478 -0
- flowyml/plugins/deployers/__init__.py +22 -0
- flowyml/plugins/deployers/gcp_cloud_run.py +200 -0
- flowyml/plugins/deployers/sagemaker.py +306 -0
- flowyml/plugins/deployers/vertex.py +290 -0
- flowyml/plugins/integration.py +369 -0
- flowyml/plugins/manager.py +510 -0
- flowyml/plugins/model_registries/__init__.py +22 -0
- flowyml/plugins/model_registries/mlflow.py +159 -0
- flowyml/plugins/model_registries/sagemaker.py +489 -0
- flowyml/plugins/model_registries/vertex.py +386 -0
- flowyml/plugins/orchestrators/__init__.py +13 -0
- flowyml/plugins/orchestrators/sagemaker.py +443 -0
- flowyml/plugins/orchestrators/vertex_ai.py +461 -0
- flowyml/plugins/registries/__init__.py +13 -0
- flowyml/plugins/registries/ecr.py +321 -0
- flowyml/plugins/registries/gcr.py +313 -0
- flowyml/plugins/registry.py +454 -0
- flowyml/plugins/stack.py +494 -0
- flowyml/plugins/stack_config.py +537 -0
- flowyml/plugins/stores/__init__.py +13 -0
- flowyml/plugins/stores/gcs.py +460 -0
- flowyml/plugins/stores/s3.py +453 -0
- flowyml/plugins/trackers/__init__.py +11 -0
- flowyml/plugins/trackers/mlflow.py +316 -0
- flowyml/plugins/validators/__init__.py +3 -0
- flowyml/plugins/validators/deepchecks.py +119 -0
- flowyml/registry/__init__.py +2 -1
- flowyml/registry/model_environment.py +109 -0
- flowyml/registry/model_registry.py +241 -96
- flowyml/serving/__init__.py +17 -0
- flowyml/serving/model_server.py +628 -0
- flowyml/stacks/__init__.py +60 -0
- flowyml/stacks/aws.py +93 -0
- flowyml/stacks/base.py +62 -0
- flowyml/stacks/components.py +12 -0
- flowyml/stacks/gcp.py +44 -9
- flowyml/stacks/plugins.py +115 -0
- flowyml/stacks/registry.py +2 -1
- flowyml/storage/sql.py +401 -12
- flowyml/tracking/experiment.py +8 -5
- flowyml/ui/backend/Dockerfile +87 -16
- flowyml/ui/backend/auth.py +12 -2
- flowyml/ui/backend/main.py +149 -5
- flowyml/ui/backend/routers/ai_context.py +226 -0
- flowyml/ui/backend/routers/assets.py +23 -4
- flowyml/ui/backend/routers/auth.py +96 -0
- flowyml/ui/backend/routers/deployments.py +660 -0
- flowyml/ui/backend/routers/model_explorer.py +597 -0
- flowyml/ui/backend/routers/plugins.py +103 -51
- flowyml/ui/backend/routers/projects.py +91 -8
- flowyml/ui/backend/routers/runs.py +20 -1
- flowyml/ui/backend/routers/schedules.py +22 -17
- flowyml/ui/backend/routers/templates.py +319 -0
- flowyml/ui/backend/routers/websocket.py +2 -2
- flowyml/ui/frontend/Dockerfile +55 -6
- flowyml/ui/frontend/dist/assets/index-B5AsPTSz.css +1 -0
- flowyml/ui/frontend/dist/assets/index-dFbZ8wD8.js +753 -0
- flowyml/ui/frontend/dist/index.html +2 -2
- flowyml/ui/frontend/dist/logo.png +0 -0
- flowyml/ui/frontend/nginx.conf +65 -4
- flowyml/ui/frontend/package-lock.json +1404 -74
- flowyml/ui/frontend/package.json +3 -0
- flowyml/ui/frontend/public/logo.png +0 -0
- flowyml/ui/frontend/src/App.jsx +10 -7
- flowyml/ui/frontend/src/app/auth/Login.jsx +90 -0
- flowyml/ui/frontend/src/app/dashboard/page.jsx +8 -8
- flowyml/ui/frontend/src/app/deployments/page.jsx +786 -0
- flowyml/ui/frontend/src/app/model-explorer/page.jsx +1031 -0
- flowyml/ui/frontend/src/app/pipelines/page.jsx +12 -2
- flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectExperimentsList.jsx +19 -6
- flowyml/ui/frontend/src/app/runs/[runId]/page.jsx +36 -24
- flowyml/ui/frontend/src/app/runs/page.jsx +8 -2
- flowyml/ui/frontend/src/app/settings/page.jsx +267 -253
- flowyml/ui/frontend/src/components/AssetDetailsPanel.jsx +29 -7
- flowyml/ui/frontend/src/components/Layout.jsx +6 -0
- flowyml/ui/frontend/src/components/PipelineGraph.jsx +79 -29
- flowyml/ui/frontend/src/components/RunDetailsPanel.jsx +36 -6
- flowyml/ui/frontend/src/components/RunMetaPanel.jsx +113 -0
- flowyml/ui/frontend/src/components/ai/AIAssistantButton.jsx +71 -0
- flowyml/ui/frontend/src/components/ai/AIAssistantPanel.jsx +420 -0
- flowyml/ui/frontend/src/components/header/Header.jsx +22 -0
- flowyml/ui/frontend/src/components/plugins/PluginManager.jsx +4 -4
- flowyml/ui/frontend/src/components/plugins/{ZenMLIntegration.jsx → StackImport.jsx} +38 -12
- flowyml/ui/frontend/src/components/sidebar/Sidebar.jsx +36 -13
- flowyml/ui/frontend/src/contexts/AIAssistantContext.jsx +245 -0
- flowyml/ui/frontend/src/contexts/AuthContext.jsx +108 -0
- flowyml/ui/frontend/src/hooks/useAIContext.js +156 -0
- flowyml/ui/frontend/src/hooks/useWebGPU.js +54 -0
- flowyml/ui/frontend/src/layouts/MainLayout.jsx +6 -0
- flowyml/ui/frontend/src/router/index.jsx +47 -20
- flowyml/ui/frontend/src/services/pluginService.js +3 -1
- flowyml/ui/server_manager.py +5 -5
- flowyml/ui/utils.py +157 -39
- flowyml/utils/config.py +37 -15
- flowyml/utils/model_introspection.py +123 -0
- flowyml/utils/observability.py +30 -0
- flowyml-1.8.0.dist-info/METADATA +174 -0
- {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/RECORD +123 -65
- {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/WHEEL +1 -1
- flowyml/ui/frontend/dist/assets/index-B40RsQDq.css +0 -1
- flowyml/ui/frontend/dist/assets/index-CjI0zKCn.js +0 -685
- flowyml-1.7.2.dist-info/METADATA +0 -477
- {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/entry_points.txt +0 -0
- {flowyml-1.7.2.dist-info → flowyml-1.8.0.dist-info}/licenses/LICENSE +0 -0
flowyml-1.7.2.dist-info/METADATA
DELETED
|
@@ -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
|
-
|
|
File without changes
|
|
File without changes
|