flowyml 1.5.0__tar.gz → 1.7.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.5.0 → flowyml-1.7.0}/PKG-INFO +5 -3
- {flowyml-1.5.0 → flowyml-1.7.0}/README.md +1 -1
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/__init__.py +2 -1
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/featureset.py +30 -5
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/metrics.py +47 -4
- flowyml-1.7.0/flowyml/cli/main.py +830 -0
- flowyml-1.7.0/flowyml/cli/models.py +444 -0
- flowyml-1.7.0/flowyml/cli/rich_utils.py +95 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/checkpoint.py +6 -1
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/conditional.py +104 -0
- flowyml-1.7.0/flowyml/core/display.py +595 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/executor.py +27 -6
- flowyml-1.7.0/flowyml/core/orchestrator.py +767 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/pipeline.py +447 -11
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/project.py +4 -1
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/scheduler.py +225 -81
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/versioning.py +13 -4
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/registry/model_registry.py +1 -1
- flowyml-1.7.0/flowyml/ui/frontend/dist/assets/index-By4trVyv.css +1 -0
- flowyml-1.5.0/flowyml/ui/frontend/dist/assets/index-DF8dJaFL.js → flowyml-1.7.0/flowyml/ui/frontend/dist/assets/index-CX5RV2C9.js +118 -117
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/dist/index.html +2 -2
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/PipelineGraph.jsx +43 -4
- flowyml-1.7.0/flowyml/ui/server_manager.py +189 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/utils.py +66 -2
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/config.py +7 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/pyproject.toml +21 -5
- flowyml-1.5.0/flowyml/cli/main.py +0 -433
- flowyml-1.5.0/flowyml/core/orchestrator.py +0 -274
- flowyml-1.5.0/flowyml/ui/frontend/dist/assets/index-CBUXOWze.css +0 -1
- {flowyml-1.5.0 → flowyml-1.7.0}/LICENSE +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/artifact.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/base.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/dataset.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/model.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/registry.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/assets/report.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/experiment.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/init.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/run.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/stack_cli.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/cli/ui.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/advanced_cache.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/approval.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/cache.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/context.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/error_handling.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/execution_status.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/graph.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/hooks.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/observability.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/parallel.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/remote_orchestrator.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/resources.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/retry_policy.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/scheduler_config.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/step.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/step_grouping.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/submission_result.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/core/templates.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/integrations/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/integrations/keras.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/alerts.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/data.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/llm.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/monitor.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/monitoring/notifications.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/registry/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/registry/pipeline_registry.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/aws.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/azure.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/base.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/bridge.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/components.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/gcp.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/local.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/migration.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/plugin_config.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/plugins.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/stacks/registry.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/artifacts.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/base.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/cloudpickle.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/keras.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/numpy.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/pandas.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/pytorch.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/sklearn.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/materializers/tensorflow.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/metadata.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/remote.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/storage/sql.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/tracking/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/tracking/experiment.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/tracking/leaderboard.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/tracking/runs.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/Dockerfile +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/auth.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/dependencies.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/main.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/assets.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/client.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/execution.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/experiments.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/leaderboard.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/metrics.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/notifications.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/pipelines.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/plugins.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/projects.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/runs.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/schedules.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/stats.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/traces.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/backend/routers/websocket.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/Dockerfile +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/README.md +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/index.html +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/nginx.conf +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/package-lock.json +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/package.json +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/postcss.config.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/App.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/assets/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/compare/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/dashboard/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/experiments/[experimentId]/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/experiments/compare/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/experiments/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/leaderboard/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/observability/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/pipelines/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/plugins/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectArtifactsList.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectExperimentsList.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectHeader.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectHierarchy.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectMetricsPanel.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectPipelinesList.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectRelations.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectRunsList.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/_components/ProjectTabs.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/[projectId]/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/projects/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/runs/[runId]/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/runs/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/schedules/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/settings/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/tokens/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/app/traces/page.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ArtifactViewer.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/AssetDetailsPanel.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/AssetLineageGraph.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/AssetStatsDashboard.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/AssetTreeHierarchy.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ExperimentDetailsPanel.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/Layout.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/NavigationTree.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/PipelineDetailsPanel.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ProjectSelector.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/RunDetailsPanel.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/header/Header.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/plugins/AddPluginDialog.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/plugins/InstalledPlugins.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/plugins/PluginBrowser.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/plugins/PluginManager.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/plugins/ZenMLIntegration.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/sidebar/Sidebar.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/Badge.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/Button.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/Card.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/CodeSnippet.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/CollapsibleCard.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/DataView.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/EmptyState.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/ErrorBoundary.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/ExecutionStatus.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/KeyValue.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/components/ui/ProjectSelector.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/contexts/ProjectContext.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/contexts/ThemeContext.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/contexts/ToastContext.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/index.css +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/layouts/MainLayout.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/main.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/router/index.jsx +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/services/pluginService.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/utils/api.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/utils/cn.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/utils/date.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/src/utils/downloads.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/tailwind.config.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/ui/frontend/vite.config.js +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/__init__.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/debug.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/environment.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/git.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/logging.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/performance.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/stack_config.py +0 -0
- {flowyml-1.5.0 → flowyml-1.7.0}/flowyml/utils/validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowyml
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.0
|
|
4
4
|
Summary: Next-Generation ML Pipeline Framework
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -23,13 +23,14 @@ Provides-Extra: aws
|
|
|
23
23
|
Provides-Extra: azure
|
|
24
24
|
Provides-Extra: gcp
|
|
25
25
|
Provides-Extra: pytorch
|
|
26
|
+
Provides-Extra: rich
|
|
26
27
|
Provides-Extra: sklearn
|
|
27
28
|
Provides-Extra: tensorflow
|
|
28
29
|
Provides-Extra: ui
|
|
29
30
|
Requires-Dist: click (>=8.0.0)
|
|
30
31
|
Requires-Dist: cloudpickle (>=2.0.0)
|
|
31
32
|
Requires-Dist: croniter (>=2.0.1,<3.0.0)
|
|
32
|
-
Requires-Dist: fastapi (>=0.122.0,<0.123.0) ; extra == "ui"
|
|
33
|
+
Requires-Dist: fastapi (>=0.122.0,<0.123.0) ; extra == "ui" or extra == "all"
|
|
33
34
|
Requires-Dist: google-cloud-aiplatform (>=1.35.0) ; extra == "gcp" or extra == "all"
|
|
34
35
|
Requires-Dist: google-cloud-storage (>=2.10.0) ; extra == "gcp" or extra == "all"
|
|
35
36
|
Requires-Dist: httpx (>=0.24,<0.28)
|
|
@@ -41,6 +42,7 @@ Requires-Dist: pydantic (>=2.0.0)
|
|
|
41
42
|
Requires-Dist: python-multipart (>=0.0.6) ; extra == "ui" or extra == "all"
|
|
42
43
|
Requires-Dist: pytz (>=2024.1,<2025.0)
|
|
43
44
|
Requires-Dist: pyyaml (>=6.0)
|
|
45
|
+
Requires-Dist: rich (>=13.0.0) ; extra == "rich"
|
|
44
46
|
Requires-Dist: scikit-learn (>=1.0.0) ; extra == "sklearn" or extra == "all"
|
|
45
47
|
Requires-Dist: sqlalchemy (>=2.0.0)
|
|
46
48
|
Requires-Dist: tensorflow (>=2.12.0) ; extra == "tensorflow" or extra == "all"
|
|
@@ -254,7 +256,7 @@ pipeline.run(debug=True) # Pauses at breakpoint
|
|
|
254
256
|
Assets are not just files; they are first-class citizens with lineage, metadata, and versioning.
|
|
255
257
|
|
|
256
258
|
```python
|
|
257
|
-
from flowyml
|
|
259
|
+
from flowyml import Dataset, Model, Metrics, FeatureSet
|
|
258
260
|
|
|
259
261
|
# Assets track their producer, lineage, and metadata automatically
|
|
260
262
|
dataset = Dataset.create(data=df, name="training_data", metadata={"source": "s3"})
|
|
@@ -199,7 +199,7 @@ pipeline.run(debug=True) # Pauses at breakpoint
|
|
|
199
199
|
Assets are not just files; they are first-class citizens with lineage, metadata, and versioning.
|
|
200
200
|
|
|
201
201
|
```python
|
|
202
|
-
from flowyml
|
|
202
|
+
from flowyml import Dataset, Model, Metrics, FeatureSet
|
|
203
203
|
|
|
204
204
|
# Assets track their producer, lineage, and metadata automatically
|
|
205
205
|
dataset = Dataset.create(data=df, name="training_data", metadata={"source": "s3"})
|
|
@@ -14,7 +14,7 @@ from flowyml.core.step import step, Step
|
|
|
14
14
|
from flowyml.core.pipeline import Pipeline
|
|
15
15
|
from flowyml.core.executor import Executor, LocalExecutor
|
|
16
16
|
from flowyml.core.cache import CacheStrategy
|
|
17
|
-
from flowyml.core.conditional import Condition, ConditionalBranch, Switch, when, unless
|
|
17
|
+
from flowyml.core.conditional import Condition, ConditionalBranch, Switch, when, unless, If
|
|
18
18
|
from flowyml.core.parallel import ParallelExecutor, DataParallelExecutor, BatchExecutor, parallel_map
|
|
19
19
|
from flowyml.core.error_handling import (
|
|
20
20
|
CircuitBreaker,
|
|
@@ -115,6 +115,7 @@ __all__ = [
|
|
|
115
115
|
"Condition",
|
|
116
116
|
"ConditionalBranch",
|
|
117
117
|
"Switch",
|
|
118
|
+
"If",
|
|
118
119
|
"when",
|
|
119
120
|
"unless",
|
|
120
121
|
# Parallel Execution
|
|
@@ -67,19 +67,36 @@ class FeatureSet(Asset):
|
|
|
67
67
|
source_dataset: Name of source dataset
|
|
68
68
|
**kwargs: Additional metadata
|
|
69
69
|
"""
|
|
70
|
-
# Initialize base asset
|
|
71
|
-
|
|
70
|
+
# Initialize base asset first
|
|
71
|
+
super().__init__(
|
|
72
72
|
name=name,
|
|
73
|
-
|
|
73
|
+
version=kwargs.get("version"),
|
|
74
|
+
data=None,
|
|
75
|
+
parent=kwargs.get("parent"),
|
|
76
|
+
tags=kwargs.get("tags"),
|
|
77
|
+
properties=kwargs.get("properties"),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
# Create FeatureSet-specific metadata
|
|
81
|
+
feature_set_metadata = FeatureSetMetadata(
|
|
82
|
+
asset_id=self.asset_id,
|
|
83
|
+
name=name,
|
|
84
|
+
version=self.version,
|
|
85
|
+
asset_type=self.__class__.__name__,
|
|
86
|
+
created_at=self.metadata.created_at,
|
|
87
|
+
created_by=self.metadata.created_by,
|
|
88
|
+
parent_ids=self.metadata.parent_ids,
|
|
89
|
+
tags=self.metadata.tags,
|
|
90
|
+
properties=self.metadata.properties,
|
|
74
91
|
feature_names=feature_names or [],
|
|
75
92
|
num_features=len(feature_names) if feature_names else 0,
|
|
76
93
|
num_samples=num_samples,
|
|
77
94
|
transformations=transformations or [],
|
|
78
95
|
source_dataset=source_dataset,
|
|
79
|
-
**kwargs,
|
|
80
96
|
)
|
|
81
97
|
|
|
82
|
-
|
|
98
|
+
# Replace metadata with FeatureSet-specific metadata
|
|
99
|
+
self.metadata = feature_set_metadata
|
|
83
100
|
self._data = data
|
|
84
101
|
|
|
85
102
|
# Extract feature metadata if data provided
|
|
@@ -147,6 +164,11 @@ class FeatureSet(Asset):
|
|
|
147
164
|
"""Get the feature data."""
|
|
148
165
|
return self._data
|
|
149
166
|
|
|
167
|
+
@data.setter
|
|
168
|
+
def data(self, value: Any) -> None:
|
|
169
|
+
"""Set the feature data."""
|
|
170
|
+
self._data = value
|
|
171
|
+
|
|
150
172
|
@property
|
|
151
173
|
def feature_names(self) -> list[str]:
|
|
152
174
|
"""Get feature names."""
|
|
@@ -188,6 +210,7 @@ class FeatureSet(Asset):
|
|
|
188
210
|
data: Any,
|
|
189
211
|
name: str | None = None,
|
|
190
212
|
feature_names: list[str] | None = None,
|
|
213
|
+
num_samples: int = 0,
|
|
191
214
|
transformations: list[str] | None = None,
|
|
192
215
|
source_dataset: str | None = None,
|
|
193
216
|
**kwargs,
|
|
@@ -198,6 +221,7 @@ class FeatureSet(Asset):
|
|
|
198
221
|
data: The feature matrix
|
|
199
222
|
name: Name of the feature set (auto-generated if not provided)
|
|
200
223
|
feature_names: List of feature names
|
|
224
|
+
num_samples: Number of samples in the feature set
|
|
201
225
|
transformations: List of transformations applied
|
|
202
226
|
source_dataset: Name of source dataset
|
|
203
227
|
**kwargs: Additional metadata
|
|
@@ -213,6 +237,7 @@ class FeatureSet(Asset):
|
|
|
213
237
|
name=name,
|
|
214
238
|
data=data,
|
|
215
239
|
feature_names=feature_names,
|
|
240
|
+
num_samples=num_samples,
|
|
216
241
|
transformations=transformations,
|
|
217
242
|
source_dataset=source_dataset,
|
|
218
243
|
**kwargs,
|
|
@@ -93,18 +93,61 @@ class Metrics(Asset):
|
|
|
93
93
|
parent: Asset | None = None,
|
|
94
94
|
tags: dict[str, str] | None = None,
|
|
95
95
|
properties: dict[str, Any] | None = None,
|
|
96
|
-
|
|
96
|
+
metadata: dict[str, Any] | None = None,
|
|
97
|
+
metrics: dict[str, Any] | None = None,
|
|
98
|
+
**kwargs,
|
|
97
99
|
) -> "Metrics":
|
|
98
100
|
"""Factory method to create metrics.
|
|
99
101
|
|
|
102
|
+
Supports multiple ways to provide metrics:
|
|
103
|
+
1. As keyword arguments: Metrics.create(accuracy=0.95, loss=0.05)
|
|
104
|
+
2. As a dict: Metrics.create(metrics={"accuracy": 0.95, "loss": 0.05})
|
|
105
|
+
3. Mixed: Metrics.create(metrics={"accuracy": 0.95}, loss=0.05)
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
name: Name of the metrics asset
|
|
109
|
+
version: Version string
|
|
110
|
+
parent: Parent asset for lineage
|
|
111
|
+
tags: Tags dictionary (or use metadata for convenience)
|
|
112
|
+
properties: Properties dictionary
|
|
113
|
+
metadata: Metadata dictionary (merged into tags and properties)
|
|
114
|
+
metrics: Metrics as a dictionary (alternative to **kwargs)
|
|
115
|
+
**kwargs: Additional metrics as keyword arguments
|
|
116
|
+
|
|
100
117
|
Example:
|
|
118
|
+
>>> # Using keyword arguments
|
|
101
119
|
>>> metrics = Metrics.create(accuracy=0.95, loss=0.05, training_time="2h 15m")
|
|
120
|
+
|
|
121
|
+
>>> # Using metrics dict
|
|
122
|
+
>>> metrics = Metrics.create(
|
|
123
|
+
... name="example_metrics",
|
|
124
|
+
... metrics={"test_accuracy": 0.93, "test_loss": 0.07},
|
|
125
|
+
... metadata={"source": "example"},
|
|
126
|
+
... )
|
|
102
127
|
"""
|
|
128
|
+
# Merge metrics dict with kwargs
|
|
129
|
+
all_metrics = {}
|
|
130
|
+
if metrics:
|
|
131
|
+
all_metrics.update(metrics)
|
|
132
|
+
all_metrics.update(kwargs)
|
|
133
|
+
|
|
134
|
+
# Handle metadata - merge into tags and properties
|
|
135
|
+
final_tags = tags or {}
|
|
136
|
+
final_properties = properties or {}
|
|
137
|
+
if metadata:
|
|
138
|
+
# If metadata contains string values, treat as tags
|
|
139
|
+
# Otherwise, merge into properties
|
|
140
|
+
for key, value in metadata.items():
|
|
141
|
+
if isinstance(value, str):
|
|
142
|
+
final_tags[key] = value
|
|
143
|
+
else:
|
|
144
|
+
final_properties[key] = value
|
|
145
|
+
|
|
103
146
|
return cls(
|
|
104
147
|
name=name or "metrics",
|
|
105
148
|
version=version,
|
|
106
|
-
data=
|
|
149
|
+
data=all_metrics if all_metrics else None,
|
|
107
150
|
parent=parent,
|
|
108
|
-
tags=
|
|
109
|
-
properties=
|
|
151
|
+
tags=final_tags,
|
|
152
|
+
properties=final_properties,
|
|
110
153
|
)
|