ellf-cli 18.1.1__tar.gz → 19.0.3__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-18.1.1/ellf_cli.egg-info → ellf_cli-19.0.3}/PKG-INFO +1 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/README.md +8 -32
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cli.py +0 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/datasets.py +3 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/sessions.py +23 -72
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf.json +14 -120
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +1 -1
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.assistant}/references/annotation_audit.md +3 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +5 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/label_schemes.md +13 -3
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +1 -1
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.assistant → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/annotation_audit.md +3 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +5 -0
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/label_schemes.md +13 -3
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +2 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +4 -2
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.assistant}/references/explosion_strategy.md +4 -3
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/label_schemes.md +13 -3
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +6 -4
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +4 -2
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.assistant → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/explosion_strategy.md +4 -3
- {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/label_schemes.md +13 -3
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +6 -4
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/messages.py +3 -7
- ellf_cli-19.0.3/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +3 -0
- ellf_cli-19.0.3/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +3 -0
- ellf_cli-19.0.3/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +3 -0
- ellf_cli-19.0.3/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +3 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/SOURCES.txt +5 -0
- ellf_cli-19.0.3/tests/test_datasets_export.py +42 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_sessions.py +9 -35
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/LICENSE +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/MANIFEST.in +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/__main__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/about.json +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/about.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/auth.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_project_scope.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_usage.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_config_io.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/configure.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/services.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/users.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/config.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skill_variants.json +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/errors.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/helm.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/interactivity.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/main.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/pypi_auth.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/query.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ty.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ui.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/url.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/util.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/__init__.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/read_version.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/pyproject.toml +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/setup.cfg +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/setup.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_agents_info_stats.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_appdirs.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_auth.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_clusters_info_stats.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_config.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_errors.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_files_cp.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_helm.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_import_export.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_info.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_config_io.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_configure.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_deploy_node_labels.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_get_terraform.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_init.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_provision.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_start_fixes.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_start_validation.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_state_bucket.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_terraform_init.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_job_list_project_filter.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_jobs_info_hides_creator.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_jobs_list_unmatched.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_key_pair.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_login.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_logout.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_main.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_org_select.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_plans.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_projects.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_projects_delete_confirm.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_build_poll.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_data.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_import_root.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_requirements.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_pypi_auth.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_query.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_recipe_file.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_recipes.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_state.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_support.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_todos.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ty.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ui.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ui_extras.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_usage_counts.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_assign.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_info_stats.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_list.py +0 -0
- {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_util.py +0 -0
|
@@ -603,30 +603,6 @@ Export all the examples from a dataset and save it in the designated file as JSO
|
|
|
603
603
|
| `name_or_id` | `Union[str, UUID]` | Name or ID of the dataset | |
|
|
604
604
|
| `--output`, `-o` | `str` | JSON output path for data | `'-'` |
|
|
605
605
|
|
|
606
|
-
### `ellf examples`
|
|
607
|
-
|
|
608
|
-
Disable and activate annotated examples
|
|
609
|
-
|
|
610
|
-
#### `ellf examples disable`
|
|
611
|
-
|
|
612
|
-
Disable examples: supersede each with a copy answered "ignore". They stay in their dataset and remain their annotators' work
|
|
613
|
-
|
|
614
|
-
| Argument | Type | Description | Default |
|
|
615
|
-
| --- | --- | --- | --- |
|
|
616
|
-
| `dataset` | `str` | Name of the dataset the examples belong to | |
|
|
617
|
-
| `example_ids` | `list[int]` | Comma-separated IDs of the examples | |
|
|
618
|
-
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
619
|
-
|
|
620
|
-
#### `ellf examples activate`
|
|
621
|
-
|
|
622
|
-
Activate disabled examples: restore the answers they replaced
|
|
623
|
-
|
|
624
|
-
| Argument | Type | Description | Default |
|
|
625
|
-
| --- | --- | --- | --- |
|
|
626
|
-
| `dataset` | `str` | Name of the dataset the examples belong to | |
|
|
627
|
-
| `example_ids` | `list[int]` | Comma-separated IDs of the examples | |
|
|
628
|
-
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
629
|
-
|
|
630
606
|
### `ellf files`
|
|
631
607
|
|
|
632
608
|
Manage files on the cluster. Your files are only ever sent to servers or buckets you control. They are never sent to our servers.
|
|
@@ -1331,23 +1307,23 @@ Mint a fresh 90-day token for an existing service. Issuing a new token does not
|
|
|
1331
1307
|
|
|
1332
1308
|
### `ellf sessions`
|
|
1333
1309
|
|
|
1334
|
-
View,
|
|
1310
|
+
View, exclude and activate a task's annotation sessions
|
|
1335
1311
|
|
|
1336
1312
|
#### `ellf sessions list`
|
|
1337
1313
|
|
|
1338
|
-
List a task's annotation sessions, with how much each annotated and whether it was
|
|
1314
|
+
List a task's annotation sessions, with how much each annotated, how much of that the dataset still holds, and whether it was excluded
|
|
1339
1315
|
|
|
1340
1316
|
| Argument | Type | Description | Default |
|
|
1341
1317
|
| --- | --- | --- | --- |
|
|
1342
1318
|
| `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
|
|
1343
1319
|
| `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
|
|
1344
1320
|
| `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
|
|
1345
|
-
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', '
|
|
1321
|
+
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotated', 'active', 'status'] | `['id', 'annotator', 'started', 'annotated', 'active', 'status']` |
|
|
1346
1322
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1347
1323
|
|
|
1348
|
-
#### `ellf sessions
|
|
1324
|
+
#### `ellf sessions exclude`
|
|
1349
1325
|
|
|
1350
|
-
|
|
1326
|
+
Exclude an annotation session: take its examples out of the task's dataset, so training and exports leave them out and their tasks are served again. They still count as the annotator's work
|
|
1351
1327
|
|
|
1352
1328
|
| Argument | Type | Description | Default |
|
|
1353
1329
|
| --- | --- | --- | --- |
|
|
@@ -1356,7 +1332,7 @@ Disable an annotation session: take its examples out of the task's dataset, so t
|
|
|
1356
1332
|
|
|
1357
1333
|
#### `ellf sessions activate`
|
|
1358
1334
|
|
|
1359
|
-
Activate
|
|
1335
|
+
Activate an excluded annotation session: put its examples back into the task's dataset
|
|
1360
1336
|
|
|
1361
1337
|
| Argument | Type | Description | Default |
|
|
1362
1338
|
| --- | --- | --- | --- |
|
|
@@ -1407,7 +1383,7 @@ List the tasks in a project. Uses your default project unless --project is given
|
|
|
1407
1383
|
| Argument | Type | Description | Default |
|
|
1408
1384
|
| --- | --- | --- | --- |
|
|
1409
1385
|
| `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
|
|
1410
|
-
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state'] | `['id', 'name', 'state']` |
|
|
1386
|
+
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state'] | `['id', 'name', 'state']` |
|
|
1411
1387
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1412
1388
|
|
|
1413
1389
|
#### `ellf tasks info`
|
|
@@ -1419,7 +1395,7 @@ Print information about a task on the cluster
|
|
|
1419
1395
|
| `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
|
|
1420
1396
|
| `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
|
|
1421
1397
|
| `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
|
|
1422
|
-
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] | `None` |
|
|
1398
|
+
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] | `None` |
|
|
1423
1399
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
1424
1400
|
|
|
1425
1401
|
#### `ellf tasks logs`
|
|
@@ -110,7 +110,6 @@ cli.placeholder("auth", description=Messages.doc_auth)
|
|
|
110
110
|
cli.placeholder("clusters", description=Messages.doc_clusters)
|
|
111
111
|
cli.placeholder("config", description=Messages.doc_config)
|
|
112
112
|
cli.placeholder("datasets", description=Messages.doc_datasets)
|
|
113
|
-
cli.placeholder("examples", description=Messages.doc_examples)
|
|
114
113
|
cli.placeholder("files", description=Messages.doc_files)
|
|
115
114
|
cli.placeholder("gcp", description=Messages.doc_gcp)
|
|
116
115
|
cli.placeholder("infra", description=Messages.doc_infra)
|
|
@@ -164,6 +164,9 @@ def export(
|
|
|
164
164
|
cluster_id = auth.cluster_id
|
|
165
165
|
|
|
166
166
|
dataset = resolve_dataset(name_or_id, cluster_id=cluster_id)
|
|
167
|
+
legacy = auth.broker_client.datasets.total_example_count(dataset.name).legacy
|
|
168
|
+
if legacy:
|
|
169
|
+
raise CLIError(Messages.E066.format(name=dataset.name, count=legacy))
|
|
167
170
|
|
|
168
171
|
def get_examples_page(page: int):
|
|
169
172
|
return auth.broker_client.datasets.read_examples(
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"""Annotation sessions
|
|
1
|
+
"""Annotation sessions.
|
|
2
2
|
|
|
3
3
|
A task's annotations live in the cluster's Prodigy database, where every
|
|
4
4
|
PAM session (one sitting of one annotator) has a dataset of its own named
|
|
5
|
-
``{dataset}-{task_id}-{annotator_id}-{session_id}``.
|
|
5
|
+
``{dataset}-{task_id}-{annotator_id}-{session_id}``. Excluding a session
|
|
6
6
|
takes its examples out of the task's dataset while keeping them in that
|
|
7
|
-
session dataset
|
|
7
|
+
session dataset.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import builtins
|
|
@@ -12,7 +12,7 @@ from collections.abc import Sequence
|
|
|
12
12
|
from typing import Any, Optional, Union
|
|
13
13
|
from uuid import UUID
|
|
14
14
|
|
|
15
|
-
from radicli import Arg
|
|
15
|
+
from radicli import Arg
|
|
16
16
|
|
|
17
17
|
from ..cli import cli
|
|
18
18
|
from ..messages import Messages
|
|
@@ -20,7 +20,7 @@ from ..query import resolve_task
|
|
|
20
20
|
from ..ui import print_mutation_result, print_table_with_select
|
|
21
21
|
from ._state import get_auth_state
|
|
22
22
|
|
|
23
|
-
SESSION_FIELDS = ["id", "annotator", "started", "
|
|
23
|
+
SESSION_FIELDS = ["id", "annotator", "started", "annotated", "active", "status"]
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def _sitting_name(
|
|
@@ -45,31 +45,34 @@ def list(
|
|
|
45
45
|
select: builtins.list[str] = SESSION_FIELDS,
|
|
46
46
|
as_json: bool = False,
|
|
47
47
|
) -> Sequence[dict[str, Any]]:
|
|
48
|
-
"""List a task's annotation sessions, with how much each annotated
|
|
49
|
-
whether it was
|
|
48
|
+
"""List a task's annotation sessions, with how much each annotated, how
|
|
49
|
+
much of that the dataset still holds, and whether it was excluded"""
|
|
50
50
|
auth = get_auth_state()
|
|
51
51
|
task = resolve_task(name_or_id, cluster_id=cluster_id, project_id=project_id)
|
|
52
52
|
dataset = auth.client.task.dataset(task.id)
|
|
53
53
|
summary = auth.broker_client.datasets.session_counts(dataset.name)
|
|
54
54
|
removed = set(summary.removed or [])
|
|
55
55
|
rows = []
|
|
56
|
+
counts = summary.counts or {}
|
|
56
57
|
for session in auth.client.session.all(task_id=task.id):
|
|
57
58
|
name = _sitting_name(dataset.name, task.id, session.annotator_id, session.id)
|
|
59
|
+
count = counts.get(name)
|
|
58
60
|
rows.append(
|
|
59
61
|
{
|
|
60
62
|
"id": str(session.id),
|
|
61
63
|
"annotator": session.annotator_name,
|
|
62
64
|
"started": session.created.isoformat(timespec="seconds"),
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
+
"annotated": count.annotated if count else 0,
|
|
66
|
+
"active": count.active if count else 0,
|
|
67
|
+
"status": "excluded" if name in removed else "active",
|
|
65
68
|
}
|
|
66
69
|
)
|
|
67
70
|
print_table_with_select(rows, select=select, as_json=as_json)
|
|
68
71
|
return rows
|
|
69
72
|
|
|
70
73
|
|
|
71
|
-
def
|
|
72
|
-
session_id: UUID,
|
|
74
|
+
def _set_session_excluded(
|
|
75
|
+
session_id: UUID, excluded: bool, as_json: bool
|
|
73
76
|
) -> dict[str, Any]:
|
|
74
77
|
auth = get_auth_state()
|
|
75
78
|
session = auth.client.session.read(id=session_id)
|
|
@@ -80,11 +83,11 @@ def _set_session_disabled(
|
|
|
80
83
|
datasets = auth.broker_client.datasets
|
|
81
84
|
change = (
|
|
82
85
|
datasets.remove_session(dataset.name, name)
|
|
83
|
-
if
|
|
86
|
+
if excluded
|
|
84
87
|
else datasets.restore_session(dataset.name, name)
|
|
85
88
|
)
|
|
86
89
|
result = {"session": str(session_id), "examples": change.examples}
|
|
87
|
-
message = Messages.T072 if
|
|
90
|
+
message = Messages.T072 if excluded else Messages.T073
|
|
88
91
|
print_mutation_result(
|
|
89
92
|
result, message.format(id=session_id, count=change.examples), as_json=as_json
|
|
90
93
|
)
|
|
@@ -93,15 +96,15 @@ def _set_session_disabled(
|
|
|
93
96
|
|
|
94
97
|
@cli.subcommand(
|
|
95
98
|
"sessions",
|
|
96
|
-
"
|
|
99
|
+
"exclude",
|
|
97
100
|
session_id=Arg(help=Messages.session_id),
|
|
98
101
|
as_json=Arg("--json", help=Messages.as_json),
|
|
99
102
|
)
|
|
100
|
-
def
|
|
101
|
-
"""
|
|
103
|
+
def exclude(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
|
|
104
|
+
"""Exclude an annotation session: take its examples out of the task's
|
|
102
105
|
dataset, so training and exports leave them out and their tasks are served
|
|
103
106
|
again. They still count as the annotator's work"""
|
|
104
|
-
return
|
|
107
|
+
return _set_session_excluded(session_id, True, as_json)
|
|
105
108
|
|
|
106
109
|
|
|
107
110
|
@cli.subcommand(
|
|
@@ -111,58 +114,6 @@ def disable(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
|
|
|
111
114
|
as_json=Arg("--json", help=Messages.as_json),
|
|
112
115
|
)
|
|
113
116
|
def activate(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
|
|
114
|
-
"""Activate
|
|
115
|
-
task's dataset"""
|
|
116
|
-
return
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def _set_examples_disabled(
|
|
120
|
-
dataset: str, example_ids: builtins.list[int], disabled: bool, as_json: bool
|
|
121
|
-
) -> dict[str, Any]:
|
|
122
|
-
examples = get_auth_state().broker_client.examples
|
|
123
|
-
replaced = (
|
|
124
|
-
examples.disable(dataset, example_ids)
|
|
125
|
-
if disabled
|
|
126
|
-
else examples.activate(dataset, example_ids)
|
|
127
|
-
)
|
|
128
|
-
result = {
|
|
129
|
-
"examples": [
|
|
130
|
-
{"old_example_id": r.old_example_id, "id": r.id} for r in replaced.examples
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
message = Messages.T074 if disabled else Messages.T075
|
|
134
|
-
print_mutation_result(
|
|
135
|
-
result,
|
|
136
|
-
message.format(count=len(replaced.examples), name=dataset),
|
|
137
|
-
as_json=as_json,
|
|
138
|
-
)
|
|
139
|
-
return result
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
@cli.subcommand(
|
|
143
|
-
"examples",
|
|
144
|
-
"disable",
|
|
145
|
-
dataset=Arg(help=Messages.example_dataset),
|
|
146
|
-
example_ids=Arg(help=Messages.example_ids, converter=get_list_converter(int)),
|
|
147
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
148
|
-
)
|
|
149
|
-
def disable_examples(
|
|
150
|
-
dataset: str, example_ids: builtins.list[int], as_json: bool = False
|
|
151
|
-
) -> dict[str, Any]:
|
|
152
|
-
"""Disable examples: supersede each with a copy answered "ignore". They stay
|
|
153
|
-
in their dataset and remain their annotators' work"""
|
|
154
|
-
return _set_examples_disabled(dataset, example_ids, True, as_json)
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
@cli.subcommand(
|
|
158
|
-
"examples",
|
|
159
|
-
"activate",
|
|
160
|
-
dataset=Arg(help=Messages.example_dataset),
|
|
161
|
-
example_ids=Arg(help=Messages.example_ids, converter=get_list_converter(int)),
|
|
162
|
-
as_json=Arg("--json", help=Messages.as_json),
|
|
163
|
-
)
|
|
164
|
-
def activate_examples(
|
|
165
|
-
dataset: str, example_ids: builtins.list[int], as_json: bool = False
|
|
166
|
-
) -> dict[str, Any]:
|
|
167
|
-
"""Activate disabled examples: restore the answers they replaced"""
|
|
168
|
-
return _set_examples_disabled(dataset, example_ids, False, as_json)
|
|
117
|
+
"""Activate an excluded annotation session: put its examples back into
|
|
118
|
+
the task's dataset"""
|
|
119
|
+
return _set_session_excluded(session_id, False, as_json)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prog": "ellf",
|
|
3
3
|
"help": "Ellf Command Line Interface.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "19.0.3",
|
|
5
5
|
"extra_key": "_extra",
|
|
6
6
|
"commands": {
|
|
7
7
|
"actions": {
|
|
@@ -68,14 +68,6 @@
|
|
|
68
68
|
"parent": null,
|
|
69
69
|
"is_placeholder": true
|
|
70
70
|
},
|
|
71
|
-
"examples": {
|
|
72
|
-
"name": "examples",
|
|
73
|
-
"args": [],
|
|
74
|
-
"description": "Disable and activate annotated examples",
|
|
75
|
-
"allow_extra": false,
|
|
76
|
-
"parent": null,
|
|
77
|
-
"is_placeholder": true
|
|
78
|
-
},
|
|
79
71
|
"files": {
|
|
80
72
|
"name": "files",
|
|
81
73
|
"args": [],
|
|
@@ -167,7 +159,7 @@
|
|
|
167
159
|
"sessions": {
|
|
168
160
|
"name": "sessions",
|
|
169
161
|
"args": [],
|
|
170
|
-
"description": "View,
|
|
162
|
+
"description": "View, exclude and activate a task's annotation sessions",
|
|
171
163
|
"allow_extra": false,
|
|
172
164
|
"parent": null,
|
|
173
165
|
"is_placeholder": true
|
|
@@ -7467,9 +7459,9 @@
|
|
|
7467
7459
|
"id": "select",
|
|
7468
7460
|
"option": "--select",
|
|
7469
7461
|
"short": null,
|
|
7470
|
-
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', '
|
|
7471
|
-
"default": "['id', 'annotator', 'started', '
|
|
7472
|
-
"help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', '
|
|
7462
|
+
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotated', 'active', 'status']",
|
|
7463
|
+
"default": "['id', 'annotator', 'started', 'annotated', 'active', 'status']",
|
|
7464
|
+
"help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotated', 'active', 'status'] (list[str])",
|
|
7473
7465
|
"action": null,
|
|
7474
7466
|
"choices": null,
|
|
7475
7467
|
"has_converter": true,
|
|
@@ -7490,13 +7482,13 @@
|
|
|
7490
7482
|
"orig_type": "bool"
|
|
7491
7483
|
}
|
|
7492
7484
|
],
|
|
7493
|
-
"description": "List a task's annotation sessions, with how much each annotated
|
|
7485
|
+
"description": "List a task's annotation sessions, with how much each annotated, how\nmuch of that the dataset still holds, and whether it was excluded",
|
|
7494
7486
|
"allow_extra": false,
|
|
7495
7487
|
"parent": "sessions",
|
|
7496
7488
|
"is_placeholder": false
|
|
7497
7489
|
},
|
|
7498
|
-
"
|
|
7499
|
-
"name": "
|
|
7490
|
+
"exclude": {
|
|
7491
|
+
"name": "exclude",
|
|
7500
7492
|
"args": [
|
|
7501
7493
|
{
|
|
7502
7494
|
"id": "session_id",
|
|
@@ -7525,7 +7517,7 @@
|
|
|
7525
7517
|
"orig_type": "bool"
|
|
7526
7518
|
}
|
|
7527
7519
|
],
|
|
7528
|
-
"description": "
|
|
7520
|
+
"description": "Exclude an annotation session: take its examples out of the task's\ndataset, so training and exports leave them out and their tasks are served\nagain. They still count as the annotator's work",
|
|
7529
7521
|
"allow_extra": false,
|
|
7530
7522
|
"parent": "sessions",
|
|
7531
7523
|
"is_placeholder": false
|
|
@@ -7560,110 +7552,12 @@
|
|
|
7560
7552
|
"orig_type": "bool"
|
|
7561
7553
|
}
|
|
7562
7554
|
],
|
|
7563
|
-
"description": "Activate
|
|
7555
|
+
"description": "Activate an excluded annotation session: put its examples back into\nthe task's dataset",
|
|
7564
7556
|
"allow_extra": false,
|
|
7565
7557
|
"parent": "sessions",
|
|
7566
7558
|
"is_placeholder": false
|
|
7567
7559
|
}
|
|
7568
7560
|
},
|
|
7569
|
-
"examples": {
|
|
7570
|
-
"disable": {
|
|
7571
|
-
"name": "disable",
|
|
7572
|
-
"args": [
|
|
7573
|
-
{
|
|
7574
|
-
"id": "dataset",
|
|
7575
|
-
"option": null,
|
|
7576
|
-
"short": null,
|
|
7577
|
-
"orig_help": "Name of the dataset the examples belong to",
|
|
7578
|
-
"default": "==SUPPRESS==",
|
|
7579
|
-
"help": "Name of the dataset the examples belong to (str)",
|
|
7580
|
-
"action": null,
|
|
7581
|
-
"choices": null,
|
|
7582
|
-
"has_converter": false,
|
|
7583
|
-
"type": "str",
|
|
7584
|
-
"orig_type": "str"
|
|
7585
|
-
},
|
|
7586
|
-
{
|
|
7587
|
-
"id": "example_ids",
|
|
7588
|
-
"option": null,
|
|
7589
|
-
"short": null,
|
|
7590
|
-
"orig_help": "Comma-separated IDs of the examples",
|
|
7591
|
-
"default": "==SUPPRESS==",
|
|
7592
|
-
"help": "Comma-separated IDs of the examples (list[int])",
|
|
7593
|
-
"action": null,
|
|
7594
|
-
"choices": null,
|
|
7595
|
-
"has_converter": true,
|
|
7596
|
-
"type": "converter",
|
|
7597
|
-
"orig_type": "list[int]"
|
|
7598
|
-
},
|
|
7599
|
-
{
|
|
7600
|
-
"id": "as_json",
|
|
7601
|
-
"option": "--json",
|
|
7602
|
-
"short": null,
|
|
7603
|
-
"orig_help": "Output the result as JSON",
|
|
7604
|
-
"default": false,
|
|
7605
|
-
"help": "Output the result as JSON (bool)",
|
|
7606
|
-
"action": "store_true",
|
|
7607
|
-
"choices": null,
|
|
7608
|
-
"has_converter": false,
|
|
7609
|
-
"type": null,
|
|
7610
|
-
"orig_type": "bool"
|
|
7611
|
-
}
|
|
7612
|
-
],
|
|
7613
|
-
"description": "Disable examples: supersede each with a copy answered \"ignore\". They stay\nin their dataset and remain their annotators' work",
|
|
7614
|
-
"allow_extra": false,
|
|
7615
|
-
"parent": "examples",
|
|
7616
|
-
"is_placeholder": false
|
|
7617
|
-
},
|
|
7618
|
-
"activate": {
|
|
7619
|
-
"name": "activate",
|
|
7620
|
-
"args": [
|
|
7621
|
-
{
|
|
7622
|
-
"id": "dataset",
|
|
7623
|
-
"option": null,
|
|
7624
|
-
"short": null,
|
|
7625
|
-
"orig_help": "Name of the dataset the examples belong to",
|
|
7626
|
-
"default": "==SUPPRESS==",
|
|
7627
|
-
"help": "Name of the dataset the examples belong to (str)",
|
|
7628
|
-
"action": null,
|
|
7629
|
-
"choices": null,
|
|
7630
|
-
"has_converter": false,
|
|
7631
|
-
"type": "str",
|
|
7632
|
-
"orig_type": "str"
|
|
7633
|
-
},
|
|
7634
|
-
{
|
|
7635
|
-
"id": "example_ids",
|
|
7636
|
-
"option": null,
|
|
7637
|
-
"short": null,
|
|
7638
|
-
"orig_help": "Comma-separated IDs of the examples",
|
|
7639
|
-
"default": "==SUPPRESS==",
|
|
7640
|
-
"help": "Comma-separated IDs of the examples (list[int])",
|
|
7641
|
-
"action": null,
|
|
7642
|
-
"choices": null,
|
|
7643
|
-
"has_converter": true,
|
|
7644
|
-
"type": "converter",
|
|
7645
|
-
"orig_type": "list[int]"
|
|
7646
|
-
},
|
|
7647
|
-
{
|
|
7648
|
-
"id": "as_json",
|
|
7649
|
-
"option": "--json",
|
|
7650
|
-
"short": null,
|
|
7651
|
-
"orig_help": "Output the result as JSON",
|
|
7652
|
-
"default": false,
|
|
7653
|
-
"help": "Output the result as JSON (bool)",
|
|
7654
|
-
"action": "store_true",
|
|
7655
|
-
"choices": null,
|
|
7656
|
-
"has_converter": false,
|
|
7657
|
-
"type": null,
|
|
7658
|
-
"orig_type": "bool"
|
|
7659
|
-
}
|
|
7660
|
-
],
|
|
7661
|
-
"description": "Activate disabled examples: restore the answers they replaced",
|
|
7662
|
-
"allow_extra": false,
|
|
7663
|
-
"parent": "examples",
|
|
7664
|
-
"is_placeholder": false
|
|
7665
|
-
}
|
|
7666
|
-
},
|
|
7667
7561
|
"support": {
|
|
7668
7562
|
"create": {
|
|
7669
7563
|
"name": "create",
|
|
@@ -7903,9 +7797,9 @@
|
|
|
7903
7797
|
"id": "select",
|
|
7904
7798
|
"option": "--select",
|
|
7905
7799
|
"short": null,
|
|
7906
|
-
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state']",
|
|
7800
|
+
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state']",
|
|
7907
7801
|
"default": "['id', 'name', 'state']",
|
|
7908
|
-
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state'] (list[str])",
|
|
7802
|
+
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state'] (list[str])",
|
|
7909
7803
|
"action": null,
|
|
7910
7804
|
"choices": null,
|
|
7911
7805
|
"has_converter": true,
|
|
@@ -7977,9 +7871,9 @@
|
|
|
7977
7871
|
"id": "select",
|
|
7978
7872
|
"option": "--select",
|
|
7979
7873
|
"short": null,
|
|
7980
|
-
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url']",
|
|
7874
|
+
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url']",
|
|
7981
7875
|
"default": null,
|
|
7982
|
-
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] (list[str])",
|
|
7876
|
+
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] (list[str])",
|
|
7983
7877
|
"action": null,
|
|
7984
7878
|
"choices": null,
|
|
7985
7879
|
"has_converter": true,
|
{ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md
RENAMED
|
@@ -168,4 +168,4 @@ When you finish:
|
|
|
168
168
|
|------|---------------|--------------|
|
|
169
169
|
| `${CLAUDE_SKILL_DIR}/references/annotation_audit.md` | Readiness checklist: objective, schema, recipe fit, data, dataset | Before every launch |
|
|
170
170
|
| `${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md` | Built-in Ellf task and agent recipes with supported workflows | Recipe selection |
|
|
171
|
-
| `${CLAUDE_SKILL_DIR}/references/label_schemes.md` | Label scheme (`labels` asset) format, design and use by tasks and agents | Labels need definitions, or writing guidelines |
|
|
171
|
+
| `${CLAUDE_SKILL_DIR}/references/label_schemes.md` | Label scheme (`labels` asset) format, design and use by tasks and agents. Built-in `ner`, `spans` and `textcat` only | Labels need definitions, or writing guidelines |
|
|
@@ -41,7 +41,9 @@ passes.
|
|
|
41
41
|
Labels that aren't self-evident need a written definition before launch: what the
|
|
42
42
|
label covers, which look-alikes not to mark, and a few boundary examples. Keep them
|
|
43
43
|
in a label scheme (a `labels` asset, see `label_schemes.md`) used by the task, so
|
|
44
|
-
annotators see the descriptions and LLM agents get them in every prompt.
|
|
44
|
+
annotators see the descriptions and LLM agents get them in every prompt. Only the
|
|
45
|
+
built-in `ner`, `spans` and `textcat` recipes (and custom recipes that implement it)
|
|
46
|
+
take a scheme; for any other recipe, keep the definitions in the annotation guidelines. If a label
|
|
45
47
|
can't be defined without "it depends", the schema isn't ready.
|
|
46
48
|
|
|
47
49
|
### Task complexity
|
|
@@ -44,6 +44,11 @@ workflows.
|
|
|
44
44
|
|
|
45
45
|
## Label schemes
|
|
46
46
|
|
|
47
|
+
Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
|
|
48
|
+
a `labels` asset, so don't suggest one for them: put the label definitions in the
|
|
49
|
+
annotation instructions instead, or hand a custom recipe that takes a scheme off
|
|
50
|
+
to the coding agent (`/ellf-handoff`).
|
|
51
|
+
|
|
47
52
|
`ner`, `spans` and `textcat` take their labels as the **Labels** field, switched between **List** (typed labels) and **Asset** (a
|
|
48
53
|
scheme): an asset of kind
|
|
49
54
|
`labels` holding one JSON file with the labels in order and an optional definition
|
|
@@ -8,6 +8,15 @@ Read this when designing labels for a project, when turning an agreed label set
|
|
|
8
8
|
into something a task can use, or when writing annotation guidelines for labels
|
|
9
9
|
that already exist.
|
|
10
10
|
|
|
11
|
+
**Only some recipes take a scheme.** A scheme is a recipe argument, and the only
|
|
12
|
+
built-in recipes that have it are `ner`, `spans` and `textcat` (`--label-scheme`, or
|
|
13
|
+
**Asset** on the **Labels** field). A custom recipe can take one too, if it implements
|
|
14
|
+
it with `props.label_scheme` (hand a new one off to the coding agent with `/ellf-handoff`). No other built-in recipe accepts a
|
|
15
|
+
`labels` asset, so never suggest a scheme or `--label-scheme` for one of them. For
|
|
16
|
+
those, write the label definitions into the annotation guidelines (an `instructions`
|
|
17
|
+
asset) instead, or build a custom recipe if the definitions need to reach annotators
|
|
18
|
+
and agents label by label.
|
|
19
|
+
|
|
11
20
|
## Format
|
|
12
21
|
|
|
13
22
|
The file is a JSON object that maps each label to an object. The key order is the
|
|
@@ -89,13 +98,14 @@ Show it to the user and settle the labels before publishing.
|
|
|
89
98
|
previewed from the Assets page and from the asset picker in recipe forms.
|
|
90
99
|
- **Reuse:** check for an existing `labels` asset (`ellf assets list`, or the Assets
|
|
91
100
|
page) before writing a new one. Use one scheme per label set, not one per task.
|
|
92
|
-
- **Tasks:** the built-in `ner`, `spans` and `textcat` recipes
|
|
93
|
-
|
|
101
|
+
- **Tasks:** only the built-in `ner`, `spans` and `textcat` recipes (and custom recipes
|
|
102
|
+
that implement it) take a scheme. They accept either a typed list of labels
|
|
103
|
+
(`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
|
|
94
104
|
**Labels** field switches between **List** and **Asset**. Prefer a scheme whenever
|
|
95
105
|
the labels need explaining, are reused across tasks, or agents will annotate.
|
|
96
106
|
- **Annotators** see a label's description when they hover the label in the annotation
|
|
97
107
|
app (and on choice options for text classification).
|
|
98
|
-
- **Agents:** a task passes its label definitions on to every LLM agent assigned to it
|
|
108
|
+
- **Agents:** a task with a scheme passes its label definitions on to every LLM agent assigned to it
|
|
99
109
|
(`gemini_agent`, `hf_llm_agent`), and they're included in each prompt: description,
|
|
100
110
|
`do_not_mark` and the examples that fit the task type. An agent can have its own
|
|
101
111
|
scheme on top (`--labels.scheme`), whose definitions replace the task's for the
|
{ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md
RENAMED
|
@@ -199,4 +199,4 @@ When you finish:
|
|
|
199
199
|
| `${CLAUDE_SKILL_DIR}/references/annotation_audit.md` | Readiness checklist: objective, schema, recipe fit, data, dataset | Before every launch |
|
|
200
200
|
| `${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md` | Built-in Ellf task and agent recipes with supported workflows | Recipe selection for cluster |
|
|
201
201
|
| `${CLAUDE_SKILL_DIR}/references/builtin_prodigy_recipes.md` | Built-in standalone Prodigy recipes | Recipe selection for local |
|
|
202
|
-
| `${CLAUDE_SKILL_DIR}/references/label_schemes.md` | Label scheme (`labels` asset) format, design and use by tasks and agents | Labels need definitions, building them from annotated data, or writing guidelines |
|
|
202
|
+
| `${CLAUDE_SKILL_DIR}/references/label_schemes.md` | Label scheme (`labels` asset) format, design and use by tasks and agents. Built-in `ner`, `spans` and `textcat` only | Labels need definitions, building them from annotated data, or writing guidelines |
|
|
@@ -41,7 +41,9 @@ passes.
|
|
|
41
41
|
Labels that aren't self-evident need a written definition before launch: what the
|
|
42
42
|
label covers, which look-alikes not to mark, and a few boundary examples. Keep them
|
|
43
43
|
in a label scheme (a `labels` asset, see `label_schemes.md`) used by the task, so
|
|
44
|
-
annotators see the descriptions and LLM agents get them in every prompt.
|
|
44
|
+
annotators see the descriptions and LLM agents get them in every prompt. Only the
|
|
45
|
+
built-in `ner`, `spans` and `textcat` recipes (and custom recipes that implement it)
|
|
46
|
+
take a scheme; for any other recipe, keep the definitions in the annotation guidelines. If a label
|
|
45
47
|
can't be defined without "it depends", the schema isn't ready.
|
|
46
48
|
|
|
47
49
|
### Task complexity
|
|
@@ -44,6 +44,11 @@ workflows.
|
|
|
44
44
|
|
|
45
45
|
## Label schemes
|
|
46
46
|
|
|
47
|
+
Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
|
|
48
|
+
a `labels` asset, so don't suggest one for them: put the label definitions in the
|
|
49
|
+
annotation instructions instead, or build a custom recipe that takes a scheme
|
|
50
|
+
(`/ellf-prodigy`).
|
|
51
|
+
|
|
47
52
|
`ner`, `spans` and `textcat` take their labels as `--label A,B` for a typed list, or `--label-scheme <asset>` for a scheme: an asset of kind
|
|
48
53
|
`labels` holding one JSON file with the labels in order and an optional definition
|
|
49
54
|
for each (description, look-alikes not to mark, examples). Prefer a scheme when the
|
|
@@ -8,6 +8,15 @@ Read this when designing labels for a project, when turning an agreed label set
|
|
|
8
8
|
into something a task can use, or when writing annotation guidelines for labels
|
|
9
9
|
that already exist.
|
|
10
10
|
|
|
11
|
+
**Only some recipes take a scheme.** A scheme is a recipe argument, and the only
|
|
12
|
+
built-in recipes that have it are `ner`, `spans` and `textcat` (`--label-scheme`, or
|
|
13
|
+
**Asset** on the **Labels** field). A custom recipe can take one too, if it implements
|
|
14
|
+
it with `props.label_scheme` (see `/ellf-prodigy`). No other built-in recipe accepts a
|
|
15
|
+
`labels` asset, so never suggest a scheme or `--label-scheme` for one of them. For
|
|
16
|
+
those, write the label definitions into the annotation guidelines (an `instructions`
|
|
17
|
+
asset) instead, or build a custom recipe if the definitions need to reach annotators
|
|
18
|
+
and agents label by label.
|
|
19
|
+
|
|
11
20
|
## Format
|
|
12
21
|
|
|
13
22
|
The file is a JSON object that maps each label to an object. The key order is the
|
|
@@ -122,13 +131,14 @@ Show the draft to the user, settle it, then publish it and use it in the tasks.
|
|
|
122
131
|
previewed from the Assets page and from the asset picker in recipe forms.
|
|
123
132
|
- **Reuse:** check for an existing `labels` asset (`ellf assets list`, or the Assets
|
|
124
133
|
page) before writing a new one. Use one scheme per label set, not one per task.
|
|
125
|
-
- **Tasks:** the built-in `ner`, `spans` and `textcat` recipes
|
|
126
|
-
|
|
134
|
+
- **Tasks:** only the built-in `ner`, `spans` and `textcat` recipes (and custom recipes
|
|
135
|
+
that implement it) take a scheme. They accept either a typed list of labels
|
|
136
|
+
(`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
|
|
127
137
|
**Labels** field switches between **List** and **Asset**. Prefer a scheme whenever
|
|
128
138
|
the labels need explaining, are reused across tasks, or agents will annotate.
|
|
129
139
|
- **Annotators** see a label's description when they hover the label in the annotation
|
|
130
140
|
app (and on choice options for text classification).
|
|
131
|
-
- **Agents:** a task passes its label definitions on to every LLM agent assigned to it
|
|
141
|
+
- **Agents:** a task with a scheme passes its label definitions on to every LLM agent assigned to it
|
|
132
142
|
(`gemini_agent`, `hf_llm_agent`), and they're included in each prompt: description,
|
|
133
143
|
`do_not_mark` and the examples that fit the task type. An agent can have its own
|
|
134
144
|
scheme on top (`--labels.scheme`), whose definitions replace the task's for the
|
|
@@ -131,7 +131,8 @@ This is the preferred way to upload local files to the cluster — it copies the
|
|
|
131
131
|
|
|
132
132
|
Asset kinds that hold a single document: `instructions` (one Markdown file of
|
|
133
133
|
annotation guidelines) and `labels` (one JSON label scheme, the labels of a task with
|
|
134
|
-
their definitions
|
|
134
|
+
their definitions; only the built-in `ner`, `spans` and `textcat` recipes, and custom
|
|
135
|
+
recipes that implement it, take one). A label scheme is checked when a task or agent loads it, so
|
|
135
136
|
validate the JSON locally before publishing:
|
|
136
137
|
|
|
137
138
|
```bash
|