flowyml 1.1.0__tar.gz → 1.2.0__tar.gz

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 (158) hide show
  1. {flowyml-1.1.0 → flowyml-1.2.0}/PKG-INFO +75 -12
  2. {flowyml-1.1.0 → flowyml-1.2.0}/README.md +74 -11
  3. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/versioning.py +2 -2
  4. {flowyml-1.1.0 → flowyml-1.2.0}/pyproject.toml +5 -4
  5. {flowyml-1.1.0 → flowyml-1.2.0}/LICENSE +0 -0
  6. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/__init__.py +0 -0
  7. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/__init__.py +0 -0
  8. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/artifact.py +0 -0
  9. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/base.py +0 -0
  10. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/dataset.py +0 -0
  11. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/featureset.py +0 -0
  12. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/metrics.py +0 -0
  13. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/model.py +0 -0
  14. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/registry.py +0 -0
  15. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/assets/report.py +0 -0
  16. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/__init__.py +0 -0
  17. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/experiment.py +0 -0
  18. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/init.py +0 -0
  19. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/main.py +0 -0
  20. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/run.py +0 -0
  21. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/stack_cli.py +0 -0
  22. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/cli/ui.py +0 -0
  23. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/__init__.py +0 -0
  24. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/advanced_cache.py +0 -0
  25. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/approval.py +0 -0
  26. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/cache.py +0 -0
  27. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/checkpoint.py +0 -0
  28. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/conditional.py +0 -0
  29. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/context.py +0 -0
  30. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/error_handling.py +0 -0
  31. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/executor.py +0 -0
  32. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/graph.py +0 -0
  33. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/parallel.py +0 -0
  34. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/pipeline.py +0 -0
  35. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/project.py +0 -0
  36. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/resources.py +0 -0
  37. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/scheduler.py +0 -0
  38. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/scheduler_config.py +0 -0
  39. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/step.py +0 -0
  40. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/step_grouping.py +0 -0
  41. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/core/templates.py +0 -0
  42. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/integrations/__init__.py +0 -0
  43. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/integrations/keras.py +0 -0
  44. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/__init__.py +0 -0
  45. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/alerts.py +0 -0
  46. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/data.py +0 -0
  47. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/llm.py +0 -0
  48. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/monitor.py +0 -0
  49. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/monitoring/notifications.py +0 -0
  50. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/registry/__init__.py +0 -0
  51. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/registry/model_registry.py +0 -0
  52. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/registry/pipeline_registry.py +0 -0
  53. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/__init__.py +0 -0
  54. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/base.py +0 -0
  55. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/bridge.py +0 -0
  56. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/components.py +0 -0
  57. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/gcp.py +0 -0
  58. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/local.py +0 -0
  59. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/migration.py +0 -0
  60. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/plugin_config.py +0 -0
  61. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/plugins.py +0 -0
  62. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/stacks/registry.py +0 -0
  63. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/__init__.py +0 -0
  64. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/artifacts.py +0 -0
  65. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/__init__.py +0 -0
  66. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/base.py +0 -0
  67. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/keras.py +0 -0
  68. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/numpy.py +0 -0
  69. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/pandas.py +0 -0
  70. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/pytorch.py +0 -0
  71. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/sklearn.py +0 -0
  72. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/materializers/tensorflow.py +0 -0
  73. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/storage/metadata.py +0 -0
  74. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/tracking/__init__.py +0 -0
  75. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/tracking/experiment.py +0 -0
  76. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/tracking/leaderboard.py +0 -0
  77. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/tracking/runs.py +0 -0
  78. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/__init__.py +0 -0
  79. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/Dockerfile +0 -0
  80. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/__init__.py +0 -0
  81. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/auth.py +0 -0
  82. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/main.py +0 -0
  83. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/__init__.py +0 -0
  84. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/assets.py +0 -0
  85. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/execution.py +0 -0
  86. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/experiments.py +0 -0
  87. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/leaderboard.py +0 -0
  88. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/notifications.py +0 -0
  89. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/pipelines.py +0 -0
  90. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/plugins.py +0 -0
  91. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/projects.py +0 -0
  92. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/runs.py +0 -0
  93. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/schedules.py +0 -0
  94. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/backend/routers/traces.py +0 -0
  95. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/Dockerfile +0 -0
  96. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/README.md +0 -0
  97. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/dist/assets/index-DFNQnrUj.js +0 -0
  98. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/dist/assets/index-pWI271rZ.css +0 -0
  99. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/dist/index.html +0 -0
  100. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/index.html +0 -0
  101. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/nginx.conf +0 -0
  102. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/package-lock.json +0 -0
  103. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/package.json +0 -0
  104. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/postcss.config.js +0 -0
  105. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/App.jsx +0 -0
  106. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/assets/page.jsx +0 -0
  107. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/dashboard/page.jsx +0 -0
  108. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/experiments/[experimentId]/page.jsx +0 -0
  109. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/experiments/page.jsx +0 -0
  110. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/leaderboard/page.jsx +0 -0
  111. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/pipelines/page.jsx +0 -0
  112. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/plugins/page.jsx +0 -0
  113. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/projects/page.jsx +0 -0
  114. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/runs/[runId]/page.jsx +0 -0
  115. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/runs/page.jsx +0 -0
  116. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/schedules/page.jsx +0 -0
  117. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/settings/page.jsx +0 -0
  118. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/tokens/page.jsx +0 -0
  119. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/app/traces/page.jsx +0 -0
  120. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/Layout.jsx +0 -0
  121. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/PipelineGraph.jsx +0 -0
  122. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/header/Header.jsx +0 -0
  123. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/plugins/AddPluginDialog.jsx +0 -0
  124. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/plugins/InstalledPlugins.jsx +0 -0
  125. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/plugins/PluginBrowser.jsx +0 -0
  126. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/plugins/PluginManager.jsx +0 -0
  127. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/sidebar/Sidebar.jsx +0 -0
  128. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/Badge.jsx +0 -0
  129. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/Button.jsx +0 -0
  130. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/Card.jsx +0 -0
  131. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/CodeSnippet.jsx +0 -0
  132. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/CollapsibleCard.jsx +0 -0
  133. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/DataView.jsx +0 -0
  134. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/EmptyState.jsx +0 -0
  135. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/ExecutionStatus.jsx +0 -0
  136. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/KeyValue.jsx +0 -0
  137. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/components/ui/ProjectSelector.jsx +0 -0
  138. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/contexts/ProjectContext.jsx +0 -0
  139. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/contexts/ThemeContext.jsx +0 -0
  140. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/index.css +0 -0
  141. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/layouts/MainLayout.jsx +0 -0
  142. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/main.jsx +0 -0
  143. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/router/index.jsx +0 -0
  144. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/services/pluginService.js +0 -0
  145. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/utils/api.js +0 -0
  146. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/src/utils/cn.js +0 -0
  147. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/tailwind.config.js +0 -0
  148. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/frontend/vite.config.js +0 -0
  149. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/ui/utils.py +0 -0
  150. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/__init__.py +0 -0
  151. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/config.py +0 -0
  152. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/debug.py +0 -0
  153. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/environment.py +0 -0
  154. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/git.py +0 -0
  155. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/logging.py +0 -0
  156. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/performance.py +0 -0
  157. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/stack_config.py +0 -0
  158. {flowyml-1.1.0 → flowyml-1.2.0}/flowyml/utils/validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flowyml
