flowyml 1.1.0__py3-none-any.whl → 1.2.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/core/versioning.py +2 -2
- {flowyml-1.1.0.dist-info → flowyml-1.2.0.dist-info}/METADATA +75 -12
- {flowyml-1.1.0.dist-info → flowyml-1.2.0.dist-info}/RECORD +6 -6
- {flowyml-1.1.0.dist-info → flowyml-1.2.0.dist-info}/WHEEL +0 -0
- {flowyml-1.1.0.dist-info → flowyml-1.2.0.dist-info}/entry_points.txt +0 -0
- {flowyml-1.1.0.dist-info → flowyml-1.2.0.dist-info}/licenses/LICENSE +0 -0
flowyml/core/versioning.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import json
|
|
4
4
|
import hashlib
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, NoReturn
|
|
7
7
|
from datetime import datetime
|
|
8
8
|
from dataclasses import dataclass, asdict
|
|
9
9
|
|
|
@@ -204,7 +204,7 @@ class VersionedPipeline:
|
|
|
204
204
|
if changes["modified"]:
|
|
205
205
|
pass
|
|
206
206
|
|
|
207
|
-
def rollback(self, version: str) ->
|
|
207
|
+
def rollback(self, version: str) -> NoReturn:
|
|
208
208
|
"""Rollback to a previous version (not implemented - would need to reconstruct pipeline)."""
|
|
209
209
|
raise NotImplementedError("Rollback requires pipeline reconstruction from saved state")
|
|
210
210
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowyml
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Next-Generation ML Pipeline Framework
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -66,21 +66,25 @@ Description-Content-Type: text/markdown
|
|
|
66
66
|
|
|
67
67
|
---
|
|
68
68
|
|
|
69
|
-
**
|
|
69
|
+
**FlowyML** is the comprehensive ML pipeline framework that combines the **simplicity of a Python script** with the **power of an enterprise MLOps platform**.
|
|
70
70
|
|
|
71
|
-
## 🚀 Why
|
|
71
|
+
## 🚀 Why FlowyML?
|
|
72
72
|
|
|
73
|
-
| Feature |
|
|
73
|
+
| Feature | FlowyML | Traditional Orchestrators |
|
|
74
74
|
|---------|---------|---------------------------|
|
|
75
75
|
| **Developer Experience** | 🐍 **Native Python** - No DSLs, no YAML hell. | 📜 Complex YAML or rigid DSLs. |
|
|
76
76
|
| **Context Awareness** | 🧠 **Auto-Injection** - Params are just function args. | 🔌 Manual wiring of every parameter. |
|
|
77
77
|
| **Caching** | ⚡ **Multi-Level** - Smart content-hashing & memoization. | 🐢 Basic file-timestamp checking. |
|
|
78
78
|
| **Asset Management** | 📦 **First-Class Assets** - Models & Datasets with lineage. | 📁 Generic file paths only. |
|
|
79
79
|
| **Architecture** | 🏗️ **Modular Stacks** - Local, Cloud, Hybrid. | 🔒 Vendor lock-in or complex setup. |
|
|
80
|
+
| **Deployment** | 🏢 **Local or Centralized** - Run locally or deploy as a company-wide hub. | 🧩 Fragmented or cloud-only. |
|
|
81
|
+
| **Flexibility** | 🔌 **Extensive Plugin Ecosystem** | Fixed integration with specific orchestrators or custom tools to be developed. |
|
|
82
|
+
| **Separation of Concerns** | **Steps Grouping, branching and conditions** | Handling only orchestrator logic and task execution oriented. |
|
|
83
|
+
| **Features Rich** | 🌟 **Built-in experiment tracking, model leaderboard, human-in-the-loop, notifications, scheduling** | Very limited or none extra features. |
|
|
80
84
|
|
|
81
85
|
## 🚀 Feature Showcase
|
|
82
86
|
|
|
83
|
-
|
|
87
|
+
FlowyML is a complete toolkit for building, debugging, and deploying ML applications.
|
|
84
88
|
|
|
85
89
|
### 1. Zero-Boilerplate Orchestration
|
|
86
90
|
Write pipelines as standard Python functions. No YAML, no DSLs.
|
|
@@ -110,18 +114,21 @@ def expensive_processing(data):
|
|
|
110
114
|
```
|
|
111
115
|
|
|
112
116
|
### 3. 🤖 LLM & GenAI Ready
|
|
113
|
-
Trace token usage, latency, and costs automatically.
|
|
117
|
+
Trace token usage, latency, and costs automatically with built-in observability.
|
|
114
118
|
|
|
115
119
|
```python
|
|
116
120
|
@step
|
|
117
121
|
@trace_llm(model="gpt-4", tags=["production"])
|
|
118
122
|
def generate_summary(text: str):
|
|
119
|
-
# flowyml automatically tracks
|
|
123
|
+
# flowyml automatically tracks:
|
|
124
|
+
# - Token usage (prompt/completion)
|
|
125
|
+
# - Cost estimation
|
|
126
|
+
# - Latency & Success/Failure rates
|
|
120
127
|
return openai.ChatCompletion.create(...)
|
|
121
128
|
```
|
|
122
129
|
|
|
123
|
-
### 4. ⚡ Efficient Step Grouping
|
|
124
|
-
Group related steps to run in the same container - reduce overhead, maintain clarity.
|
|
130
|
+
### 4. ⚡ Efficient Step Grouping & Separation of Concerns
|
|
131
|
+
Group related steps to run in the same container - reduce overhead, maintain clarity, and keep logic separate from configuration.
|
|
125
132
|
|
|
126
133
|
```python
|
|
127
134
|
# Run preprocessing steps in same container (shares resources)
|
|
@@ -238,12 +245,13 @@ pipeline.run(debug=True) # Pauses at breakpoint
|
|
|
238
245
|
```
|
|
239
246
|
|
|
240
247
|
### 13. 📦 First-Class Assets
|
|
241
|
-
|
|
248
|
+
Assets are not just files; they are first-class citizens with lineage, metadata, and versioning.
|
|
242
249
|
|
|
243
250
|
```python
|
|
244
251
|
from flowyml.core import Dataset, Model, Metrics, FeatureSet
|
|
245
252
|
|
|
246
|
-
|
|
253
|
+
# Assets track their producer, lineage, and metadata automatically
|
|
254
|
+
dataset = Dataset.create(data=df, name="training_data", metadata={"source": "s3"})
|
|
247
255
|
model = Model.create(artifact=trained_model, score=0.95)
|
|
248
256
|
metrics = Metrics.create(values={"accuracy": 0.95})
|
|
249
257
|
```
|
|
@@ -285,11 +293,46 @@ if drift['drift_detected']:
|
|
|
285
293
|
- **🔔 Notifications**: Slack/Email alerts.
|
|
286
294
|
- **🛡️ Circuit Breakers**: Stop cascading failures.
|
|
287
295
|
|
|
288
|
-
### 18.
|
|
296
|
+
### 18. 🏢 Centralized Hub & Docker
|
|
297
|
+
Ready for the enterprise. Run locally per project or deploy as a centralized entity for the company.
|
|
298
|
+
- **Docker Ready**: Backend and Frontend are fully dockerized.
|
|
299
|
+
- **Centralized Hub**: Share pipelines, artifacts, and experiments across the team.
|
|
300
|
+
- **Remote Execution**: Configure local clients to execute on the remote hub.
|
|
301
|
+
|
|
302
|
+
### 19. 🔌 Universal Integrations
|
|
289
303
|
- **ML Frameworks**: PyTorch, TensorFlow, Keras, Scikit-learn, HuggingFace.
|
|
290
304
|
- **Cloud Providers**: AWS, GCP, Azure (via plugins).
|
|
291
305
|
- **Tools**: MLflow, Weights & Biases, Great Expectations.
|
|
292
306
|
|
|
307
|
+
### 20. 📂 Project-Based Organization
|
|
308
|
+
Built-in multi-tenancy for managing multiple teams and initiatives.
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
from flowyml import Project
|
|
312
|
+
|
|
313
|
+
project = Project("recommendation_system")
|
|
314
|
+
pipeline = project.create_pipeline("training")
|
|
315
|
+
|
|
316
|
+
# All runs, artifacts, and metadata are automatically scoped to the project
|
|
317
|
+
runs = project.list_runs()
|
|
318
|
+
stats = project.get_stats()
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### 21. 📝 Pipeline Templates
|
|
322
|
+
Stop reinventing the wheel. Use pre-built templates for common ML patterns.
|
|
323
|
+
|
|
324
|
+
```python
|
|
325
|
+
from flowyml.core.templates import create_from_template
|
|
326
|
+
|
|
327
|
+
# Create a standard training pipeline in one line
|
|
328
|
+
pipeline = create_from_template(
|
|
329
|
+
"ml_training",
|
|
330
|
+
data_loader=my_loader,
|
|
331
|
+
trainer=my_trainer,
|
|
332
|
+
evaluator=my_evaluator
|
|
333
|
+
)
|
|
334
|
+
```
|
|
335
|
+
|
|
293
336
|
## 📦 Installation
|
|
294
337
|
|
|
295
338
|
```bash
|
|
@@ -339,6 +382,26 @@ print(f"Run ID: {result.run_id}")
|
|
|
339
382
|
print(f"Model Score: {result.outputs['model'].score}")
|
|
340
383
|
```
|
|
341
384
|
|
|
385
|
+
### 16. 🌐 Pipeline Versioning
|
|
386
|
+
Git-like versioning for pipelines. Track changes, compare, rollback.
|
|
387
|
+
|
|
388
|
+
```python
|
|
389
|
+
from flowyml import VersionedPipeline
|
|
390
|
+
|
|
391
|
+
pipeline = VersionedPipeline("training", version="v1.0.0")
|
|
392
|
+
pipeline.add_step(load_data)
|
|
393
|
+
pipeline.save_version()
|
|
394
|
+
|
|
395
|
+
# ... make changes ...
|
|
396
|
+
pipeline.version = "v1.1.0"
|
|
397
|
+
pipeline.save_version()
|
|
398
|
+
|
|
399
|
+
# Compare versions to see exactly what changed (steps, code, context)
|
|
400
|
+
diff = pipeline.compare_with("v1.0.0")
|
|
401
|
+
print(diff["modified_steps"]) # ['train_model']
|
|
402
|
+
print(diff["context_changes"]) # {'learning_rate': {'old': 0.01, 'new': 0.001}}
|
|
403
|
+
```
|
|
404
|
+
|
|
342
405
|
## 🖥️ The flowyml UI
|
|
343
406
|
|
|
344
407
|
Visualize your workflows, inspect artifacts, and monitor runs in real-time.
|
|
@@ -34,7 +34,7 @@ flowyml/core/scheduler_config.py,sha256=4VF_AKKU_AcHXURZjE77ff8Uhm2eO7v_nWbs1bq7
|
|
|
34
34
|
flowyml/core/step.py,sha256=LOec72XuuHpMuRcz9gc_3JjWlcfYBWz-fVEuLXBiHqA,6822
|
|
35
35
|
flowyml/core/step_grouping.py,sha256=wBMZbOLZW5ghN8n8J3CmzKFKTaytRzrLkHJ-AwCuP5E,9941
|
|
36
36
|
flowyml/core/templates.py,sha256=r7WbxZv8-BV3_3oX27ACGSitIsmNbNd4VeitpI2uJeg,6359
|
|
37
|
-
flowyml/core/versioning.py,sha256=
|
|
37
|
+
flowyml/core/versioning.py,sha256=kpYLJ7YBTfGduZmy45-qcnJLOIFqsIcc6WIisObVKYE,7080
|
|
38
38
|
flowyml/integrations/__init__.py,sha256=SQWPFwFs_1gLGlJ6TDo2bcFKwBrv1PkwhZvEiELV1ok,28
|
|
39
39
|
flowyml/integrations/keras.py,sha256=k8U77ti44lGVx5GbTp0bmS_3Ex-8bSRqZQYIJyBDe6M,4507
|
|
40
40
|
flowyml/monitoring/__init__.py,sha256=nkqmfdvLGMd44NfrIvH2vwVZBJGDVUn-qpei192WJp4,33
|
|
@@ -152,8 +152,8 @@ flowyml/utils/logging.py,sha256=PBJDFlGdp1mePS6A3g08dnGAB-v8jTlcNxEsYs9WSBo,1371
|
|
|
152
152
|
flowyml/utils/performance.py,sha256=-ne9v9ddEltiKRPk-AerM1R3Gwwd_oCRKtNyHARWd4k,8655
|
|
153
153
|
flowyml/utils/stack_config.py,sha256=54vN_Ipa4ZUNIWt-D1j1Qeh85VHjfBE5fkaQMRj7-cI,9147
|
|
154
154
|
flowyml/utils/validation.py,sha256=mClumVro0bl_XXxT1zWPlRI6M_iZa3z2SZ0QUdmTOqs,10199
|
|
155
|
-
flowyml-1.
|
|
156
|
-
flowyml-1.
|
|
157
|
-
flowyml-1.
|
|
158
|
-
flowyml-1.
|
|
159
|
-
flowyml-1.
|
|
155
|
+
flowyml-1.2.0.dist-info/METADATA,sha256=yXlG92PzVDVHbwODf7Os4J7gsUV1IOfGjdJQHrHrVLk,14257
|
|
156
|
+
flowyml-1.2.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
157
|
+
flowyml-1.2.0.dist-info/entry_points.txt,sha256=yuF-dOC4rbyJ2Aqi4CMRBxFhqIRoKO6Mhh6jfiQEVjI,48
|
|
158
|
+
flowyml-1.2.0.dist-info/licenses/LICENSE,sha256=5mUUSQiCx-qiHXxla6s0tL-b1ZbDPNQ1Cw13oUPANsU,625
|
|
159
|
+
flowyml-1.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|