ellf-cli 6.1.2__tar.gz → 6.1.4__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.
- {ellf_cli-6.1.2/ellf_cli.egg-info → ellf_cli-6.1.4}/PKG-INFO +1 -1
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/about.json +1 -1
- ellf_cli-6.1.4/ellf_cli/commands/publish_data.py +147 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf.json +1 -1
- {ellf_cli-6.1.2 → ellf_cli-6.1.4/ellf_cli.egg-info}/PKG-INFO +1 -1
- ellf_cli-6.1.2/ellf_cli/commands/publish_data.py +0 -87
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/LICENSE +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/MANIFEST.in +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/README.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/__main__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/about.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/auth.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/cli.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/services.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/config.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skill_variants.json +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/errors.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/helm.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/main.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/messages.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/query.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ty.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ui.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/url.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/util.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/SOURCES.txt +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/pyproject.toml +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/setup.cfg +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/setup.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_appdirs.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_auth.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_config.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_errors.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_files_cp.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_info.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_key_pair.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_login.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_logout.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_main.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_org_select.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_plans.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_projects.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_query.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_recipe_file.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_recipes.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_state.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_support.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_ty.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_ui.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_ui_extras.py +0 -0
- {ellf_cli-6.1.2 → ellf_cli-6.1.4}/tests/test_util.py +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import zipfile
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Optional
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
from radicli import Arg
|
|
8
|
+
|
|
9
|
+
from ..cli import cli
|
|
10
|
+
from ..errors import CLIError
|
|
11
|
+
from ..messages import Messages
|
|
12
|
+
from . import assets as assets_commands
|
|
13
|
+
from . import files as files_commands
|
|
14
|
+
from ._state import get_auth_state
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _read_spacy_model_meta_from_wheel(wheel_path: Path) -> dict:
|
|
18
|
+
"""Extract a spaCy model's ``meta.json`` from a wheel built by
|
|
19
|
+
``spacy package``.
|
|
20
|
+
|
|
21
|
+
A spaCy model wheel lays out the model under
|
|
22
|
+
``<pkg_name>/<pkg_name>-<version>/meta.json``. We don't hard-code
|
|
23
|
+
that layout; we just look for any ``meta.json`` inside the wheel
|
|
24
|
+
that has the keys we need. Returns the parsed dict.
|
|
25
|
+
|
|
26
|
+
Raises ``CLIError`` if the wheel isn't a spaCy model package.
|
|
27
|
+
"""
|
|
28
|
+
try:
|
|
29
|
+
with zipfile.ZipFile(wheel_path) as zf:
|
|
30
|
+
candidates = [n for n in zf.namelist() if n.endswith("/meta.json")]
|
|
31
|
+
# Prefer the deepest meta.json (inside the model data dir, not
|
|
32
|
+
# next to __init__.py) since older spaCy versions also write a
|
|
33
|
+
# stub meta.json at the package root.
|
|
34
|
+
candidates.sort(key=lambda n: n.count("/"), reverse=True)
|
|
35
|
+
for name in candidates:
|
|
36
|
+
with zf.open(name) as fp:
|
|
37
|
+
meta = json.loads(fp.read())
|
|
38
|
+
if isinstance(meta, dict) and meta.get("lang") and meta.get("name"):
|
|
39
|
+
return meta
|
|
40
|
+
except (zipfile.BadZipFile, KeyError, json.JSONDecodeError) as e:
|
|
41
|
+
raise CLIError(
|
|
42
|
+
f"Could not read spaCy model metadata from {wheel_path}: {e}. "
|
|
43
|
+
"Is this a wheel produced by `spacy package`?"
|
|
44
|
+
) from e
|
|
45
|
+
raise CLIError(
|
|
46
|
+
f"{wheel_path} does not look like a spaCy model wheel: no meta.json "
|
|
47
|
+
"with `lang` and `name` fields found inside."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@cli.subcommand(
|
|
52
|
+
"publish",
|
|
53
|
+
"data",
|
|
54
|
+
src=Arg(help="File or directory to publish"),
|
|
55
|
+
dest=Arg(help="Destination path to copy the data to"),
|
|
56
|
+
name=Arg("--name", help=Messages.name.format(noun="asset")),
|
|
57
|
+
version=Arg("--version", help=Messages.version.format(noun="asset")),
|
|
58
|
+
kind=Arg(
|
|
59
|
+
"--kind",
|
|
60
|
+
help=Messages.asset_kind,
|
|
61
|
+
),
|
|
62
|
+
loader=Arg("--loader", help="Loader to convert data for Prodigy"),
|
|
63
|
+
meta=Arg("--meta", help=Messages.asset_meta),
|
|
64
|
+
exists_ok=Arg("--exists-ok", help=Messages.exists_ok),
|
|
65
|
+
# fmt: on
|
|
66
|
+
)
|
|
67
|
+
def publish_data(
|
|
68
|
+
src: Path,
|
|
69
|
+
kind: str,
|
|
70
|
+
dest: Optional[str] = None,
|
|
71
|
+
name: Optional[str] = None,
|
|
72
|
+
version: Optional[str] = None,
|
|
73
|
+
loader: Optional[str] = None,
|
|
74
|
+
meta: str = "{}",
|
|
75
|
+
exists_ok: bool = False,
|
|
76
|
+
) -> UUID | None:
|
|
77
|
+
"""
|
|
78
|
+
Transfer data to the cluster, and advertise it to Ellf.
|
|
79
|
+
|
|
80
|
+
These steps can also be done separately. See `ellf files` to transfer
|
|
81
|
+
data to the cluster without creating an Asset record for it, and
|
|
82
|
+
`ellf assets create` to create an Asset without transfer.
|
|
83
|
+
"""
|
|
84
|
+
auth = get_auth_state()
|
|
85
|
+
if auth.broker_host is None:
|
|
86
|
+
raise CLIError(Messages.E035)
|
|
87
|
+
if auth.cluster_id is None:
|
|
88
|
+
raise CLIError(Messages.E036)
|
|
89
|
+
|
|
90
|
+
is_model_wheel = kind == "model" and src.is_file() and src.suffix == ".whl"
|
|
91
|
+
wheel_meta: Optional[dict] = None
|
|
92
|
+
if is_model_wheel:
|
|
93
|
+
wheel_meta = _read_spacy_model_meta_from_wheel(src)
|
|
94
|
+
# Importable name is `<lang>_<name>` by spaCy's package convention.
|
|
95
|
+
# `spacy.load(spacy_model_name)` resolves to it via setuptools entry
|
|
96
|
+
# points after the wheel is pip-installed inside the recipe pod.
|
|
97
|
+
if name is None:
|
|
98
|
+
name = f"{wheel_meta['lang']}_{wheel_meta['name']}"
|
|
99
|
+
if version is None:
|
|
100
|
+
version = wheel_meta.get("version", "0.0.0")
|
|
101
|
+
if name is None:
|
|
102
|
+
name = src.name
|
|
103
|
+
if dest is None:
|
|
104
|
+
if version is None:
|
|
105
|
+
filename = name
|
|
106
|
+
else:
|
|
107
|
+
filename = f"{name}-{version}"
|
|
108
|
+
# The wheel must keep its on-disk filename so pip can identify it
|
|
109
|
+
# by the canonical `<distname>-<version>-…whl` pattern at install
|
|
110
|
+
# time; otherwise pip refuses to install. The Asset record can
|
|
111
|
+
# still use a custom name/version; only the destination filename
|
|
112
|
+
# is constrained.
|
|
113
|
+
if is_model_wheel:
|
|
114
|
+
dest = f"{{__nfs__}}/data/{src.name}"
|
|
115
|
+
else:
|
|
116
|
+
dest = f"{{__nfs__}}/data/{filename}"
|
|
117
|
+
meta_json = json.loads(meta)
|
|
118
|
+
if loader is not None:
|
|
119
|
+
meta_json["loader"] = loader
|
|
120
|
+
if wheel_meta is not None:
|
|
121
|
+
meta_json["format"] = "package"
|
|
122
|
+
meta_json["spacy_model_name"] = f"{wheel_meta['lang']}_{wheel_meta['name']}"
|
|
123
|
+
meta_json["spacy_version"] = wheel_meta.get("spacy_version", "")
|
|
124
|
+
meta_json["lang"] = wheel_meta["lang"]
|
|
125
|
+
meta_json["model_version"] = wheel_meta.get("version", "")
|
|
126
|
+
meta = json.dumps(meta_json)
|
|
127
|
+
if version is None:
|
|
128
|
+
version = "0.0.0"
|
|
129
|
+
|
|
130
|
+
files_commands.cp(
|
|
131
|
+
str(src),
|
|
132
|
+
dest=dest,
|
|
133
|
+
overwrite=True,
|
|
134
|
+
make_dirs=True,
|
|
135
|
+
recurse=True,
|
|
136
|
+
cluster_host=auth.broker_host,
|
|
137
|
+
)
|
|
138
|
+
assets_commands.create(
|
|
139
|
+
kind=kind,
|
|
140
|
+
name=name,
|
|
141
|
+
path=dest,
|
|
142
|
+
version=version,
|
|
143
|
+
meta=meta,
|
|
144
|
+
exists_ok=exists_ok,
|
|
145
|
+
)
|
|
146
|
+
# TODO: We should also have an option to create a dataset
|
|
147
|
+
# from the asset, by triggering a 'db-in' action.
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
from typing import Optional
|
|
4
|
-
from uuid import UUID
|
|
5
|
-
|
|
6
|
-
from radicli import Arg
|
|
7
|
-
|
|
8
|
-
from ..cli import cli
|
|
9
|
-
from ..errors import CLIError
|
|
10
|
-
from ..messages import Messages
|
|
11
|
-
from . import assets as assets_commands
|
|
12
|
-
from . import files as files_commands
|
|
13
|
-
from ._state import get_auth_state
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
@cli.subcommand(
|
|
17
|
-
"publish",
|
|
18
|
-
"data",
|
|
19
|
-
src=Arg(help="File or directory to publish"),
|
|
20
|
-
dest=Arg(help="Destination path to copy the data to"),
|
|
21
|
-
name=Arg("--name", help=Messages.name.format(noun="asset")),
|
|
22
|
-
version=Arg("--version", help=Messages.version.format(noun="asset")),
|
|
23
|
-
kind=Arg(
|
|
24
|
-
"--kind",
|
|
25
|
-
help=Messages.asset_kind,
|
|
26
|
-
),
|
|
27
|
-
loader=Arg("--loader", help="Loader to convert data for Prodigy"),
|
|
28
|
-
meta=Arg("--meta", help=Messages.asset_meta),
|
|
29
|
-
exists_ok=Arg("--exists-ok", help=Messages.exists_ok),
|
|
30
|
-
# fmt: on
|
|
31
|
-
)
|
|
32
|
-
def publish_data(
|
|
33
|
-
src: Path,
|
|
34
|
-
kind: str,
|
|
35
|
-
dest: Optional[str] = None,
|
|
36
|
-
name: Optional[str] = None,
|
|
37
|
-
version: Optional[str] = None,
|
|
38
|
-
loader: Optional[str] = None,
|
|
39
|
-
meta: str = "{}",
|
|
40
|
-
exists_ok: bool = False,
|
|
41
|
-
) -> UUID | None:
|
|
42
|
-
"""
|
|
43
|
-
Transfer data to the cluster, and advertise it to Ellf.
|
|
44
|
-
|
|
45
|
-
These steps can also be done separately. See `ellf files` to transfer
|
|
46
|
-
data to the cluster without creating an Asset record for it, and
|
|
47
|
-
`ellf assets create` to create an Asset without transfer.
|
|
48
|
-
"""
|
|
49
|
-
auth = get_auth_state()
|
|
50
|
-
if auth.broker_host is None:
|
|
51
|
-
raise CLIError(Messages.E035)
|
|
52
|
-
if auth.cluster_id is None:
|
|
53
|
-
raise CLIError(Messages.E036)
|
|
54
|
-
|
|
55
|
-
if name is None:
|
|
56
|
-
name = src.name
|
|
57
|
-
if dest is None:
|
|
58
|
-
if version is None:
|
|
59
|
-
filename = name
|
|
60
|
-
else:
|
|
61
|
-
filename = f"{name}-{version}"
|
|
62
|
-
dest = f"{{__nfs__}}/data/{filename}"
|
|
63
|
-
if loader is not None:
|
|
64
|
-
meta_json = json.loads(meta)
|
|
65
|
-
meta_json.update({"loader": loader})
|
|
66
|
-
meta = json.dumps(meta_json)
|
|
67
|
-
if version is None:
|
|
68
|
-
version = "0.0.0"
|
|
69
|
-
|
|
70
|
-
files_commands.cp(
|
|
71
|
-
str(src),
|
|
72
|
-
dest=dest,
|
|
73
|
-
overwrite=True,
|
|
74
|
-
make_dirs=True,
|
|
75
|
-
recurse=True,
|
|
76
|
-
cluster_host=auth.broker_host,
|
|
77
|
-
)
|
|
78
|
-
assets_commands.create(
|
|
79
|
-
kind=kind,
|
|
80
|
-
name=name,
|
|
81
|
-
path=dest,
|
|
82
|
-
version=version,
|
|
83
|
-
meta=meta,
|
|
84
|
-
exists_ok=exists_ok,
|
|
85
|
-
)
|
|
86
|
-
# TODO: We should also have an option to create a dataset
|
|
87
|
-
# from the asset, by triggering a 'db-in' action.
|
|
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
|
|
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
|
|
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
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md
RENAMED
|
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
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md
RENAMED
|
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
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py
RENAMED
|
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
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-6.1.2 → ellf_cli-6.1.4}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|