3
- Version: 1.1.0
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
- **flowyml** is the comprehensive ML pipeline framework that combines the **simplicity of a Python script** with the **power of an enterprise MLOps platform**.
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 flowyml?
71
+ ## 🚀 Why FlowyML?
72
72
 
73
- | Feature | flowyml | Traditional Orchestrators |
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
- flowyml is a complete toolkit for building, debugging, and deploying ML applications.
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 tokens, cost, and latency
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
- Specialized types for ML workflows.
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
- dataset = Dataset.create(data=df, name="training_data")
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. 🔌 Universal Integrations
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.
@@ -17,21 +17,25 @@
17
17
 
18
18
  ---
19
19
 
20
- **flowyml** is the comprehensive ML pipeline framework that combines the **simplicity of a Python script** with the **power of an enterprise MLOps platform**.
20
+ **FlowyML** is the comprehensive ML pipeline framework that combines the **simplicity of a Python script** with the **power of an enterprise MLOps platform**.
21
21
 
22
- ## 🚀 Why flowyml?
22
+ ## 🚀 Why FlowyML?
23
23
 
24
- | Feature | flowyml | Traditional Orchestrators |
24
+ | Feature | FlowyML | Traditional Orchestrators |
25
25
  |---------|---------|---------------------------|
26
26
  | **Developer Experience** | 🐍 **Native Python** - No DSLs, no YAML hell. | 📜 Complex YAML or rigid DSLs. |
