flowyml 1.7.2__tar.gz → 1.8.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.
- flowyml-1.8.0/PKG-INFO +174 -0
- flowyml-1.8.0/README.md +108 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/base.py +15 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/metrics.py +5 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/main.py +709 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/stack_cli.py +138 -25
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/__init__.py +17 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/executor.py +161 -26
- flowyml-1.8.0/flowyml/core/image_builder.py +129 -0
- flowyml-1.8.0/flowyml/core/log_streamer.py +227 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/orchestrator.py +22 -2
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/pipeline.py +34 -10
- flowyml-1.8.0/flowyml/core/routing.py +558 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/step.py +9 -1
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/step_grouping.py +49 -35
- flowyml-1.8.0/flowyml/core/types.py +407 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/alerts.py +10 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/notifications.py +104 -25
- flowyml-1.8.0/flowyml/monitoring/slack_blocks.py +323 -0
- flowyml-1.8.0/flowyml/plugins/__init__.py +251 -0
- flowyml-1.8.0/flowyml/plugins/alerters/__init__.py +1 -0
- flowyml-1.8.0/flowyml/plugins/alerters/slack.py +168 -0
- flowyml-1.8.0/flowyml/plugins/base.py +752 -0
- flowyml-1.8.0/flowyml/plugins/config.py +478 -0
- flowyml-1.8.0/flowyml/plugins/deployers/__init__.py +22 -0
- flowyml-1.8.0/flowyml/plugins/deployers/gcp_cloud_run.py +200 -0
- flowyml-1.8.0/flowyml/plugins/deployers/sagemaker.py +306 -0
- flowyml-1.8.0/flowyml/plugins/deployers/vertex.py +290 -0
- flowyml-1.8.0/flowyml/plugins/integration.py +369 -0
- flowyml-1.8.0/flowyml/plugins/manager.py +510 -0
- flowyml-1.8.0/flowyml/plugins/model_registries/__init__.py +22 -0
- flowyml-1.8.0/flowyml/plugins/model_registries/mlflow.py +159 -0
- flowyml-1.8.0/flowyml/plugins/model_registries/sagemaker.py +489 -0
- flowyml-1.8.0/flowyml/plugins/model_registries/vertex.py +386 -0
- flowyml-1.8.0/flowyml/plugins/orchestrators/__init__.py +13 -0
- flowyml-1.8.0/flowyml/plugins/orchestrators/sagemaker.py +443 -0
- flowyml-1.8.0/flowyml/plugins/orchestrators/vertex_ai.py +461 -0
- flowyml-1.8.0/flowyml/plugins/registries/__init__.py +13 -0
- flowyml-1.8.0/flowyml/plugins/registries/ecr.py +321 -0
- flowyml-1.8.0/flowyml/plugins/registries/gcr.py +313 -0
- flowyml-1.8.0/flowyml/plugins/registry.py +454 -0
- flowyml-1.8.0/flowyml/plugins/stack.py +494 -0
- flowyml-1.8.0/flowyml/plugins/stack_config.py +537 -0
- flowyml-1.8.0/flowyml/plugins/stores/__init__.py +13 -0
- flowyml-1.8.0/flowyml/plugins/stores/gcs.py +460 -0
- flowyml-1.8.0/flowyml/plugins/stores/s3.py +453 -0
- flowyml-1.8.0/flowyml/plugins/trackers/__init__.py +11 -0
- flowyml-1.8.0/flowyml/plugins/trackers/mlflow.py +316 -0
- flowyml-1.8.0/flowyml/plugins/validators/__init__.py +3 -0
- flowyml-1.8.0/flowyml/plugins/validators/deepchecks.py +119 -0
- flowyml-1.8.0/flowyml/registry/__init__.py +6 -0
- flowyml-1.8.0/flowyml/registry/model_environment.py +109 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/registry/model_registry.py +241 -96
- flowyml-1.8.0/flowyml/serving/__init__.py +17 -0
- flowyml-1.8.0/flowyml/serving/model_server.py +628 -0
- flowyml-1.8.0/flowyml/stacks/__init__.py +102 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/aws.py +93 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/base.py +62 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/components.py +12 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/gcp.py +44 -9
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/plugins.py +115 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/registry.py +2 -1
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/sql.py +401 -12
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/tracking/experiment.py +8 -5
- flowyml-1.8.0/flowyml/ui/backend/Dockerfile +102 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/auth.py +12 -2
- flowyml-1.8.0/flowyml/ui/backend/main.py +296 -0
- flowyml-1.8.0/flowyml/ui/backend/routers/ai_context.py +226 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/assets.py +23 -4
- flowyml-1.8.0/flowyml/ui/backend/routers/auth.py +96 -0
- flowyml-1.8.0/flowyml/ui/backend/routers/deployments.py +660 -0
- flowyml-1.8.0/flowyml/ui/backend/routers/model_explorer.py +597 -0
- flowyml-1.8.0/flowyml/ui/backend/routers/plugins.py +244 -0
- flowyml-1.8.0/flowyml/ui/backend/routers/projects.py +194 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/runs.py +20 -1
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/schedules.py +22 -17
- flowyml-1.8.0/flowyml/ui/backend/routers/templates.py +319 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/websocket.py +2 -2
- flowyml-1.8.0/flowyml/ui/frontend/Dockerfile +69 -0
- flowyml-1.8.0/flowyml/ui/frontend/dist/assets/index-B5AsPTSz.css +1 -0
- flowyml-1.8.0/flowyml/ui/frontend/dist/assets/index-dFbZ8wD8.js +753 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/dist/index.html +2 -2
- flowyml-1.8.0/flowyml/ui/frontend/dist/logo.png +0 -0
- flowyml-1.8.0/flowyml/ui/frontend/nginx.conf +87 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/package-lock.json +1404 -74
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/package.json +3 -0
- flowyml-1.8.0/flowyml/ui/frontend/public/logo.png +0 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/App.jsx +27 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/app/auth/Login.jsx +90 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/dashboard/page.jsx +8 -8
- flowyml-1.8.0/flowyml/ui/frontend/src/app/deployments/page.jsx +786 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/app/model-explorer/page.jsx +1031 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/pipelines/page.jsx +12 -2
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectExperimentsList.jsx +19 -6
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/runs/[runId]/page.jsx +36 -24
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/runs/page.jsx +8 -2
- flowyml-1.8.0/flowyml/ui/frontend/src/app/settings/page.jsx +329 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/AssetDetailsPanel.jsx +29 -7
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/Layout.jsx +6 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/PipelineGraph.jsx +79 -29
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/RunDetailsPanel.jsx +36 -6
- flowyml-1.8.0/flowyml/ui/frontend/src/components/RunMetaPanel.jsx +113 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/components/ai/AIAssistantButton.jsx +71 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/components/ai/AIAssistantPanel.jsx +420 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/header/Header.jsx +22 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/plugins/PluginManager.jsx +4 -4
- flowyml-1.7.2/flowyml/ui/frontend/src/components/plugins/ZenMLIntegration.jsx → flowyml-1.8.0/flowyml/ui/frontend/src/components/plugins/StackImport.jsx +38 -12
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/sidebar/Sidebar.jsx +36 -13
- flowyml-1.8.0/flowyml/ui/frontend/src/contexts/AIAssistantContext.jsx +245 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/contexts/AuthContext.jsx +108 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/hooks/useAIContext.js +156 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/hooks/useWebGPU.js +54 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/layouts/MainLayout.jsx +6 -0
- flowyml-1.8.0/flowyml/ui/frontend/src/router/index.jsx +74 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/services/pluginService.js +3 -1
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/server_manager.py +5 -5
- flowyml-1.8.0/flowyml/ui/utils.py +259 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/config.py +37 -15
- flowyml-1.8.0/flowyml/utils/model_introspection.py +123 -0
- flowyml-1.8.0/flowyml/utils/observability.py +30 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/pyproject.toml +17 -4
- flowyml-1.7.2/PKG-INFO +0 -477
- flowyml-1.7.2/README.md +0 -419
- flowyml-1.7.2/flowyml/registry/__init__.py +0 -5
- flowyml-1.7.2/flowyml/stacks/__init__.py +0 -42
- flowyml-1.7.2/flowyml/ui/backend/Dockerfile +0 -31
- flowyml-1.7.2/flowyml/ui/backend/main.py +0 -152
- flowyml-1.7.2/flowyml/ui/backend/routers/plugins.py +0 -192
- flowyml-1.7.2/flowyml/ui/backend/routers/projects.py +0 -111
- flowyml-1.7.2/flowyml/ui/frontend/Dockerfile +0 -20
- flowyml-1.7.2/flowyml/ui/frontend/dist/assets/index-B40RsQDq.css +0 -1
- flowyml-1.7.2/flowyml/ui/frontend/dist/assets/index-CjI0zKCn.js +0 -685
- flowyml-1.7.2/flowyml/ui/frontend/nginx.conf +0 -26
- flowyml-1.7.2/flowyml/ui/frontend/src/App.jsx +0 -24
- flowyml-1.7.2/flowyml/ui/frontend/src/app/settings/page.jsx +0 -315
- flowyml-1.7.2/flowyml/ui/frontend/src/router/index.jsx +0 -47
- flowyml-1.7.2/flowyml/ui/utils.py +0 -141
- {flowyml-1.7.2 → flowyml-1.8.0}/LICENSE +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/artifact.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/dataset.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/featureset.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/model.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/registry.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/assets/report.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/experiment.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/init.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/models.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/rich_utils.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/run.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/cli/ui.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/advanced_cache.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/approval.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/cache.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/checkpoint.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/conditional.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/context.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/display.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/error_handling.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/execution_status.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/graph.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/hooks.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/observability.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/parallel.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/project.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/remote_orchestrator.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/resources.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/retry_policy.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/scheduler.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/scheduler_config.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/submission_result.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/templates.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/core/versioning.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/integrations/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/integrations/keras.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/data.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/llm.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/monitoring/monitor.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/registry/pipeline_registry.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/azure.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/bridge.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/local.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/migration.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/stacks/plugin_config.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/artifacts.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/base.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/cloudpickle.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/keras.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/numpy.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/pandas.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/pytorch.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/sklearn.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/materializers/tensorflow.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/metadata.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/storage/remote.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/tracking/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/tracking/leaderboard.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/tracking/runs.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/dependencies.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/client.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/execution.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/experiments.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/leaderboard.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/metrics.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/notifications.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/pipelines.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/stats.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/backend/routers/traces.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/README.md +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/index.html +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/postcss.config.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/assets/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/compare/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/experiments/[experimentId]/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/experiments/compare/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/experiments/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/leaderboard/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/observability/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/plugins/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectArtifactsList.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectHeader.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectHierarchy.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectMetricsPanel.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectPipelinesList.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectRelations.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectRunsList.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectTabs.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/[projectId]/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/projects/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/schedules/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/tokens/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/app/traces/page.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ArtifactViewer.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/AssetLineageGraph.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/AssetStatsDashboard.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/AssetTreeHierarchy.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/DatasetViewer.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ExperimentDetailsPanel.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/NavigationTree.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/PipelineDetailsPanel.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ProjectSelector.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/TrainingHistoryChart.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/TrainingMetricsPanel.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/plugins/AddPluginDialog.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/plugins/InstalledPlugins.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/plugins/PluginBrowser.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/Badge.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/Button.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/Card.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/CodeSnippet.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/CollapsibleCard.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/DataView.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/EmptyState.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/ErrorBoundary.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/ExecutionStatus.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/KeyValue.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/components/ui/ProjectSelector.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/contexts/ProjectContext.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/contexts/ThemeContext.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/contexts/ToastContext.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/index.css +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/main.jsx +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/utils/api.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/utils/cn.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/utils/date.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/src/utils/downloads.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/tailwind.config.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/ui/frontend/vite.config.js +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/__init__.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/debug.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/environment.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/git.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/logging.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/performance.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/stack_config.py +0 -0
- {flowyml-1.7.2 → flowyml-1.8.0}/flowyml/utils/validation.py +0 -0
flowyml-1.8.0/PKG-INFO
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flowyml
|
|
3
|
+
Version: 1.8.0
|
|
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 :: 4 - Beta
|
|
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: alembic (>=1.13.0)
|
|
31
|
+
Requires-Dist: boto3 (>=1.28) ; extra == "aws" or extra == "all"
|
|
32
|
+
Requires-Dist: click (>=8.0.0)
|
|
33
|
+
Requires-Dist: cloudpickle (>=2.0.0)
|
|
34
|
+
Requires-Dist: croniter (>=2.0.1,<3.0.0)
|
|
35
|
+
Requires-Dist: fastapi (>=0.122.0,<0.123.0) ; extra == "ui" or extra == "all"
|
|
36
|
+
Requires-Dist: google-cloud-aiplatform (>=1.35.0) ; extra == "gcp" or extra == "all"
|
|
37
|
+
Requires-Dist: google-cloud-storage (>=2.10.0) ; extra == "gcp" or extra == "all"
|
|
38
|
+
Requires-Dist: httpx (>=0.24,<0.28)
|
|
39
|
+
Requires-Dist: loguru (>=0.7.3,<0.8.0)
|
|
40
|
+
Requires-Dist: numpy (>=1.20.0)
|
|
41
|
+
Requires-Dist: opentelemetry-api (>=1.39.1,<2.0.0)
|
|
42
|
+
Requires-Dist: opentelemetry-exporter-prometheus (>=0.60b1,<0.61)
|
|
43
|
+
Requires-Dist: opentelemetry-instrumentation-fastapi (>=0.60b1,<0.61)
|
|
44
|
+
Requires-Dist: opentelemetry-sdk (>=1.39.1,<2.0.0)
|
|
45
|
+
Requires-Dist: pandas (>=1.3.0)
|
|
46
|
+
Requires-Dist: psutil (>=7.2.2,<8.0.0)
|
|
47
|
+
Requires-Dist: psycopg2-binary (>=2.9.0)
|
|
48
|
+
Requires-Dist: pydantic (>=2.0.0)
|
|
49
|
+
Requires-Dist: python-multipart (>=0.0.9) ; extra == "ui" or extra == "all"
|
|
50
|
+
Requires-Dist: pytz (>=2024.1,<2025.0)
|
|
51
|
+
Requires-Dist: pyyaml (>=6.0)
|
|
52
|
+
Requires-Dist: requests (>=2.28.0)
|
|
53
|
+
Requires-Dist: rich (>=13.0.0) ; extra == "rich"
|
|
54
|
+
Requires-Dist: scikit-learn (>=1.0.0) ; extra == "sklearn" or extra == "all"
|
|
55
|
+
Requires-Dist: sqlalchemy (>=2.0.0)
|
|
56
|
+
Requires-Dist: tensorflow (>=2.12.0) ; extra == "tensorflow" or extra == "all"
|
|
57
|
+
Requires-Dist: toml (>=0.10.2)
|
|
58
|
+
Requires-Dist: torch (>=2.0.0) ; extra == "pytorch" or extra == "all"
|
|
59
|
+
Requires-Dist: uvicorn[standard] (>=0.23.0) ; extra == "ui" or extra == "all"
|
|
60
|
+
Requires-Dist: websockets (>=11.0) ; extra == "ui" or extra == "all"
|
|
61
|
+
Project-URL: Documentation, https://unicolab.github.io/FlowyML/latest
|
|
62
|
+
Project-URL: Homepage, https://github.com/UnicoLab/FlowyML
|
|
63
|
+
Project-URL: Repository, https://github.com/UnicoLab/FlowyML
|
|
64
|
+
Description-Content-Type: text/markdown
|
|
65
|
+
|
|
66
|
+
# 🌊 flowyml
|
|
67
|
+
|
|
68
|
+
<p align="center">
|
|
69
|
+
<img src="docs/logo.png" width="350" alt="flowyml Logo"/>
|
|
70
|
+
<br>
|
|
71
|
+
<em>The Enterprise-Grade ML Pipeline Framework for Humans</em>
|
|
72
|
+
<br>
|
|
73
|
+
<br>
|
|
74
|
+
<p align="center">
|
|
75
|
+
<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>
|
|
76
|
+
<a href="https://pypi.org/project/flowyml/"><img src="https://img.shields.io/pypi/v/flowyml" alt="PyPI Version"></a>
|
|
77
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" alt="Python 3.10+"></a>
|
|
78
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="License"></a>
|
|
79
|
+
<a href="https://unicolab.ai"><img src="https://img.shields.io/badge/UnicoLab-ai-red.svg" alt="UnicoLab"></a>
|
|
80
|
+
</p>
|
|
81
|
+
</p>
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
**FlowyML** is a lightweight yet powerful ML pipeline orchestration framework. It bridges the gap between rapid experimentation and enterprise production by making assets first-class citizens. Write pipelines in pure Python, and scale them to production without changing a single line of code.
|
|
86
|
+
|
|
87
|
+
## 🚀 Why FlowyML?
|
|
88
|
+
|
|
89
|
+
| Feature | FlowyML | Traditional Orchestrators |
|
|
90
|
+
|---------|---------|---------------------------|
|
|
91
|
+
| **Developer Experience** | 🐍 **Native Python** - No DSLs, no YAML hell. | 📜 Complex YAML or rigid DSLs. |
|
|
92
|
+
| **Type-Based Routing** | 🧠 **Auto-Routing** - Define WHAT, we handle WHERE. | 🔌 Manual wiring to cloud buckets. |
|
|
93
|
+
| **Smart Caching** | ⚡ **Multi-Level** - Smart content-hashing skips re-runs. | 🐢 Basic file-timestamp checking. |
|
|
94
|
+
| **Asset Management** | 📦 **First-Class Assets** - Models & Datasets with lineage. | 📁 Generic file paths only. |
|
|
95
|
+
| **Multi-Stack** | 🌍 **Abstract Infra** - Switch local/prod with one env var. | 🔒 Vendor lock-in or complex setup. |
|
|
96
|
+
| **GenAI Ready** | 🤖 **LLM Tracing** - Built-in token & cost tracking. | 🧩 Requires external tools. |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## ⚡️ Quick Start
|
|
101
|
+
|
|
102
|
+
This is a complete, multi-step ML pipeline with auto-injected context:
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from flowyml import Pipeline, step, context
|
|
106
|
+
|
|
107
|
+
@step(outputs=["dataset"])
|
|
108
|
+
def load_data(batch_size: int = 32):
|
|
109
|
+
return [i for i in range(batch_size)]
|
|
110
|
+
|
|
111
|
+
@step(inputs=["dataset"], outputs=["model"])
|
|
112
|
+
def train_model(dataset, learning_rate: float = 0.01):
|
|
113
|
+
print(f"Training on {len(dataset)} items with lr={learning_rate}")
|
|
114
|
+
return "model_v1"
|
|
115
|
+
|
|
116
|
+
# Configure and Run
|
|
117
|
+
ctx = context(learning_rate=0.05, batch_size=64)
|
|
118
|
+
pipeline = Pipeline("quickstart", context=ctx)
|
|
119
|
+
pipeline.add_step(load_data).add_step(train_model)
|
|
120
|
+
|
|
121
|
+
pipeline.run()
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 🌟 Key Features
|
|
127
|
+
|
|
128
|
+
### 1. 🧠 Type-Based Artifact Routing (New in 1.8.0)
|
|
129
|
+
Define artifact types in code, and FlowyML automatically routes them to your cloud infrastructure.
|
|
130
|
+
```python
|
|
131
|
+
@step
|
|
132
|
+
def train(...) -> Model:
|
|
133
|
+
# Auto-saved to GCS/S3 and registered to Vertex AI / SageMaker
|
|
134
|
+
return Model(obj, name="classifier")
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 2. 🌍 Multi-Stack Configuration
|
|
138
|
+
Manage local, staging, and production environments in a single `flowyml.yaml`.
|
|
139
|
+
```bash
|
|
140
|
+
export FLOWYML_STACK=production
|
|
141
|
+
python pipeline.py # Now runs on Vertex AI with GCS storage
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 3. 🛡️ Intelligent Step Grouping
|
|
145
|
+
Group consecutive steps to run in the same container. Perfect for reducing overhead while maintaining clear step boundaries.
|
|
146
|
+
|
|
147
|
+
### 4. 📊 Built-in Observability
|
|
148
|
+
Beautiful dark-mode dashboard to monitor pipelines, visualize DAGs, and inspect artifacts in real-time.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 📦 Installation
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Install core
|
|
156
|
+
pip install flowyml
|
|
157
|
+
|
|
158
|
+
# Install with everything (recommended)
|
|
159
|
+
pip install "flowyml[all]"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## 📚 Documentation
|
|
163
|
+
|
|
164
|
+
Visit [docs.flowyml.ai](https://docs.flowyml.ai) for:
|
|
165
|
+
- **[Getting Started](https://docs.flowyml.ai/getting-started)**
|
|
166
|
+
- **[Core Concepts](https://docs.flowyml.ai/core/pipelines)**
|
|
167
|
+
- **[Type-Based Routing](https://docs.flowyml.ai/plugins/type_routing)**
|
|
168
|
+
- **[API Reference](https://docs.flowyml.ai/api/core)**
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
<p align="center">
|
|
172
|
+
<strong>Built with ❤️ by <a href="https://unicolab.ai">UnicoLab</a></strong>
|
|
173
|
+
</p>
|
|
174
|
+
|
flowyml-1.8.0/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# 🌊 flowyml
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="docs/logo.png" width="350" alt="flowyml Logo"/>
|
|
5
|
+
<br>
|
|
6
|
+
<em>The Enterprise-Grade ML Pipeline Framework for Humans</em>
|
|
7
|
+
<br>
|
|
8
|
+
<br>
|
|
9
|
+
<p align="center">
|
|
10
|
+
<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>
|
|
11
|
+
<a href="https://pypi.org/project/flowyml/"><img src="https://img.shields.io/pypi/v/flowyml" alt="PyPI Version"></a>
|
|
12
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" alt="Python 3.10+"></a>
|
|
13
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="License"></a>
|
|
14
|
+
<a href="https://unicolab.ai"><img src="https://img.shields.io/badge/UnicoLab-ai-red.svg" alt="UnicoLab"></a>
|
|
15
|
+
</p>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**FlowyML** is a lightweight yet powerful ML pipeline orchestration framework. It bridges the gap between rapid experimentation and enterprise production by making assets first-class citizens. Write pipelines in pure Python, and scale them to production without changing a single line of code.
|
|
21
|
+
|
|
22
|
+
## 🚀 Why FlowyML?
|
|
23
|
+
|
|
24
|
+
| Feature | FlowyML | Traditional Orchestrators |
|
|
25
|
+
|---------|---------|---------------------------|
|
|
26
|
+
| **Developer Experience** | 🐍 **Native Python** - No DSLs, no YAML hell. | 📜 Complex YAML or rigid DSLs. |
|
|
27
|
+
| **Type-Based Routing** | 🧠 **Auto-Routing** - Define WHAT, we handle WHERE. | 🔌 Manual wiring to cloud buckets. |
|
|
28
|
+
| **Smart Caching** | ⚡ **Multi-Level** - Smart content-hashing skips re-runs. | 🐢 Basic file-timestamp checking. |
|
|
29
|
+
| **Asset Management** | 📦 **First-Class Assets** - Models & Datasets with lineage. | 📁 Generic file paths only. |
|
|
30
|
+
| **Multi-Stack** | 🌍 **Abstract Infra** - Switch local/prod with one env var. | 🔒 Vendor lock-in or complex setup. |
|
|
31
|
+
| **GenAI Ready** | 🤖 **LLM Tracing** - Built-in token & cost tracking. | 🧩 Requires external tools. |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ⚡️ Quick Start
|
|
36
|
+
|
|
37
|
+
This is a complete, multi-step ML pipeline with auto-injected context:
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from flowyml import Pipeline, step, context
|
|
41
|
+
|
|
42
|
+
@step(outputs=["dataset"])
|
|
43
|
+
def load_data(batch_size: int = 32):
|
|
44
|
+
return [i for i in range(batch_size)]
|
|
45
|
+
|
|
46
|
+
@step(inputs=["dataset"], outputs=["model"])
|
|
47
|
+
def train_model(dataset, learning_rate: float = 0.01):
|
|
48
|
+
print(f"Training on {len(dataset)} items with lr={learning_rate}")
|
|
49
|
+
return "model_v1"
|
|
50
|
+
|
|
51
|
+
# Configure and Run
|
|
52
|
+
ctx = context(learning_rate=0.05, batch_size=64)
|
|
53
|
+
pipeline = Pipeline("quickstart", context=ctx)
|
|
54
|
+
pipeline.add_step(load_data).add_step(train_model)
|
|
55
|
+
|
|
56
|
+
pipeline.run()
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 🌟 Key Features
|
|
62
|
+
|
|
63
|
+
### 1. 🧠 Type-Based Artifact Routing (New in 1.8.0)
|
|
64
|
+
Define artifact types in code, and FlowyML automatically routes them to your cloud infrastructure.
|
|
65
|
+
```python
|
|
66
|
+
@step
|
|
67
|
+
def train(...) -> Model:
|
|
68
|
+
# Auto-saved to GCS/S3 and registered to Vertex AI / SageMaker
|
|
69
|
+
return Model(obj, name="classifier")
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. 🌍 Multi-Stack Configuration
|
|
73
|
+
Manage local, staging, and production environments in a single `flowyml.yaml`.
|
|
74
|
+
```bash
|
|
75
|
+
export FLOWYML_STACK=production
|
|
76
|
+
python pipeline.py # Now runs on Vertex AI with GCS storage
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 3. 🛡️ Intelligent Step Grouping
|
|
80
|
+
Group consecutive steps to run in the same container. Perfect for reducing overhead while maintaining clear step boundaries.
|
|
81
|
+
|
|
82
|
+
### 4. 📊 Built-in Observability
|
|
83
|
+
Beautiful dark-mode dashboard to monitor pipelines, visualize DAGs, and inspect artifacts in real-time.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 📦 Installation
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Install core
|
|
91
|
+
pip install flowyml
|
|
92
|
+
|
|
93
|
+
# Install with everything (recommended)
|
|
94
|
+
pip install "flowyml[all]"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 📚 Documentation
|
|
98
|
+
|
|
99
|
+
Visit [docs.flowyml.ai](https://docs.flowyml.ai) for:
|
|
100
|
+
- **[Getting Started](https://docs.flowyml.ai/getting-started)**
|
|
101
|
+
- **[Core Concepts](https://docs.flowyml.ai/core/pipelines)**
|
|
102
|
+
- **[Type-Based Routing](https://docs.flowyml.ai/plugins/type_routing)**
|
|
103
|
+
- **[API Reference](https://docs.flowyml.ai/api/core)**
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
<p align="center">
|
|
107
|
+
<strong>Built with ❤️ by <a href="https://unicolab.ai">UnicoLab</a></strong>
|
|
108
|
+
</p>
|
|
@@ -41,6 +41,16 @@ class Asset:
|
|
|
41
41
|
"""Base class for all ML assets (datasets, models, features, etc).
|
|
42
42
|
|
|
43
43
|
Assets are first-class objects in flowyml pipelines with full lineage tracking.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
name: Asset name
|
|
47
|
+
version: Asset version (default: v1.0.0)
|
|
48
|
+
data: The actual data/object
|
|
49
|
+
parent: Parent asset for lineage tracking
|
|
50
|
+
tags: Key-value tags for categorization
|
|
51
|
+
properties: Additional metadata properties
|
|
52
|
+
upload: Whether to upload this artifact to remote storage (default: False).
|
|
53
|
+
Set to True to enable remote artifact upload when using remote logging.
|
|
44
54
|
"""
|
|
45
55
|
|
|
46
56
|
def __init__(
|
|
@@ -51,11 +61,13 @@ class Asset:
|
|
|
51
61
|
parent: Optional["Asset"] = None,
|
|
52
62
|
tags: dict[str, str] | None = None,
|
|
53
63
|
properties: dict[str, Any] | None = None,
|
|
64
|
+
upload: bool = False,
|
|
54
65
|
):
|
|
55
66
|
self.name = name
|
|
56
67
|
self.version = version or "v1.0.0"
|
|
57
68
|
self.data = data
|
|
58
69
|
self.asset_id = str(uuid4())
|
|
70
|
+
self.upload = upload # Control whether to upload to remote storage
|
|
59
71
|
|
|
60
72
|
# Metadata
|
|
61
73
|
self.metadata = AssetMetadata(
|
|
@@ -94,6 +106,7 @@ class Asset:
|
|
|
94
106
|
name: str | None = None,
|
|
95
107
|
version: str | None = None,
|
|
96
108
|
parent: Optional["Asset"] = None,
|
|
109
|
+
upload: bool = False,
|
|
97
110
|
**kwargs: Any,
|
|
98
111
|
) -> "Asset":
|
|
99
112
|
"""Factory method to create an asset.
|
|
@@ -103,6 +116,7 @@ class Asset:
|
|
|
103
116
|
name: Asset name
|
|
104
117
|
version: Asset version
|
|
105
118
|
parent: Parent asset for lineage
|
|
119
|
+
upload: Whether to upload this artifact to remote storage (default: False)
|
|
106
120
|
**kwargs: Additional metadata
|
|
107
121
|
|
|
108
122
|
Returns:
|
|
@@ -123,6 +137,7 @@ class Asset:
|
|
|
123
137
|
parent=parent,
|
|
124
138
|
tags=tags,
|
|
125
139
|
properties=props,
|
|
140
|
+
upload=upload,
|
|
126
141
|
)
|
|
127
142
|
|
|
128
143
|
def get_hash(self) -> str:
|
|
@@ -37,6 +37,11 @@ class Metrics(Asset):
|
|
|
37
37
|
# Store metrics in properties for easy access
|
|
38
38
|
self.metadata.properties.update(all_metrics)
|
|
39
39
|
|
|
40
|
+
@property
|
|
41
|
+
def values(self) -> dict[str, Any]:
|
|
42
|
+
"""Alias for data to support common usage patterns."""
|
|
43
|
+
return self.data or {}
|
|
44
|
+
|
|
40
45
|
def get_metric(self, name: str, default: Any = None) -> Any:
|
|
41
46
|
"""Get a specific metric value."""
|
|
42
47
|
if self.data and name in self.data:
|