ellf-cli 19.0.0__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.
Files changed (374) hide show
  1. {ellf_cli-19.0.0/ellf_cli.egg-info → ellf_cli-19.0.3}/PKG-INFO +1 -1
  2. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/README.md +8 -8
  3. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/datasets.py +3 -0
  4. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/sessions.py +20 -17
  5. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf.json +14 -14
  6. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +1 -1
  7. {ellf_cli-19.0.0/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
  8. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +5 -0
  9. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/label_schemes.md +13 -3
  10. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +1 -1
  11. {ellf_cli-19.0.0/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
  12. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +5 -0
  13. {ellf_cli-19.0.0/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
  14. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +2 -1
  15. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +4 -2
  16. {ellf_cli-19.0.0/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
  17. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/label_schemes.md +13 -3
  18. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +6 -4
  19. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +4 -2
  20. {ellf_cli-19.0.0/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
  21. {ellf_cli-19.0.0/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
  22. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +6 -4
  23. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/messages.py +3 -2
  24. 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
  25. 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
  26. 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
  27. {ellf_cli-19.0.0 → ellf_cli-19.0.3/ellf_cli.egg-info}/PKG-INFO +1 -1
  28. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/SOURCES.txt +4 -0
  29. ellf_cli-19.0.3/tests/test_datasets_export.py +42 -0
  30. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_sessions.py +9 -8
  31. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/LICENSE +0 -0
  32. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/MANIFEST.in +0 -0
  33. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/__init__.py +0 -0
  34. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/__main__.py +0 -0
  35. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/about.json +0 -0
  36. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/about.py +0 -0
  37. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/appdirs.py +0 -0
  38. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/auth.py +0 -0
  39. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/cli.py +0 -0
  40. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/cloud/__init__.py +0 -0
  41. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/cloud/gcp.py +0 -0
  42. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/cluster_config.py +0 -0
  43. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/__init__.py +0 -0
  44. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_cluster_select.py +0 -0
  45. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_org_select.py +0 -0
  46. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_project_scope.py +0 -0
  47. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_file.py +0 -0
  48. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_subcommand.py +0 -0
  49. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_state.py +0 -0
  50. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/_usage.py +0 -0
  51. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/actions.py +0 -0
  52. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/agents.py +0 -0
  53. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/assets.py +0 -0
  54. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/auth.py +0 -0
  55. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/clusters.py +0 -0
  56. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/config.py +0 -0
  57. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/__init__.py +0 -0
  58. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/cp.py +0 -0
  59. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/ls.py +0 -0
  60. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/rm.py +0 -0
  61. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/rsync.py +0 -0
  62. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/files/stats.py +0 -0
  63. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/general.py +0 -0
  64. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/import_export.py +0 -0
  65. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/__init__.py +0 -0
  66. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_config_io.py +0 -0
  67. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_helpers.py +0 -0
  68. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/configure.py +0 -0
  69. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/deploy.py +0 -0
  70. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init.py +0 -0
  71. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init_values.py +0 -0
  72. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/provision.py +0 -0
  73. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/register.py +0 -0
  74. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/setup.py +0 -0
  75. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/start.py +0 -0
  76. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/terraform.py +0 -0
  77. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/infra/tls.py +0 -0
  78. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/jobs.py +0 -0
  79. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/packages.py +0 -0
  80. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/paths.py +0 -0
  81. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/plans.py +0 -0
  82. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/projects.py +0 -0
  83. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/publish_code.py +0 -0
  84. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/publish_data.py +0 -0
  85. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/recipes.py +0 -0
  86. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/secrets.py +0 -0
  87. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/services.py +0 -0
  88. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/support.py +0 -0
  89. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/tasks.py +0 -0
  90. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/todos.py +0 -0
  91. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/commands/users.py +0 -0
  92. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/config.py +0 -0
  93. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
  94. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.gitignore +0 -0
  95. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skill_variants.json +0 -0
  96. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
  97. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
  98. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
  99. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
  100. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
  101. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
  102. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
  103. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
  104. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
  105. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
  106. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
  107. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
  108. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
  109. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
  110. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
  111. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
  112. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
  113. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
  114. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
  115. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
  116. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
  117. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
  118. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
  119. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
  120. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
  121. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
  122. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
  123. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
  124. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
  125. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
  126. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
  127. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
  128. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
  129. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
  130. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
  131. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
  132. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
  133. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
  134. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
  135. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
  136. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
  137. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
  138. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
  139. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
  140. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
  141. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
  142. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
  143. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
  144. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
  145. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
  146. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
  147. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
  148. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
  149. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
  150. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/errors.py +0 -0
  151. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/helm.py +0 -0
  152. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/interactivity.py +0 -0
  153. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/key_pair.py +0 -0
  154. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/main.py +0 -0
  155. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/pypi_auth.py +0 -0
  156. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/query.py +0 -0
  157. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
  158. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
  159. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
  160. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
  161. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
  162. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
  163. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
  164. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
  165. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
  166. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
  167. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/testing/__init__.py +0 -0
  168. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ty.py +0 -0
  169. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/ui.py +0 -0
  170. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/url.py +0 -0
  171. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/util.py +0 -0
  172. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
  173. {ellf_cli-19.0.0 → 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
  174. {ellf_cli-19.0.0 → 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
  175. {ellf_cli-19.0.0 → 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
  176. {ellf_cli-19.0.0 → 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
  177. {ellf_cli-19.0.0 → 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
  178. {ellf_cli-19.0.0 → 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
  179. {ellf_cli-19.0.0 → 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
  180. {ellf_cli-19.0.0 → 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
  181. {ellf_cli-19.0.0 → 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
  182. {ellf_cli-19.0.0 → 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
  183. {ellf_cli-19.0.0 → 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
  184. {ellf_cli-19.0.0 → 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
  185. {ellf_cli-19.0.0 → 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
  186. {ellf_cli-19.0.0 → 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
  187. {ellf_cli-19.0.0 → 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
  188. {ellf_cli-19.0.0 → 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
  189. {ellf_cli-19.0.0 → 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
  190. {ellf_cli-19.0.0 → 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
  191. {ellf_cli-19.0.0 → 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
  192. {ellf_cli-19.0.0 → 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
  193. {ellf_cli-19.0.0 → 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
  194. {ellf_cli-19.0.0 → 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
  195. {ellf_cli-19.0.0 → 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
  196. {ellf_cli-19.0.0 → 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
  197. {ellf_cli-19.0.0 → 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
  198. {ellf_cli-19.0.0 → 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
  199. {ellf_cli-19.0.0 → 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
  200. {ellf_cli-19.0.0 → 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
  201. {ellf_cli-19.0.0 → 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
  202. {ellf_cli-19.0.0 → 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
  203. {ellf_cli-19.0.0 → 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
  204. {ellf_cli-19.0.0 → 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
  205. {ellf_cli-19.0.0 → 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
  206. {ellf_cli-19.0.0 → 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
  207. {ellf_cli-19.0.0 → 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
  208. {ellf_cli-19.0.0 → 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
  209. {ellf_cli-19.0.0 → 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
  210. {ellf_cli-19.0.0 → 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
  211. {ellf_cli-19.0.0 → 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
  212. {ellf_cli-19.0.0 → 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
  213. {ellf_cli-19.0.0 → 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
  214. {ellf_cli-19.0.0 → 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
  215. {ellf_cli-19.0.0 → 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
  216. {ellf_cli-19.0.0 → 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
  217. {ellf_cli-19.0.0 → 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
  218. {ellf_cli-19.0.0 → 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
  219. {ellf_cli-19.0.0 → 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
  220. {ellf_cli-19.0.0 → 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
  221. {ellf_cli-19.0.0 → 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
  222. {ellf_cli-19.0.0 → 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
  223. {ellf_cli-19.0.0 → 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
  224. {ellf_cli-19.0.0 → 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
  225. {ellf_cli-19.0.0 → 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
  226. {ellf_cli-19.0.0 → 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
  227. {ellf_cli-19.0.0 → 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
  228. {ellf_cli-19.0.0 → 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
  229. {ellf_cli-19.0.0 → 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
  230. {ellf_cli-19.0.0 → 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
  231. {ellf_cli-19.0.0 → 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
  232. {ellf_cli-19.0.0 → 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
  233. {ellf_cli-19.0.0 → 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
  234. {ellf_cli-19.0.0 → 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
  235. {ellf_cli-19.0.0 → 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
  236. {ellf_cli-19.0.0 → 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
  237. {ellf_cli-19.0.0 → 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
  238. {ellf_cli-19.0.0 → 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
  239. {ellf_cli-19.0.0 → 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
  240. {ellf_cli-19.0.0 → 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
  241. {ellf_cli-19.0.0 → 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
  242. {ellf_cli-19.0.0 → 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
  243. {ellf_cli-19.0.0 → 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
  244. {ellf_cli-19.0.0 → 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
  245. {ellf_cli-19.0.0 → 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
  246. {ellf_cli-19.0.0 → 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
  247. {ellf_cli-19.0.0 → 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
  248. {ellf_cli-19.0.0 → 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
  249. {ellf_cli-19.0.0 → 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
  250. {ellf_cli-19.0.0 → 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
  251. {ellf_cli-19.0.0 → 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
  252. {ellf_cli-19.0.0 → 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
  253. {ellf_cli-19.0.0 → 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
  254. {ellf_cli-19.0.0 → 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
  255. {ellf_cli-19.0.0 → 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
  256. {ellf_cli-19.0.0 → 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
  257. {ellf_cli-19.0.0 → 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
  258. {ellf_cli-19.0.0 → 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
  259. {ellf_cli-19.0.0 → 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
  260. {ellf_cli-19.0.0 → 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
  261. {ellf_cli-19.0.0 → 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
  262. {ellf_cli-19.0.0 → 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
  263. {ellf_cli-19.0.0 → 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
  264. {ellf_cli-19.0.0 → 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
  265. {ellf_cli-19.0.0 → 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
  266. {ellf_cli-19.0.0 → 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
  267. {ellf_cli-19.0.0 → 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
  268. {ellf_cli-19.0.0 → 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
  269. {ellf_cli-19.0.0 → 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
  270. {ellf_cli-19.0.0 → 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
  271. {ellf_cli-19.0.0 → 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
  272. {ellf_cli-19.0.0 → 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
  273. {ellf_cli-19.0.0 → 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
  274. {ellf_cli-19.0.0 → 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
  275. {ellf_cli-19.0.0 → 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
  276. {ellf_cli-19.0.0 → 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
  277. {ellf_cli-19.0.0 → 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
  278. {ellf_cli-19.0.0 → 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
  279. {ellf_cli-19.0.0 → 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
  280. {ellf_cli-19.0.0 → 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
  281. {ellf_cli-19.0.0 → 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
  282. {ellf_cli-19.0.0 → 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
  283. {ellf_cli-19.0.0 → 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
  284. {ellf_cli-19.0.0 → 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
  285. {ellf_cli-19.0.0 → 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
  286. {ellf_cli-19.0.0 → 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
  287. {ellf_cli-19.0.0 → 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
  288. {ellf_cli-19.0.0 → 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
  289. {ellf_cli-19.0.0 → 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
  290. {ellf_cli-19.0.0 → 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
  291. {ellf_cli-19.0.0 → 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
  292. {ellf_cli-19.0.0 → 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
  293. {ellf_cli-19.0.0 → 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
  294. {ellf_cli-19.0.0 → 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
  295. {ellf_cli-19.0.0 → 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
  296. {ellf_cli-19.0.0 → 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
  297. {ellf_cli-19.0.0 → 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
  298. {ellf_cli-19.0.0 → 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
  299. {ellf_cli-19.0.0 → 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
  300. {ellf_cli-19.0.0 → 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
  301. {ellf_cli-19.0.0 → 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
  302. {ellf_cli-19.0.0 → 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
  303. {ellf_cli-19.0.0 → 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
  304. {ellf_cli-19.0.0 → 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
  305. {ellf_cli-19.0.0 → 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
  306. {ellf_cli-19.0.0 → 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
  307. {ellf_cli-19.0.0 → 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
  308. {ellf_cli-19.0.0 → 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
  309. {ellf_cli-19.0.0 → 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
  310. {ellf_cli-19.0.0 → 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
  311. {ellf_cli-19.0.0 → 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
  312. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
  313. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/version/__init__.py +0 -0
  314. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli/version/read_version.py +0 -0
  315. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/dependency_links.txt +0 -0
  316. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/entry_points.txt +0 -0
  317. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/not-zip-safe +0 -0
  318. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/requires.txt +0 -0
  319. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/ellf_cli.egg-info/top_level.txt +0 -0
  320. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/pyproject.toml +0 -0
  321. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/setup.cfg +0 -0
  322. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/setup.py +0 -0
  323. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_agents_info_stats.py +0 -0
  324. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_appdirs.py +0 -0
  325. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_auth.py +0 -0
  326. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_clusters_info_stats.py +0 -0
  327. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_config.py +0 -0
  328. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_errors.py +0 -0
  329. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_files_cp.py +0 -0
  330. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_files_cp_helpers.py +0 -0
  331. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_helm.py +0 -0
  332. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_import_export.py +0 -0
  333. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_info.py +0 -0
  334. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_config_io.py +0 -0
  335. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_configure.py +0 -0
  336. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_deploy_node_labels.py +0 -0
  337. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_get_terraform.py +0 -0
  338. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_init.py +0 -0
  339. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_provision.py +0 -0
  340. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_start_fixes.py +0 -0
  341. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_start_validation.py +0 -0
  342. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_state_bucket.py +0 -0
  343. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_infra_terraform_init.py +0 -0
  344. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_invalid_secrets.py +0 -0
  345. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_job_list_project_filter.py +0 -0
  346. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_jobs_info_hides_creator.py +0 -0
  347. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_jobs_list_unmatched.py +0 -0
  348. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_key_pair.py +0 -0
  349. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_login.py +0 -0
  350. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_logout.py +0 -0
  351. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_main.py +0 -0
  352. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_org_select.py +0 -0
  353. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_plans.py +0 -0
  354. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_projects.py +0 -0
  355. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_projects_delete_confirm.py +0 -0
  356. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_publish_build_poll.py +0 -0
  357. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_publish_data.py +0 -0
  358. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_publish_import_root.py +0 -0
  359. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_publish_requirements.py +0 -0
  360. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_pypi_auth.py +0 -0
  361. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_query.py +0 -0
  362. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_recipe_file.py +0 -0
  363. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_recipes.py +0 -0
  364. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_state.py +0 -0
  365. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_support.py +0 -0
  366. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_todos.py +0 -0
  367. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_ty.py +0 -0
  368. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_ui.py +0 -0
  369. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_ui_extras.py +0 -0
  370. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_usage_counts.py +0 -0
  371. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_users_assign.py +0 -0
  372. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_users_info_stats.py +0 -0
  373. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_users_list.py +0 -0
  374. {ellf_cli-19.0.0 → ellf_cli-19.0.3}/tests/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ellf-cli
3
- Version: 19.0.0
3
+ Version: 19.0.3
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -1307,23 +1307,23 @@ Mint a fresh 90-day token for an existing service. Issuing a new token does not
1307
1307
 
1308
1308
  ### `ellf sessions`
1309
1309
 
1310
- View, disable and activate a task's annotation sessions
1310
+ View, exclude and activate a task's annotation sessions
1311
1311
 
1312
1312
  #### `ellf sessions list`
1313
1313
 
1314
- List a task's annotation sessions, with how much each annotated and whether it was disabled
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
1315
1315
 
1316
1316
  | Argument | Type | Description | Default |
1317
1317
  | --- | --- | --- | --- |
1318
1318
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
1319
1319
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
1320
1320
  | `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1321
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotations', 'status'] | `['id', 'annotator', 'started', 'annotations', 'status']` |
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']` |
1322
1322
  | `--json` | `bool` | Output the result as JSON | `False` |
1323
1323
 
1324
- #### `ellf sessions disable`
1324
+ #### `ellf sessions exclude`
1325
1325
 
1326
- Disable 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
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
1327
1327
 
1328
1328
  | Argument | Type | Description | Default |
1329
1329
  | --- | --- | --- | --- |
@@ -1332,7 +1332,7 @@ Disable an annotation session: take its examples out of the task's dataset, so t
1332
1332
 
1333
1333
  #### `ellf sessions activate`
1334
1334
 
1335
- Activate a disabled annotation session: put its examples back into the task's dataset
1335
+ Activate an excluded annotation session: put its examples back into the task's dataset
1336
1336
 
1337
1337
  | Argument | Type | Description | Default |
1338
1338
  | --- | --- | --- | --- |
@@ -1383,7 +1383,7 @@ List the tasks in a project. Uses your default project unless --project is given
1383
1383
  | Argument | Type | Description | Default |
1384
1384
  | --- | --- | --- | --- |
1385
1385
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
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', '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']` |
1387
1387
  | `--json` | `bool` | Output the result as JSON | `False` |
1388
1388
 
1389
1389
  #### `ellf tasks info`
@@ -1395,7 +1395,7 @@ Print information about a task on the cluster
1395
1395
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
1396
1396
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
1397
1397
  | `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `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', '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` |
1399
1399
  | `--json` | `bool` | Output the result as JSON | `False` |
1400
1400
 
1401
1401
  #### `ellf tasks logs`
@@ -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(
@@ -2,7 +2,7 @@
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}``. Disabling a session
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
7
  session dataset.
8
8
  """
@@ -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", "annotations", "status"]
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 and
49
- whether it was disabled"""
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
- "annotations": (summary.counts or {}).get(name, 0),
64
- "status": "disabled" if name in removed else "active",
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 _set_session_disabled(
72
- session_id: UUID, disabled: bool, as_json: bool
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 disabled
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 disabled else Messages.T073
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
- "disable",
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 disable(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
101
- """Disable an annotation session: take its examples out of the task's
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 _set_session_disabled(session_id, True, as_json)
107
+ return _set_session_excluded(session_id, True, as_json)
105
108
 
106
109
 
107
110
  @cli.subcommand(
@@ -111,6 +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 a disabled annotation session: put its examples back into the
115
- task's dataset"""
116
- return _set_session_disabled(session_id, 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": "19.0.0",
4
+ "version": "19.0.3",
5
5
  "extra_key": "_extra",
6
6
  "commands": {
7
7
  "actions": {
@@ -159,7 +159,7 @@
159
159
  "sessions": {
160
160
  "name": "sessions",
161
161
  "args": [],
162
- "description": "View, disable and activate a task's annotation sessions",
162
+ "description": "View, exclude and activate a task's annotation sessions",
163
163
  "allow_extra": false,
164
164
  "parent": null,
165
165
  "is_placeholder": true
@@ -7459,9 +7459,9 @@
7459
7459
  "id": "select",
7460
7460
  "option": "--select",
7461
7461
  "short": null,
7462
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotations', 'status']",
7463
- "default": "['id', 'annotator', 'started', 'annotations', 'status']",
7464
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotations', 'status'] (list[str])",
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])",
7465
7465
  "action": null,
7466
7466
  "choices": null,
7467
7467
  "has_converter": true,
@@ -7482,13 +7482,13 @@
7482
7482
  "orig_type": "bool"
7483
7483
  }
7484
7484
  ],
7485
- "description": "List a task's annotation sessions, with how much each annotated and\nwhether it was disabled",
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",
7486
7486
  "allow_extra": false,
7487
7487
  "parent": "sessions",
7488
7488
  "is_placeholder": false
7489
7489
  },
7490
- "disable": {
7491
- "name": "disable",
7490
+ "exclude": {
7491
+ "name": "exclude",
7492
7492
  "args": [
7493
7493
  {
7494
7494
  "id": "session_id",
@@ -7517,7 +7517,7 @@
7517
7517
  "orig_type": "bool"
7518
7518
  }
7519
7519
  ],
7520
- "description": "Disable 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",
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",
7521
7521
  "allow_extra": false,
7522
7522
  "parent": "sessions",
7523
7523
  "is_placeholder": false
@@ -7552,7 +7552,7 @@
7552
7552
  "orig_type": "bool"
7553
7553
  }
7554
7554
  ],
7555
- "description": "Activate a disabled annotation session: put its examples back into the\ntask's dataset",
7555
+ "description": "Activate an excluded annotation session: put its examples back into\nthe task's dataset",
7556
7556
  "allow_extra": false,
7557
7557
  "parent": "sessions",
7558
7558
  "is_placeholder": false
@@ -7797,9 +7797,9 @@
7797
7797
  "id": "select",
7798
7798
  "option": "--select",
7799
7799
  "short": null,
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', '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']",
7801
7801
  "default": "['id', 'name', 'state']",
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', '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])",
7803
7803
  "action": null,
7804
7804
  "choices": null,
7805
7805
  "has_converter": true,
@@ -7871,9 +7871,9 @@
7871
7871
  "id": "select",
7872
7872
  "option": "--select",
7873
7873
  "short": null,
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', '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']",
7875
7875
  "default": null,
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', '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])",
7877
7877
  "action": null,
7878
7878
  "choices": null,
7879
7879
  "has_converter": true,
@@ -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. If a label
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 take either a typed list
93
- of labels (`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
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
@@ -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. If a label
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 take either a typed list
126
- of labels (`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
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). A label scheme is checked when a task or agent loads it, so
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
@@ -373,10 +373,12 @@ especially the annotation readiness checklist at the end of that section.
373
373
  - Review the user's proposed labels (or propose your own) against the factoring
374
374
  principle and schema design principles from the strategy reference. Challenge
375
375
  labels that mix business logic with language understanding.
376
- - Once the labels are settled, write them down as a label scheme: a `labels` JSON
376
+ - Once the labels are settled, and the task will use the built-in `ner`, `spans` or
377
+ `textcat` recipe (or a custom recipe that takes a scheme), write them down as a label scheme: a `labels` JSON
377
378
  file with a description, `do_not_mark` look-alikes and a few boundary examples per
378
379
  label (format and design advice in `${CLAUDE_SKILL_DIR}/references/label_schemes.md`).
379
- Check for an existing `labels` asset first. The scheme is a plan deliverable: tasks
380
+ Check for an existing `labels` asset first. No other built-in recipe takes a scheme:
381
+ for those, the definitions go into the annotation guidelines instead. The scheme is a plan deliverable: tasks
380
382
  take it as their labels, annotators see the descriptions, and the LLM agents get
381
383
  the definitions in every prompt. The user uploads it on the cluster's Assets page as kind `labels`, or
382
384
  hand publishing off with `/ellf-handoff`.
@@ -297,9 +297,10 @@ Use this to sanity-check an annotation plan before committing to it:
297
297
  - Is training happening early, with diagnostics (train-curve) to validate
298
298
  whether more data of the same kind will help?
299
299
  - Has a pilot project been conducted and edge cases documented before scaling?
300
- - Are the labels written down as a label scheme (a `labels` asset with a
301
- description, look-alikes not to mark and boundary examples per label), so
302
- tasks, annotators and agents share one definition of each label?
300
+ - Are the labels written down with a description, look-alikes not to mark and
301
+ boundary examples per label, so annotators and agents share one definition of
302
+ each label? As a label scheme (a `labels` asset) for `ner`, `spans` and
303
+ `textcat` tasks, which take one, and in the annotation guidelines otherwise.
303
304
 
304
305
  ---
305
306
 
@@ -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 take either a typed list
93
- of labels (`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
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
@@ -74,12 +74,14 @@ The LLM agents include the task's annotation instructions in their prompts by de
74
74
  so plan the guidelines as a Markdown `instructions` asset on the task: the same
75
75
  document serves annotators and agents, and an agent can add its own on top.
76
76
 
77
- They also annotate with the task's labels and use the task's label definitions. Plan
78
- the labels as a label scheme (a `labels` asset, see `label_schemes.md`) used by the
79
- task: every prompt then includes each label's description, what not to mark and the
77
+ They also annotate with the task's labels and use the task's label definitions. If the
78
+ task runs the built-in `ner`, `spans` or `textcat` recipe (the only built-ins that take
79
+ one), plan the labels as a label scheme (a `labels` asset, see `label_schemes.md`) used
80
+ by the task: every prompt then includes each label's description, what not to mark and the
80
81
  examples that fit the task type. An agent can add its own scheme on top, whose
81
82
  definitions replace the task's for the labels it defines, e.g. to correct a label the
82
83
  model keeps confusing without changing what annotators see. `hf_model_agent` doesn't
83
- use label definitions.
84
+ use label definitions. Tasks on any other recipe can't take a scheme: put the label
85
+ definitions in the instructions instead.
84
86
 
85
87
  The plan implications above apply to all of them.
@@ -388,10 +388,12 @@ especially the annotation readiness checklist at the end of that section.
388
388
  - Review the user's proposed labels (or propose your own) against the factoring
389
389
  principle and schema design principles from the strategy reference. Challenge
390
390
  labels that mix business logic with language understanding.
391
- - Once the labels are settled, write them down as a label scheme: a `labels` JSON
391
+ - Once the labels are settled, and the task will use the built-in `ner`, `spans` or
392
+ `textcat` recipe (or a custom recipe that takes a scheme), write them down as a label scheme: a `labels` JSON
392
393
  file with a description, `do_not_mark` look-alikes and a few boundary examples per
393
394
  label (format and design advice in `${CLAUDE_SKILL_DIR}/references/label_schemes.md`).
394
- Check for an existing `labels` asset first. The scheme is a plan deliverable: tasks
395
+ Check for an existing `labels` asset first. No other built-in recipe takes a scheme:
396
+ for those, the definitions go into the annotation guidelines instead. The scheme is a plan deliverable: tasks
395
397
  take it as their labels, annotators see the descriptions, and the LLM agents get
396
398
  the definitions in every prompt. Publish it with `ellf publish data ... --kind labels` once the user agrees.
397
399
  - Recommend the agile annotation workflow: pilot first, refine schema, train
@@ -297,9 +297,10 @@ Use this to sanity-check an annotation plan before committing to it:
297
297
  - Is training happening early, with diagnostics (train-curve) to validate
298
298
  whether more data of the same kind will help?
299
299
  - Has a pilot project been conducted and edge cases documented before scaling?
300
- - Are the labels written down as a label scheme (a `labels` asset with a
301
- description, look-alikes not to mark and boundary examples per label), so
302
- tasks, annotators and agents share one definition of each label?
300
+ - Are the labels written down with a description, look-alikes not to mark and
301
+ boundary examples per label, so annotators and agents share one definition of
302
+ each label? As a label scheme (a `labels` asset) for `ner`, `spans` and
303
+ `textcat` tasks, which take one, and in the annotation guidelines otherwise.
303
304
 
304
305
  ---
305
306
 
@@ -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 take either a typed list
126
- of labels (`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
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
@@ -74,12 +74,14 @@ The LLM agents include the task's annotation instructions in their prompts by de
74
74
  so plan the guidelines as a Markdown `instructions` asset on the task: the same
75
75
  document serves annotators and agents, and an agent can add its own on top.
76
76
 
77
- They also annotate with the task's labels and use the task's label definitions. Plan
78
- the labels as a label scheme (a `labels` asset, see `label_schemes.md`) used by the
79
- task: every prompt then includes each label's description, what not to mark and the
77
+ They also annotate with the task's labels and use the task's label definitions. If the
78
+ task runs the built-in `ner`, `spans` or `textcat` recipe (the only built-ins that take
79
+ one), plan the labels as a label scheme (a `labels` asset, see `label_schemes.md`) used
80
+ by the task: every prompt then includes each label's description, what not to mark and the
80
81
  examples that fit the task type. An agent can add its own scheme on top, whose
81
82
  definitions replace the task's for the labels it defines, e.g. to correct a label the
82
83
  model keeps confusing without changing what annotators see. `hf_model_agent` doesn't
83
- use label definitions.
84
+ use label definitions. Tasks on any other recipe can't take a scheme: put the label
85
+ definitions in the instructions instead.
84
86
 
85
87
  The plan implications above apply to all of them.