27
27
  | **Context Awareness** | 🧠 **Auto-Injection** - Params are just function args. | 🔌 Manual wiring of every parameter. |
28
28
  | **Caching** | ⚡ **Multi-Level** - Smart content-hashing & memoization. | 🐢 Basic file-timestamp checking. |
29
29
  | **Asset Management** | 📦 **First-Class Assets** - Models & Datasets with lineage. | 📁 Generic file paths only. |
30
30
  | **Architecture** | 🏗️ **Modular Stacks** - Local, Cloud, Hybrid. | 🔒 Vendor lock-in or complex setup. |
31
+ | **Deployment** | 🏢 **Local or Centralized** - Run locally or deploy as a company-wide hub. | 🧩 Fragmented or cloud-only. |
32
+ | **Flexibility** | 🔌 **Extensive Plugin Ecosystem** | Fixed integration with specific orchestrators or custom tools to be developed. |
33
+ | **Separation of Concerns** | 🪾 **Steps Grouping, branching and conditions** | Handling only orchestrator logic and task execution oriented. |
34
+ | **Features Rich** | 🌟 **Built-in experiment tracking, model leaderboard, human-in-the-loop, notifications, scheduling** | Very limited or none extra features. |
31
35
 
32
36
  ## 🚀 Feature Showcase
33
37
 
34
- flowyml is a complete toolkit for building, debugging, and deploying ML applications.
38
+ FlowyML is a complete toolkit for building, debugging, and deploying ML applications.
35
39
 
36
40
  ### 1. Zero-Boilerplate Orchestration
37
41
  Write pipelines as standard Python functions. No YAML, no DSLs.
@@ -61,18 +65,21 @@ def expensive_processing(data):
61
65
  ```
62
66
 
63
67
  ### 3. 🤖 LLM & GenAI Ready
64
- Trace token usage, latency, and costs automatically.
68
+ Trace token usage, latency, and costs automatically with built-in observability.
65
69
 
66
70
  ```python
67
71
  @step
68
72
  @trace_llm(model="gpt-4", tags=["production"])
69
73
  def generate_summary(text: str):
70
- # flowyml automatically tracks tokens, cost, and latency
74
+ # flowyml automatically tracks:
75
+ # - Token usage (prompt/completion)
76
+ # - Cost estimation
77
+ # - Latency & Success/Failure rates
71
78
  return openai.ChatCompletion.create(...)
72
79
  ```
73
80
 
74
- ### 4. ⚡ Efficient Step Grouping
75
- Group related steps to run in the same container - reduce overhead, maintain clarity.
81
+ ### 4. ⚡ Efficient Step Grouping & Separation of Concerns
82
+ Group related steps to run in the same container - reduce overhead, maintain clarity, and keep logic separate from configuration.
76
83
 
77
84
  ```python
78
85
  # Run preprocessing steps in same container (shares resources)
@@ -189,12 +196,13 @@ pipeline.run(debug=True) # Pauses at breakpoint
189
196
  ```
190
197
 
191
198
  ### 13. 📦 First-Class Assets
192
- Specialized types for ML workflows.
199
+ Assets are not just files; they are first-class citizens with lineage, metadata, and versioning.
193
200
 
194
201
  ```python
195
202
  from flowyml.core import Dataset, Model, Metrics, FeatureSet
196
203
 
197
- dataset = Dataset.create(data=df, name="training_data")
204
+ # Assets track their producer, lineage, and metadata automatically
205
+ dataset = Dataset.create(data=df, name="training_data", metadata={"source": "s3"})
198
206
  model = Model.create(artifact=trained_model, score=0.95)
199
207
  metrics = Metrics.create(values={"accuracy": 0.95})
