ellf-cli 19.0.4__tar.gz → 19.0.5__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-19.0.4/ellf_cli.egg-info → ellf_cli-19.0.5}/PKG-INFO +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf.json +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +10 -7
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +6 -7
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +31 -8
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/label_schemes.md +13 -13
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +5 -3
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +30 -7
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +26 -0
- {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/label_schemes.md +19 -8
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +7 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +8 -6
- ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +34 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +33 -7
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +8 -2
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +29 -17
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +41 -25
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +76 -15
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +77 -23
- ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +80 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +11 -3
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +15 -19
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +48 -17
- ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_service_recipe.py +91 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +41 -15
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +31 -8
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +195 -36
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +71 -18
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +48 -41
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +18 -3
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +24 -18
- ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/annotation_agents.md +100 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/label_schemes.md +13 -13
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +13 -13
- ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.coding/references/annotation_agents.md +100 -0
- {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/label_schemes.md +19 -8
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +16 -3
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +11 -7
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +5 -5
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +1 -1
- {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-train.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-train.assistant}/references/model_selection.md +2 -2
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +7 -8
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +46 -12
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +1 -1
- {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-train.assistant → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-train.coding}/references/model_selection.md +2 -2
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +25 -20
- ellf_cli-19.0.5/ellf_cli/version/19.0.4_2026-09-29-16-24-53_patch_9fe8ad2b-e3ec-4558-a5fc-9c44c5c266dc +3 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/SOURCES.txt +4 -2
- ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -26
- ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -48
- ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -87
- ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -87
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/LICENSE +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/MANIFEST.in +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/README.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/__main__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/about.json +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/about.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/auth.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cli.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_project_scope.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_usage.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/_config_io.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/configure.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/init.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/services.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/sessions.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/users.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/config.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skill_variants.json +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/errors.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/helm.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/interactivity.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/main.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/messages.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/pypi_auth.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/query.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ty.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ui.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/url.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/util.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.3_2026-09-29-14-16-00_patch_3cb60272-95cf-4311-8897-721e1b5c2c88 +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/__init__.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/read_version.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/pyproject.toml +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/setup.cfg +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/setup.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_agents_info_stats.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_appdirs.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_auth.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_clusters_info_stats.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_config.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_datasets_export.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_errors.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_files_cp.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_helm.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_import_export.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_info.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_config_io.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_configure.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_deploy_node_labels.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_get_terraform.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_init.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_provision.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_start_fixes.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_start_validation.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_state_bucket.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_terraform_init.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_job_list_project_filter.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_jobs_info_hides_creator.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_jobs_list_unmatched.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_key_pair.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_login.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_logout.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_main.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_org_select.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_plans.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_projects.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_projects_delete_confirm.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_build_poll.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_data.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_import_root.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_requirements.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_pypi_auth.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_query.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_recipe_file.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_recipes.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_sessions.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_state.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_support.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_todos.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ty.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ui.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ui_extras.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_usage_counts.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_assign.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_info_stats.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_list.py +0 -0
- {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_util.py +0 -0
{ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md
RENAMED
|
@@ -27,9 +27,9 @@ If the workflow requires a new custom recipe or custom interface, use
|
|
|
27
27
|
methodology or schema work is needed, use `/ellf-project`.
|
|
28
28
|
|
|
29
29
|
**Never narrate routing or argument inference to the user.** The user does
|
|
30
|
-
not need to know that you're delegating to `/ellf-ops`,
|
|
31
|
-
|
|
32
|
-
field. Say only what the user can act on: the outcome, the next step, the
|
|
30
|
+
not need to know that you're delegating to `/ellf-ops`, whether you
|
|
31
|
+
inferred from their verb that they want the task started, or which cli-name
|
|
32
|
+
you chose for which field. Say only what the user can act on: the outcome, the next step, the
|
|
33
33
|
link. The audit summary is useful when something failed and the user needs
|
|
34
34
|
to fix it; otherwise skip it and let the create tool's artifact (card,
|
|
35
35
|
form link, or prerequisite link) do the talking.
|
|
@@ -118,17 +118,20 @@ mcp__pam__task_create(
|
|
|
118
118
|
recipe_id=<from recipe_list>,
|
|
119
119
|
args=<resolved scalar args>,
|
|
120
120
|
name=<optional; PAM auto-names from recipe + timestamp when omitted>,
|
|
121
|
-
auto_start=<true if the user said run/start/launch, false for create/save/set up>,
|
|
122
121
|
)
|
|
123
122
|
```
|
|
124
123
|
|
|
124
|
+
Creating never starts the task. If the user said run/start/launch and the
|
|
125
|
+
create returned `status: "created"`, call `mcp__pam__task_start(id=<object.id>)`
|
|
126
|
+
next; for create/save/set up, stop after creation.
|
|
127
|
+
|
|
125
128
|
If an annotation agent was also planned, call `mcp__pam__agent_create(...)`
|
|
126
129
|
for the agent. After the agent is created and started, attach it to the
|
|
127
130
|
task with `mcp__pam__task_assign_bot(task_id=..., agent_id=...)`.
|
|
128
131
|
|
|
129
132
|
The create tool's internal validation routes every case to a useful
|
|
130
133
|
user-facing artifact:
|
|
131
|
-
- confirmation card
|
|
134
|
+
- Allow/Deny confirmation card on clean validation (creates the task; it does not start it)
|
|
132
135
|
- form-handoff link on missing scalars or complex JSON args
|
|
133
136
|
- missing-prerequisite link on a referenced asset / dataset / secret that doesn't exist on the cluster
|
|
134
137
|
|
|
@@ -143,8 +146,8 @@ X, Y, Z", any pre-emptive validation reasoning).
|
|
|
143
146
|
Once the user confirms the create card (or the form-handoff link is followed
|
|
144
147
|
through to completion), help verify and run any follow-ups:
|
|
145
148
|
|
|
146
|
-
- if the
|
|
147
|
-
|
|
149
|
+
- if the user didn't ask to run it yet: use the `/ellf-ops` start workflow when
|
|
150
|
+
they're ready
|
|
148
151
|
- check cluster status with `mcp__cluster__job_status(id="<id>")` to confirm the
|
|
149
152
|
task is running or healthy
|
|
150
153
|
- provide the task link and tell the user where to open it in the app
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Annotation Audit Reference
|
|
2
2
|
|
|
3
3
|
Quick-reference for auditing an annotation plan before launching a recipe.
|
|
4
|
-
This covers the checks ellf-annotate runs
|
|
4
|
+
This covers the checks ellf-annotate runs before launch. For deep strategic
|
|
5
5
|
questions (team structure, agile workflow, full schema redesign), escalate to
|
|
6
6
|
ellf-project.
|
|
7
7
|
|
|
@@ -112,12 +112,11 @@ These catch cases where a different recipe would be significantly more efficient
|
|
|
112
112
|
|
|
113
113
|
| Situation | Suggestion |
|
|
114
114
|
|---|---|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
| Complex UI needs (custom blocks, multiple views) | Delegate to ellf-prodigy for custom recipe |
|
|
115
|
+
| `ner` or `spans` with a blank model, but a trained pipeline exists | Pick the trained model in the recipe's **Model** field: the task shows its predictions to correct, faster than annotating from scratch |
|
|
116
|
+
| `ner` or `spans` without patterns, but patterns exist | Add them as a `patterns` asset in the **Patterns** field to pre-highlight matches |
|
|
117
|
+
| `textcat` without a model, but a trained classifier exists | Pick the classifier in the **Model** field to pre-select its predictions |
|
|
118
|
+
| Large dataset, no model assistance | Consider an annotation agent (`gemini_agent`) to pre-annotate, with humans correcting; see `builtin_ellf_annotation_recipes.md` |
|
|
119
|
+
| Complex UI needs (custom blocks, multiple views) | Hand the custom recipe to the coding agent with `/ellf-handoff` |
|
|
121
120
|
|
|
122
121
|
---
|
|
123
122
|
|
|
@@ -39,9 +39,27 @@ workflows.
|
|
|
39
39
|
| `audio` | Audio annotation |
|
|
40
40
|
| `video` | Video annotation |
|
|
41
41
|
| `curate` | Data curation / exploration |
|
|
42
|
-
| `review` | Review and correction of prior annotations |
|
|
42
|
+
| `review` | Review and correction of prior annotations (structured datasets only) |
|
|
43
43
|
| `sent` | Sentence segmentation |
|
|
44
44
|
|
|
45
|
+
PDF task recipes (the `recipes_pdf` package; confirm the cluster lists them):
|
|
46
|
+
|
|
47
|
+
| Recipe | Use for |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `pdf_image` | Bounding boxes and segments on PDF pages rendered as images |
|
|
50
|
+
| `pdf_spans` | Text spans in PDFs, from a `layout` asset made by the `pdf_layout_fetch` action |
|
|
51
|
+
| `pdf_ocr_correct` | OCR the boxes from a `pdf_image` dataset and correct the extracted text |
|
|
52
|
+
|
|
53
|
+
`pdf_image` and `pdf_ocr_correct` take a `pdf` asset (`pdf_ocr_correct` also the
|
|
54
|
+
`pdf_image` dataset); `pdf_spans` takes the `layout` asset that `pdf_layout_fetch`
|
|
55
|
+
makes from one. The `pdf_ingest` action renders a PDF annotation-ready
|
|
56
|
+
(it can also run on upload), and `pdf_layout_fetch` extracts its text and layout into the `layout`
|
|
57
|
+
asset `pdf_spans` needs.
|
|
58
|
+
|
|
59
|
+
`review` only reads datasets in structured storage. Datasets with examples from before
|
|
60
|
+
it must first go through the "Migrate dataset to structured" action
|
|
61
|
+
(`migrate_to_structured`). Its labels default to the ones found in the annotations.
|
|
62
|
+
|
|
45
63
|
## Label schemes
|
|
46
64
|
|
|
47
65
|
Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
|
|
@@ -61,7 +79,7 @@ for an existing one before writing a new one. Format and design advice:
|
|
|
61
79
|
|
|
62
80
|
## Annotation instructions
|
|
63
81
|
|
|
64
|
-
Built-in task recipes take annotation instructions in their annotation settings
|
|
82
|
+
Built-in task recipes except `review` and `terms` take annotation instructions in their annotation settings
|
|
65
83
|
(the **Instructions** field): an asset of kind `instructions` holding one Markdown
|
|
66
84
|
document. HTML isn't accepted. Annotators open it in the annotation app from the help
|
|
67
85
|
icon or with the H key.
|
|
@@ -108,15 +126,20 @@ them when the user asks for Hugging Face models or already has a suitable fine-t
|
|
|
108
126
|
model.
|
|
109
127
|
- `hf_model_agent` runs a model already fine-tuned for the task (from the Hub or an
|
|
110
128
|
`hf_model` asset) on the cluster. It only serves `ner_manual` / `spans_manual`, binary
|
|
111
|
-
`ner` / `spans`, `choice` and binary `classification` tasks.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
129
|
+
`ner` / `spans`, `choice` and binary `classification` tasks. Model labels with the
|
|
130
|
+
same name as a task label map automatically; map the others with `label_map` (model
|
|
131
|
+
label → task label). It stops on its first task with an error naming what's missing
|
|
132
|
+
when a manual spans or choice task has a label the model can't produce, when the
|
|
133
|
+
interface isn't supported, or when the model type doesn't fit the task (a
|
|
134
|
+
token-classification model on a choice task, say). Binary tasks whose label the model
|
|
135
|
+
doesn't have are answered "ignore" instead.
|
|
115
136
|
- `hf_llm_agent` works like `gemini_agent` but uses a chat model from Hugging Face
|
|
116
137
|
Inference Providers, and needs an `hf_token` secret. A bad token, missing credits or an
|
|
117
138
|
unusable model stops it at startup with the reason.
|
|
118
139
|
|
|
119
|
-
The LLM agents (`gemini_agent`, `hf_llm_agent`)
|
|
140
|
+
The LLM agents (`gemini_agent`, `hf_llm_agent`) only annotate text: tasks without
|
|
141
|
+
text, and interfaces no prompt covers (relations, dependencies, `blocks`, image, audio),
|
|
142
|
+
are answered "ignore" and left to people. They include the task's annotation
|
|
120
143
|
instructions in every prompt by default. Their **Agent annotation settings** add:
|
|
121
144
|
- **Agent instructions**: an agent-only `instructions` asset, combined with the task's.
|
|
122
145
|
Use it for guidance only the model needs, such as mistakes it keeps making.
|
|
@@ -143,4 +166,4 @@ definitions.
|
|
|
143
166
|
annotations rather than creating annotations from scratch.
|
|
144
167
|
- If the user needs a custom interface, multi-view workflow, unusual routing,
|
|
145
168
|
or annotation logic the built-ins cannot express cleanly, delegate to
|
|
146
|
-
|
|
169
|
+
`/ellf-handoff`, which hands the custom recipe to the coding agent.
|
|
@@ -9,10 +9,10 @@ into something a task can use, or when writing annotation guidelines for labels
|
|
|
9
9
|
that already exist.
|
|
10
10
|
|
|
11
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` (
|
|
13
|
-
**
|
|
12
|
+
built-in recipes that have it are `ner`, `spans` and `textcat` (**Asset** on the
|
|
13
|
+
**Labels** field). A custom recipe can take one too, if it implements
|
|
14
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
|
|
15
|
+
`labels` asset, so never suggest a scheme for one of them. For
|
|
16
16
|
those, write the label definitions into the annotation guidelines (an `instructions`
|
|
17
17
|
asset) instead, or build a custom recipe if the definitions need to reach annotators
|
|
18
18
|
and agents label by label.
|
|
@@ -93,23 +93,23 @@ Show it to the user and settle the labels before publishing.
|
|
|
93
93
|
|
|
94
94
|
## Publishing and using a scheme
|
|
95
95
|
|
|
96
|
-
- **Publish:**
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- **Reuse:** check for an existing `labels` asset
|
|
100
|
-
|
|
96
|
+
- **Publish:** the user uploads the file on the cluster's Assets page with the kind
|
|
97
|
+
`labels`. Assets can be previewed from the Assets page and from the asset picker in
|
|
98
|
+
recipe forms.
|
|
99
|
+
- **Reuse:** ask the user to check the Assets page for an existing `labels` asset
|
|
100
|
+
before writing a new one. Use one scheme per label set, not one per task.
|
|
101
101
|
- **Tasks:** only the built-in `ner`, `spans` and `textcat` recipes (and custom recipes
|
|
102
|
-
that implement it) take a scheme.
|
|
103
|
-
(
|
|
104
|
-
**Labels** field switches between **List** and **Asset**. Prefer a scheme whenever
|
|
102
|
+
that implement it) take a scheme. In the web form, their **Labels** field switches
|
|
103
|
+
between **List** (typed labels) and **Asset** (a scheme). Prefer a scheme whenever
|
|
105
104
|
the labels need explaining, are reused across tasks, or agents will annotate.
|
|
106
105
|
- **Annotators** see a label's description when they hover the label in the annotation
|
|
107
106
|
app (and on choice options for text classification).
|
|
108
107
|
- **Agents:** a task with a scheme passes its label definitions on to every LLM agent assigned to it
|
|
109
108
|
(`gemini_agent`, `hf_llm_agent`), and they're included in each prompt: description,
|
|
110
109
|
`do_not_mark` and the examples that fit the task type. An agent can have its own
|
|
111
|
-
scheme on top (
|
|
112
|
-
labels it defines, or ignore the task's definitions (
|
|
110
|
+
scheme on top (its **Label scheme** setting), whose definitions replace the task's
|
|
111
|
+
for the labels it defines, or ignore the task's definitions (**Ignore label
|
|
112
|
+
definitions from task**).
|
|
113
113
|
The agent always annotates the task's labels; labels only its scheme has are ignored.
|
|
114
114
|
`hf_model_agent` doesn't use label definitions.
|
|
115
115
|
|
{ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md
RENAMED
|
@@ -162,13 +162,15 @@ A launch is not complete until you verify that the annotation process is usable.
|
|
|
162
162
|
### Ellf cluster
|
|
163
163
|
|
|
164
164
|
```bash
|
|
165
|
-
ellf tasks
|
|
166
|
-
ellf tasks
|
|
165
|
+
ellf tasks logs "<name>" --show-errors --json # state + structured errors
|
|
166
|
+
ellf tasks info "<name>" --json # url + stats
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
-
Confirm the task exists and is running
|
|
169
|
+
Confirm the task exists and its state is `running` or `ready` (`info --json` has no
|
|
170
|
+
state field). If an agent was requested:
|
|
170
171
|
|
|
171
172
|
```bash
|
|
173
|
+
ellf agents logs "<agent_name>" --show-errors --json
|
|
172
174
|
ellf agents info "<agent_name>" --json
|
|
173
175
|
```
|
|
174
176
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Annotation Audit Reference
|
|
2
2
|
|
|
3
3
|
Quick-reference for auditing an annotation plan before launching a recipe.
|
|
4
|
-
This covers the checks ellf-annotate runs
|
|
4
|
+
This covers the checks ellf-annotate runs before launch. For deep strategic
|
|
5
5
|
questions (team structure, agile workflow, full schema redesign), escalate to
|
|
6
6
|
ellf-project.
|
|
7
7
|
|
|
@@ -39,9 +39,27 @@ workflows.
|
|
|
39
39
|
| `audio` | Audio annotation |
|
|
40
40
|
| `video` | Video annotation |
|
|
41
41
|
| `curate` | Data curation / exploration |
|
|
42
|
-
| `review` | Review and correction of prior annotations |
|
|
42
|
+
| `review` | Review and correction of prior annotations (structured datasets only) |
|
|
43
43
|
| `sent` | Sentence segmentation |
|
|
44
44
|
|
|
45
|
+
PDF task recipes (the `recipes_pdf` package; confirm the cluster lists them):
|
|
46
|
+
|
|
47
|
+
| Recipe | Use for |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `pdf_image` | Bounding boxes and segments on PDF pages rendered as images |
|
|
50
|
+
| `pdf_spans` | Text spans in PDFs, from a `layout` asset made by the `pdf_layout_fetch` action |
|
|
51
|
+
| `pdf_ocr_correct` | OCR the boxes from a `pdf_image` dataset and correct the extracted text |
|
|
52
|
+
|
|
53
|
+
`pdf_image` and `pdf_ocr_correct` take a `pdf` asset (`pdf_ocr_correct` also the
|
|
54
|
+
`pdf_image` dataset); `pdf_spans` takes the `layout` asset that `pdf_layout_fetch`
|
|
55
|
+
makes from one. The `pdf_ingest` action renders a PDF annotation-ready
|
|
56
|
+
(`ellf publish data <file.pdf> --kind pdf --render` runs it on upload), and `pdf_layout_fetch` extracts its text and layout into the `layout`
|
|
57
|
+
asset `pdf_spans` needs.
|
|
58
|
+
|
|
59
|
+
`review` only reads datasets in structured storage. Datasets with examples from before
|
|
60
|
+
it must first go through the "Migrate dataset to structured" action
|
|
61
|
+
(`migrate_to_structured`). Its labels default to the ones found in the annotations.
|
|
62
|
+
|
|
45
63
|
## Label schemes
|
|
46
64
|
|
|
47
65
|
Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
|
|
@@ -61,7 +79,7 @@ for an existing one first with `ellf assets list`. Format and design advice:
|
|
|
61
79
|
|
|
62
80
|
## Annotation instructions
|
|
63
81
|
|
|
64
|
-
Built-in task recipes take annotation instructions in their annotation settings
|
|
82
|
+
Built-in task recipes except `review` and `terms` take annotation instructions in their annotation settings
|
|
65
83
|
(`--settings.instructions`): an asset of kind `instructions` holding one Markdown
|
|
66
84
|
document. HTML isn't accepted. Annotators open it in the annotation app from the help
|
|
67
85
|
icon or with the H key. Publish it with
|
|
@@ -109,15 +127,20 @@ them when the user asks for Hugging Face models or already has a suitable fine-t
|
|
|
109
127
|
model.
|
|
110
128
|
- `hf_model_agent` runs a model already fine-tuned for the task (from the Hub or an
|
|
111
129
|
`hf_model` asset) on the cluster. It only serves `ner_manual` / `spans_manual`, binary
|
|
112
|
-
`ner` / `spans`, `choice` and binary `classification` tasks.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
130
|
+
`ner` / `spans`, `choice` and binary `classification` tasks. Model labels with the
|
|
131
|
+
same name as a task label map automatically; map the others with `label_map` (model
|
|
132
|
+
label → task label). It stops on its first task with an error naming what's missing
|
|
133
|
+
when a manual spans or choice task has a label the model can't produce, when the
|
|
134
|
+
interface isn't supported, or when the model type doesn't fit the task (a
|
|
135
|
+
token-classification model on a choice task, say). Binary tasks whose label the model
|
|
136
|
+
doesn't have are answered "ignore" instead.
|
|
116
137
|
- `hf_llm_agent` works like `gemini_agent` but uses a chat model from Hugging Face
|
|
117
138
|
Inference Providers, and needs an `hf_token` secret. A bad token, missing credits or an
|
|
118
139
|
unusable model stops it at startup with the reason.
|
|
119
140
|
|
|
120
|
-
The LLM agents (`gemini_agent`, `hf_llm_agent`)
|
|
141
|
+
The LLM agents (`gemini_agent`, `hf_llm_agent`) only annotate text: tasks without
|
|
142
|
+
text, and interfaces no prompt covers (relations, dependencies, `blocks`, image, audio),
|
|
143
|
+
are answered "ignore" and left to people. They include the task's annotation
|
|
121
144
|
instructions in every prompt by default. Their agent settings add:
|
|
122
145
|
- `--settings.instructions`: an agent-only `instructions` asset, combined with the
|
|
123
146
|
task's. Use it for guidance only the model needs, such as mistakes it keeps making.
|
|
@@ -16,6 +16,7 @@ built-ins or an existing custom recipe are not enough.
|
|
|
16
16
|
| `ner.correct` | Correct model predictions |
|
|
17
17
|
| `ner.teach` | Active-learning binary review |
|
|
18
18
|
| `ner.llm.correct` | Correct LLM-assisted predictions |
|
|
19
|
+
| `ner.silver-to-gold` | Turn binary (accept/reject) annotations into complete gold ones |
|
|
19
20
|
|
|
20
21
|
## Span Categorization
|
|
21
22
|
|
|
@@ -23,6 +24,7 @@ built-ins or an existing custom recipe are not enough.
|
|
|
23
24
|
|---|---|
|
|
24
25
|
| `spans.manual` | Manual overlapping span annotation |
|
|
25
26
|
| `spans.correct` | Correct span predictions |
|
|
27
|
+
| `spans.llm.correct` | Correct LLM-assisted span predictions |
|
|
26
28
|
|
|
27
29
|
## Text Classification
|
|
28
30
|
|
|
@@ -60,6 +62,30 @@ built-ins or an existing custom recipe are not enough.
|
|
|
60
62
|
|---|---|
|
|
61
63
|
| `coref.manual` | Manual coreference annotation |
|
|
62
64
|
|
|
65
|
+
## Image and audio
|
|
66
|
+
|
|
67
|
+
| Recipe | Use for |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `image.manual` | Bounding boxes, polygons and freehand shapes on images |
|
|
70
|
+
| `audio.manual` | Label regions in audio or video |
|
|
71
|
+
| `audio.transcribe` | Transcribe audio or video |
|
|
72
|
+
|
|
73
|
+
## Terminology
|
|
74
|
+
|
|
75
|
+
| Recipe | Use for |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `terms.teach` | Build a terminology list from seed terms with word vectors |
|
|
78
|
+
| `terms.to-patterns` | Turn a terminology dataset into match patterns |
|
|
79
|
+
|
|
80
|
+
## Pre-annotating and comparing
|
|
81
|
+
|
|
82
|
+
| Recipe | Use for |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `ner.model-annotate` / `spans.model-annotate` / `textcat.model-annotate` | Save a model's predictions to a dataset, e.g. to review or compare |
|
|
85
|
+
| `ner.llm.fetch` / `spans.llm.fetch` / `textcat.llm.fetch` | Fetch LLM predictions for a whole corpus up front, then correct them |
|
|
86
|
+
| `compare` | Compare two sets of outputs side by side (A/B) |
|
|
87
|
+
| `ner.eval-ab` | A/B evaluation of two NER models |
|
|
88
|
+
|
|
63
89
|
## Relations and review
|
|
64
90
|
|
|
65
91
|
| Recipe | Use for |
|
|
@@ -64,8 +64,10 @@ no plain list of labels.
|
|
|
64
64
|
exactly the span's `text`.
|
|
65
65
|
|
|
66
66
|
Unknown keys are an error (`"desc"` instead of `"description"`), and so is anything
|
|
67
|
-
else that doesn't fit the format
|
|
68
|
-
|
|
67
|
+
else that doesn't fit the format; a top-level `"$schema"` string is allowed. The file
|
|
68
|
+
is checked when it's published with `ellf publish data --kind labels` and again when a
|
|
69
|
+
task or agent loads it, and every problem is reported at once, so fix them all in one
|
|
70
|
+
go.
|
|
69
71
|
|
|
70
72
|
## Designing a scheme
|
|
71
73
|
|
|
@@ -99,25 +101,34 @@ user has annotated data for the labels, or can't settle the definitions up front
|
|
|
99
101
|
|
|
100
102
|
- **From an existing dataset.** Export it with
|
|
101
103
|
`ellf datasets export "<dataset>" -o annotations.jsonl` and derive the scheme from
|
|
102
|
-
it, as described below.
|
|
104
|
+
it, as described below. Export refuses datasets that still hold examples from
|
|
105
|
+
before structured storage; run the "Migrate dataset to structured" action
|
|
106
|
+
(`migrate_to_structured`) on them first.
|
|
103
107
|
- **Pilot first, then write the scheme.** If there's no data yet and the labels
|
|
104
108
|
aren't settled, queue up a small batch with a plain list of labels (`--label A,B`)
|
|
105
109
|
and flagging enabled (`"show_flag": true` in the Prodigy config), and ask the user
|
|
106
110
|
to go through 50–100 examples, flagging the ones they're unsure about. Then build
|
|
107
|
-
the scheme from that dataset,
|
|
108
|
-
`--label-scheme`, so annotators and agents see the definitions from then on
|
|
111
|
+
the scheme from that dataset, publish it, and create the next task with
|
|
112
|
+
`--label-scheme`, so annotators and agents see the definitions from then on (a
|
|
113
|
+
task's recipe args can't be changed after creation). The
|
|
109
114
|
flagged examples are usually what `do_not_mark` and the boundary examples need.
|
|
110
115
|
|
|
116
|
+
The export is structured JSONL, one row per answer: the text is in `input.text`,
|
|
117
|
+
the annotation in `user_anns` (`user_anns.spans` for spans, `user_anns.label` for
|
|
118
|
+
text classification, `user_anns.accept` for choice; a key missing there comes from
|
|
119
|
+
`server_anns`, the suggestion as served), the answer in `answer`, and the flag in
|
|
120
|
+
`extras.flagged`. Rows don't record who annotated them.
|
|
121
|
+
|
|
111
122
|
Derive the scheme from the exported JSONL:
|
|
112
123
|
- **Labels and order:** the labels used in the data, most frequent first.
|
|
113
124
|
- **`description`:** what the accepted spans or texts of each label have in common,
|
|
114
125
|
written as a rule, not a summary of the data.
|
|
115
126
|
- **`do_not_mark`:** the near misses. In binary (accept/reject) datasets, rejected
|
|
116
127
|
suggestions are near misses. In manual datasets, look for the same kind of phrase
|
|
117
|
-
annotated inconsistently,
|
|
118
|
-
|
|
128
|
+
annotated inconsistently, rows with `extras.flagged` set, and texts that got
|
|
129
|
+
different answers or annotations (rows sharing the same `input_hash`).
|
|
119
130
|
- **`examples`:** one clear positive and one boundary case per label, copied from
|
|
120
|
-
accepted answers.
|
|
131
|
+
accepted answers. The spans in `user_anns.spans` already have `"start"` and `"end"`: keep them when
|
|
121
132
|
the span text appears more than once in the example, and drop `token_start`,
|
|
122
133
|
`token_end` and the other keys. Skip `"ignore"`d answers, and rejected answers in
|
|
123
134
|
manual datasets, which mean the whole example was bad.
|
|
@@ -44,7 +44,6 @@ bound at session time.
|
|
|
44
44
|
| Field | Value |
|
|
45
45
|
|---|---|
|
|
46
46
|
| **Request ID** | `<id from tool result>` |
|
|
47
|
-
| **Project** | <project name> |
|
|
48
47
|
| **Status** | planned |
|
|
49
48
|
| **Description** | <description> |
|
|
50
49
|
|
|
@@ -53,3 +52,10 @@ bound at session time.
|
|
|
53
52
|
|
|
54
53
|
Briefly explain what the task covers — enough for the user to understand,
|
|
55
54
|
not a full implementation plan.
|
|
55
|
+
|
|
56
|
+
## Later: checking status
|
|
57
|
+
|
|
58
|
+
When the user asks how a handoff went, call `todo_list()` (scoped to this
|
|
59
|
+
conversation). With more than one result, let the user pick via `AskUserQuestion`,
|
|
60
|
+
using each todo's description as the label. Then `todo_read(id=...)` returns its
|
|
61
|
+
status and the resolution the coding agent wrote.
|
{ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md
RENAMED
|
@@ -55,7 +55,8 @@ If there are multiple plausible jobs, use `AskUserQuestion` to let the user choo
|
|
|
55
55
|
|
|
56
56
|
Read:
|
|
57
57
|
- `${CLAUDE_SKILL_DIR}/references/training_monitoring.md`
|
|
58
|
-
- `${CLAUDE_SKILL_DIR}/../ellf-train/references/
|
|
58
|
+
- `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` when an alert needs a root cause
|
|
59
|
+
|
|
59
60
|
Use cluster calls such as:
|
|
60
61
|
```text
|
|
61
62
|
mcp__cluster__job_status(id="<id>")
|
|
@@ -79,9 +80,9 @@ Use cluster calls for job status and per-dataset counts; use PAM for dataset
|
|
|
79
80
|
discovery:
|
|
80
81
|
```text
|
|
81
82
|
mcp__cluster__job_status(id="<id>")
|
|
82
|
-
mcp__pam__dataset_list(
|
|
83
|
-
mcp__cluster__dataset_example_count(name="<name>") #
|
|
84
|
-
mcp__cluster__dataset_session_counts(name="<name>") #
|
|
83
|
+
mcp__pam__dataset_list() # discover datasets (org-wide), then pick the one you need by name
|
|
84
|
+
mcp__cluster__dataset_example_count(name="<name>") # {active, annotated, used, legacy} (per-cluster, via broker)
|
|
85
|
+
mcp__cluster__dataset_session_counts(name="<name>") # {counts: {<session>: {annotated, active, used}}, removed: [...]}
|
|
85
86
|
```
|
|
86
87
|
|
|
87
88
|
`dataset_list` is a PAM read (org-wide registry), while the count tools talk to
|
|
@@ -95,7 +96,8 @@ Read when needed:
|
|
|
95
96
|
Report:
|
|
96
97
|
- task state
|
|
97
98
|
- whether the task appears reachable and healthy
|
|
98
|
-
- annotation count (from `dataset_example_count`
|
|
99
|
+
- annotation count (from `dataset_example_count`: `active` for the dataset's size,
|
|
100
|
+
`annotated` for the work done)
|
|
99
101
|
- per-annotator activity (from `dataset_session_counts`) when the user asks
|
|
100
102
|
who annotated what or about active annotators
|
|
101
103
|
- dataset growth
|
|
@@ -201,4 +203,4 @@ When you finish, state:
|
|
|
201
203
|
|------|---------------|--------------|
|
|
202
204
|
| `${CLAUDE_SKILL_DIR}/references/training_monitoring.md` | Training log interpretation, alert classification, metric extraction | Training actions |
|
|
203
205
|
| `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md` | Annotation progress signals, dataset growth, annotator activity | Annotation tasks |
|
|
204
|
-
| `${CLAUDE_SKILL_DIR}/../ellf-train
|
|
206
|
+
| `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
|
ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Annotation Metrics
|
|
2
|
+
|
|
3
|
+
Use this reference to interpret annotation activity and quality signals.
|
|
4
|
+
|
|
5
|
+
## What to watch
|
|
6
|
+
|
|
7
|
+
- Annotation count — from `mcp__cluster__dataset_example_count`: `active` is what the
|
|
8
|
+
dataset holds now (its size), `annotated` is all the work done, including versions
|
|
9
|
+
later edited over or removed. `legacy` > 0 means examples from before structured
|
|
10
|
+
storage that the counts leave out until the dataset is migrated.
|
|
11
|
+
- Dataset growth over time — compare counts across checks
|
|
12
|
+
- Who annotated what — from `mcp__cluster__dataset_session_counts`. Each key in
|
|
13
|
+
`counts` is a session dataset: `{dataset}-{task}-{user}` for an annotator's work on a
|
|
14
|
+
task, plus `-{session}` keys for single sittings. Each has `annotated`, `active` and
|
|
15
|
+
`used` (active and not ignored). The ids are user ids for people and agent ids for
|
|
16
|
+
agents (resolve them with `users_list` / `agent_list`). An annotator's figures and their sittings' overlap,
|
|
17
|
+
so count annotators from the `{dataset}-{task}-{user}` keys only and never add the
|
|
18
|
+
two kinds up. `removed` lists sittings removed from the dataset. Examples written
|
|
19
|
+
directly (e.g. via `db-in`) are in no session.
|
|
20
|
+
- Whether a running task is producing new examples — combine job status with
|
|
21
|
+
example count over time
|
|
22
|
+
|
|
23
|
+
## Warning signals
|
|
24
|
+
|
|
25
|
+
- Very fast growth can indicate careless annotation
|
|
26
|
+
- Very slow or flat growth can indicate task reachability or assignment problems
|
|
27
|
+
- Frequent agent errors with no dataset growth usually mean the agent is failing to annotate
|
|
28
|
+
- Repeated pauses or restarts may indicate an unstable launch or worker issue
|
|
29
|
+
|
|
30
|
+
## Interpretation rules
|
|
31
|
+
|
|
32
|
+
- Do not infer annotation quality from counts alone
|
|
33
|
+
- Use counts and status to describe activity, not to prove correctness
|
|
34
|
+
- If progress is suspicious, recommend operational checks first, then methodology review if needed
|
{ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md
RENAMED
|
@@ -91,10 +91,16 @@ Use it when available because it keeps raw logs out of context and produces stru
|
|
|
91
91
|
|
|
92
92
|
If needed, supplement with:
|
|
93
93
|
```bash
|
|
94
|
-
ellf actions
|
|
94
|
+
ellf actions logs "<name>" --show-errors --json # state + structured errors
|
|
95
95
|
ellf actions logs "<name>"
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
+
`info --json` has no state field; take state from `logs --show-errors --json`
|
|
99
|
+
(`pending`, `running`, `ready`, `succeeded`, `failed`, `stopped`, `cancelled`,
|
|
100
|
+
`not_found`, or `unknown` when the cluster can't be reached) or from the `state`
|
|
101
|
+
column of `ellf actions list --json`. For a job that was created with `--no-start` and
|
|
102
|
+
never started, `logs` fails; use `list --json` instead.
|
|
103
|
+
|
|
98
104
|
For local runs, inspect:
|
|
99
105
|
- `job_status.json`
|
|
100
106
|
- `training_log.jsonl`
|
|
@@ -111,10 +117,20 @@ Report:
|
|
|
111
117
|
|
|
112
118
|
Use:
|
|
113
119
|
```bash
|
|
114
|
-
ellf tasks
|
|
115
|
-
ellf tasks
|
|
120
|
+
ellf tasks logs "<name>" --show-errors --json # state + structured errors
|
|
121
|
+
ellf tasks info "<name>" --json # url + stats (annotations, annotators, sessions)
|
|
122
|
+
ellf tasks logs "<name>" [--query "<text>"] # --query filters lines (needs Loki on the cluster)
|
|
123
|
+
ellf sessions list "<name>" --json # per session: annotator, annotated, active, status
|
|
116
124
|
```
|
|
117
125
|
|
|
126
|
+
`sessions list` answers "who annotated how much": `annotated` is the work done,
|
|
127
|
+
`active` how much of it the dataset still holds, and `status` shows excluded
|
|
128
|
+
sessions. Excluding or re-activating one is an operation: route it to `/ellf-ops`.
|
|
129
|
+
|
|
130
|
+
Don't use `ellf tasks questions` to peek at a live task: it reserves that batch for the
|
|
131
|
+
CLI's session, so annotators won't get those questions until they're answered or
|
|
132
|
+
stolen by another session.
|
|
133
|
+
|
|
118
134
|
To check the linked dataset and confirm the output target:
|
|
119
135
|
```bash
|
|
120
136
|
ellf datasets info "<dataset_name>" --json
|
|
@@ -133,7 +149,7 @@ Report:
|
|
|
133
149
|
|
|
134
150
|
Use:
|
|
135
151
|
```bash
|
|
136
|
-
ellf agents
|
|
152
|
+
ellf agents logs "<name>" --show-errors --json # state + structured errors
|
|
137
153
|
ellf agents logs "<name>"
|
|
138
154
|
```
|
|
139
155
|
|
|
@@ -154,11 +170,21 @@ If a Hugging Face agent stopped soon after starting, its log's last error says w
|
|
|
154
170
|
provider is left to automatic routing: store an HF token, or name the provider the
|
|
155
171
|
key belongs to.
|
|
156
172
|
|
|
173
|
+
## Orphaned workloads
|
|
174
|
+
|
|
175
|
+
If the cluster seems busy or a job won't go away, list what's actually running:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
ellf jobs list --unmatched --json # workloads with no matching task/action/agent/service in Ellf
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Stopping one (`ellf jobs stop <job_id>`) is an operation: route it to `/ellf-ops`.
|
|
182
|
+
|
|
157
183
|
## Generic actions
|
|
158
184
|
|
|
159
185
|
Use:
|
|
160
186
|
```bash
|
|
161
|
-
ellf actions
|
|
187
|
+
ellf actions logs "<name>" --show-errors --json # state + structured errors
|
|
162
188
|
ellf actions logs "<name>"
|
|
163
189
|
```
|
|
164
190
|
|
|
@@ -247,5 +273,5 @@ When you finish, state:
|
|
|
247
273
|
|------|---------------|--------------|
|
|
248
274
|
| `${CLAUDE_SKILL_DIR}/references/training_monitoring.md` | Training log interpretation, alert classification, metric extraction | Training actions |
|
|
249
275
|
| `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md` | Annotation progress signals, dataset growth, annotator activity | Annotation tasks |
|
|
250
|
-
| `${CLAUDE_SKILL_DIR}/../ellf-train
|
|
251
|
-
| `${CLAUDE_SKILL_DIR}/../ellf-train
|
|
276
|
+
| `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
|
|
277
|
+
| `${CLAUDE_SKILL_DIR}/../ellf-train/references/training_troubleshooting.md` | Error taxonomy with concrete fixes | Concrete setup or execution errors |
|
|
@@ -4,7 +4,7 @@ How to monitor training jobs, interpret alerts, and diagnose problems.
|
|
|
4
4
|
|
|
5
5
|
## The check script
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This skill includes `scripts/check_training.py` — it reads local
|
|
8
8
|
logs or cluster status and produces a structured JSON summary.
|
|
9
9
|
|
|
10
10
|
```bash
|
|
@@ -18,7 +18,7 @@ python ${CLAUDE_SKILL_DIR}/scripts/check_training.py --mode cluster --job-name n
|
|
|
18
18
|
Output shape:
|
|
19
19
|
```json
|
|
20
20
|
{
|
|
21
|
-
"state": "running|completed|failed",
|
|
21
|
+
"state": "running|completed|failed|stopped|cancelled|pending|ready|not_found|unknown",
|
|
22
22
|
"step": 800,
|
|
23
23
|
"train_loss": 0.52,
|
|
24
24
|
"dev_scores": {"ents_f": 0.79, "ents_p": 0.82, "ents_r": 0.76},
|
|
@@ -37,6 +37,12 @@ Output shape:
|
|
|
37
37
|
| `plateau` | 8+ evals without score improvement | Present analysis | Yes |
|
|
38
38
|
| `overfitting` | Dev score declining while train loss improves | Show best checkpoint info | Yes |
|
|
39
39
|
| `completed` | Training finished normally | Report completion and results | No |
|
|
40
|
+
| `stopped` / `cancelled` | Cluster job was stopped or cancelled before finishing | Report it; ask whether it was intended | Yes |
|
|
41
|
+
|
|
42
|
+
`nan_loss`, `loss_spike`, `plateau` and `overfitting` come from the local
|
|
43
|
+
`training_log.jsonl` (ellf_logger). Cluster `train` has no such log, so cluster runs only
|
|
44
|
+
get the state alerts (`failed`, `stopped`, `cancelled`, `completed`); the step and best
|
|
45
|
+
score come from the last 200 lines of the job log.
|
|
40
46
|
|
|
41
47
|
## Diagnostics
|
|
42
48
|
|