200
208
  ```
@@ -236,11 +244,46 @@ if drift['drift_detected']:
236
244
  - **🔔 Notifications**: Slack/Email alerts.
237
245
  - **🛡️ Circuit Breakers**: Stop cascading failures.
238
246
 
239
- ### 18. 🔌 Universal Integrations
247
+ ### 18. 🏢 Centralized Hub & Docker
248
+ Ready for the enterprise. Run locally per project or deploy as a centralized entity for the company.
249
+ - **Docker Ready**: Backend and Frontend are fully dockerized.
250
+ - **Centralized Hub**: Share pipelines, artifacts, and experiments across the team.
251
+ - **Remote Execution**: Configure local clients to execute on the remote hub.
252
+
253
+ ### 19. 🔌 Universal Integrations
240
254
  - **ML Frameworks**: PyTorch, TensorFlow, Keras, Scikit-learn, HuggingFace.
241
255
  - **Cloud Providers**: AWS, GCP, Azure (via plugins).
242
256
  - **Tools**: MLflow, Weights & Biases, Great Expectations.
243
257
 
258
+ ### 20. 📂 Project-Based Organization
259
+ Built-in multi-tenancy for managing multiple teams and initiatives.
260
+
261
+ ```python
262
+ from flowyml import Project
263
+
264
+ project = Project("recommendation_system")
265
+ pipeline = project.create_pipeline("training")
266
+
267
+ # All runs, artifacts, and metadata are automatically scoped to the project
268
+ runs = project.list_runs()
269
+ stats = project.get_stats()
270
+ ```
271
+
272
+ ### 21. 📝 Pipeline Templates
273
+ Stop reinventing the wheel. Use pre-built templates for common ML patterns.
274
+
275
+ ```python
276
+ from flowyml.core.templates import create_from_template
277
+
278
+ # Create a standard training pipeline in one line
279
+ pipeline = create_from_template(
280
+ "ml_training",
281
+ data_loader=my_loader,
282
+ trainer=my_trainer,
283
+ evaluator=my_evaluator
284
+ )
285
+ ```
286
+
244
287
  ## 📦 Installation
245
288
 
246
289
  ```bash
@@ -290,6 +333,26 @@ print(f"Run ID: {result.run_id}")
290
333
  print(f"Model Score: {result.outputs['model'].score}")
291
334
  ```
292
335
 
336
+ ### 16. 🌐 Pipeline Versioning
337
+ Git-like versioning for pipelines. Track changes, compare, rollback.
338
+
339
+ ```python
340
+ from flowyml import VersionedPipeline
341
+
342
+ pipeline = VersionedPipeline("training", version="v1.0.0")
343
+ pipeline.add_step(load_data)
344
+ pipeline.save_version()
345
+
346
+ # ... make changes ...
347
+ pipeline.version = "v1.1.0"
348
+ pipeline.save_version()
349
+
350
+ # Compare versions to see exactly what changed (steps, code, context)
351
+ diff = pipeline.compare_with("v1.0.0")
352
+ print(diff["modified_steps"]) # ['train_model']
353
+ print(diff["context_changes"]) # {'learning_rate': {'old': 0.01, 'new': 0.001}}
354
+ ```
355
+
293
356
  ## 🖥️ The flowyml UI
294
357
 
295
358
  Visualize your workflows, inspect artifacts, and monitor runs in real-time.
@@ -3,7 +3,7 @@
3
3
  import json
4
4
  import hashlib
5
5
  from pathlib import Path
6
- from typing import Any, Never
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) -> Never:
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
  [tool.poetry]
2
2
  name = "flowyml"
3
- version = "1.1.0"
3
+ version = "1.2.0"
4
4
  description = "Next-Generation ML Pipeline Framework"
5
5
  authors = ["flowyml Team <support@unicolab.ai>"]
6
6
  license = "Apache-2.0"
@@ -19,6 +19,7 @@ classifiers = [
19
19
  "Programming Language :: Python :: 3.12",
20
20
  ]
21
21
  packages = [{include = "flowyml"}]
22
+ include = ["flowyml/ui/frontend/dist/**/*"]
22
23
 
23
24
  [tool.poetry.dependencies]
24
25
  python = ">=3.10,<4.0"
@@ -71,11 +72,11 @@ mkdocs = "^1.5.3"
71
72
  mkdocs-material = "^9.5.3"
72
73
  mkdocs-material-extensions = ">=1.3.1"
73
74
  mkdocs-gen-files = "^0.5.0"
74
- mkdocstrings-python = "^0.9.0"
75
- mkdocstrings = {extras = ["python"], version = "^0.24.0"}
75
+ mkdocstrings-python = "^1.12.0"
76
+ mkdocstrings = {extras = ["python"], version = "^0.28.0"}
76
77
  mkdocs-redirects = "^1.2.2"
77
78
  mike = ">=2.0.0"
78
- griffe = "^0.25.0"
79
+ griffe = "^1.5.0"
79
80
  mkdocs-include-markdown-plugin = "^7.2.0"
80
81
 
81
82
  [tool.poetry.extras]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes