ellf-cli 18.1.1__tar.gz → 19.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. {ellf_cli-18.1.1/ellf_cli.egg-info → ellf_cli-19.0.3}/PKG-INFO +1 -1
  2. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/README.md +8 -32
  3. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cli.py +0 -1
  4. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/datasets.py +3 -0
  5. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/sessions.py +23 -72
  6. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf.json +14 -120
  7. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +1 -1
  8. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.assistant}/references/annotation_audit.md +3 -1
  9. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +5 -0
  10. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/label_schemes.md +13 -3
  11. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +1 -1
  12. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.assistant → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/annotation_audit.md +3 -1
  13. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +5 -0
  14. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/label_schemes.md +13 -3
  15. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +2 -1
  16. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +4 -2
  17. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.assistant}/references/explosion_strategy.md +4 -3
  18. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/label_schemes.md +13 -3
  19. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +6 -4
  20. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +4 -2
  21. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-project.assistant → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/explosion_strategy.md +4 -3
  22. {ellf_cli-18.1.1/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.3/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/label_schemes.md +13 -3
  23. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +6 -4
  24. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/messages.py +3 -7
  25. ellf_cli-19.0.3/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +3 -0
  26. 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
  27. 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
  28. 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
  29. {ellf_cli-18.1.1 → ellf_cli-19.0.3/ellf_cli.egg-info}/PKG-INFO +1 -1
  30. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/SOURCES.txt +5 -0
  31. ellf_cli-19.0.3/tests/test_datasets_export.py +42 -0
  32. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_sessions.py +9 -35
  33. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/LICENSE +0 -0
  34. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/MANIFEST.in +0 -0
  35. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/__init__.py +0 -0
  36. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/__main__.py +0 -0
  37. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/about.json +0 -0
  38. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/about.py +0 -0
  39. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/appdirs.py +0 -0
  40. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/auth.py +0 -0
  41. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cloud/__init__.py +0 -0
  42. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cloud/gcp.py +0 -0
  43. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/cluster_config.py +0 -0
  44. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/__init__.py +0 -0
  45. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_cluster_select.py +0 -0
  46. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_org_select.py +0 -0
  47. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_project_scope.py +0 -0
  48. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_file.py +0 -0
  49. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_recipe_subcommand.py +0 -0
  50. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_state.py +0 -0
  51. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/_usage.py +0 -0
  52. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/actions.py +0 -0
  53. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/agents.py +0 -0
  54. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/assets.py +0 -0
  55. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/auth.py +0 -0
  56. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/clusters.py +0 -0
  57. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/config.py +0 -0
  58. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/__init__.py +0 -0
  59. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/cp.py +0 -0
  60. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/ls.py +0 -0
  61. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/rm.py +0 -0
  62. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/rsync.py +0 -0
  63. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/files/stats.py +0 -0
  64. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/general.py +0 -0
  65. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/import_export.py +0 -0
  66. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/__init__.py +0 -0
  67. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_config_io.py +0 -0
  68. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/_helpers.py +0 -0
  69. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/configure.py +0 -0
  70. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/deploy.py +0 -0
  71. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init.py +0 -0
  72. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/init_values.py +0 -0
  73. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/provision.py +0 -0
  74. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/register.py +0 -0
  75. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/setup.py +0 -0
  76. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/start.py +0 -0
  77. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/terraform.py +0 -0
  78. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/infra/tls.py +0 -0
  79. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/jobs.py +0 -0
  80. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/packages.py +0 -0
  81. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/paths.py +0 -0
  82. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/plans.py +0 -0
  83. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/projects.py +0 -0
  84. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/publish_code.py +0 -0
  85. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/publish_data.py +0 -0
  86. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/recipes.py +0 -0
  87. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/secrets.py +0 -0
  88. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/services.py +0 -0
  89. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/support.py +0 -0
  90. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/tasks.py +0 -0
  91. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/todos.py +0 -0
  92. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/commands/users.py +0 -0
  93. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/config.py +0 -0
  94. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
  95. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/.gitignore +0 -0
  96. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skill_variants.json +0 -0
  97. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
  98. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
  99. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
  100. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
  101. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
  102. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
  103. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
  104. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
  105. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
  106. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
  107. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
  108. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
  109. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
  110. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
  111. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
  112. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
  113. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
  114. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
  115. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
  116. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
  117. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
  118. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
  119. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
  120. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
  121. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
  122. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
  123. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
  124. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
  125. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
  126. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
  127. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
  128. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
  129. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
  130. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
  131. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
  132. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
  133. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
  134. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
  135. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
  136. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
  137. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
  138. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
  139. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
  140. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
  141. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
  142. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
  143. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
  144. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
  145. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
  146. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
  147. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
  148. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
  149. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
  150. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
  151. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/errors.py +0 -0
  152. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/helm.py +0 -0
  153. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/interactivity.py +0 -0
  154. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/key_pair.py +0 -0
  155. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/main.py +0 -0
  156. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/pypi_auth.py +0 -0
  157. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/query.py +0 -0
  158. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
  159. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
  160. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
  161. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
  162. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
  163. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
  164. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
  165. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
  166. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
  167. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
  168. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/testing/__init__.py +0 -0
  169. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ty.py +0 -0
  170. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/ui.py +0 -0
  171. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/url.py +0 -0
  172. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/util.py +0 -0
  173. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
  174. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
  175. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
  176. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
  177. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
  178. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
  179. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
  180. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
  181. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
  182. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
  183. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
  184. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
  185. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
  186. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
  187. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
  188. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
  189. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
  190. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
  191. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
  192. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
  193. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
  194. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
  195. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
  196. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
  197. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
  198. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
  199. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
  200. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
  201. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
  202. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
  203. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
  204. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
  205. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
  206. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
  207. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
  208. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
  209. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
  210. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
  211. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
  212. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
  213. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
  214. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
  215. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
  216. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
  217. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
  218. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
  219. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
  220. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
  221. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
  222. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
  223. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
  224. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
  225. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
  226. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
  227. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
  228. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
  229. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
  230. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
  231. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
  232. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
  233. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
  234. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
  235. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
  236. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
  237. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
  238. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
  239. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
  240. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
  241. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
  242. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
  243. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
  244. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
  245. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
  246. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
  247. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
  248. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
  249. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
  250. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
  251. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
  252. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
  253. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
  254. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
  255. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
  256. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
  257. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
  258. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
  259. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
  260. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
  261. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
  262. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
  263. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
  264. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
  265. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
  266. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
  267. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
  268. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
  269. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
  270. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
  271. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
  272. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
  273. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
  274. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
  275. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
  276. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
  277. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
  278. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
  279. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
  280. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
  281. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
  282. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
  283. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
  284. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
  285. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
  286. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
  287. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
  288. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
  289. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
  290. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
  291. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
  292. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
  293. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
  294. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
  295. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
  296. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
  297. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
  298. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
  299. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
  300. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
  301. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
  302. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
  303. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
  304. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
  305. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
  306. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
  307. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
  308. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
  309. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
  310. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
  311. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
  312. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
  313. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/__init__.py +0 -0
  314. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli/version/read_version.py +0 -0
  315. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/dependency_links.txt +0 -0
  316. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/entry_points.txt +0 -0
  317. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/not-zip-safe +0 -0
  318. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/requires.txt +0 -0
  319. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/ellf_cli.egg-info/top_level.txt +0 -0
  320. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/pyproject.toml +0 -0
  321. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/setup.cfg +0 -0
  322. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/setup.py +0 -0
  323. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_agents_info_stats.py +0 -0
  324. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_appdirs.py +0 -0
  325. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_auth.py +0 -0
  326. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_clusters_info_stats.py +0 -0
  327. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_config.py +0 -0
  328. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_errors.py +0 -0
  329. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_files_cp.py +0 -0
  330. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_files_cp_helpers.py +0 -0
  331. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_helm.py +0 -0
  332. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_import_export.py +0 -0
  333. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_info.py +0 -0
  334. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_config_io.py +0 -0
  335. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_configure.py +0 -0
  336. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_deploy_node_labels.py +0 -0
  337. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_get_terraform.py +0 -0
  338. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_init.py +0 -0
  339. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_provision.py +0 -0
  340. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_start_fixes.py +0 -0
  341. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_start_validation.py +0 -0
  342. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_state_bucket.py +0 -0
  343. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_infra_terraform_init.py +0 -0
  344. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_invalid_secrets.py +0 -0
  345. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_job_list_project_filter.py +0 -0
  346. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_jobs_info_hides_creator.py +0 -0
  347. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_jobs_list_unmatched.py +0 -0
  348. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_key_pair.py +0 -0
  349. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_login.py +0 -0
  350. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_logout.py +0 -0
  351. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_main.py +0 -0
  352. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_org_select.py +0 -0
  353. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_plans.py +0 -0
  354. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_projects.py +0 -0
  355. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_projects_delete_confirm.py +0 -0
  356. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_build_poll.py +0 -0
  357. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_data.py +0 -0
  358. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_import_root.py +0 -0
  359. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_publish_requirements.py +0 -0
  360. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_pypi_auth.py +0 -0
  361. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_query.py +0 -0
  362. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_recipe_file.py +0 -0
  363. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_recipes.py +0 -0
  364. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_state.py +0 -0
  365. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_support.py +0 -0
  366. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_todos.py +0 -0
  367. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ty.py +0 -0
  368. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ui.py +0 -0
  369. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_ui_extras.py +0 -0
  370. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_usage_counts.py +0 -0
  371. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_assign.py +0 -0
  372. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_info_stats.py +0 -0
  373. {ellf_cli-18.1.1 → ellf_cli-19.0.3}/tests/test_users_list.py +0 -0
  374. {ellf_cli-18.1.1 → 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: 18.1.1
3
+ Version: 19.0.3
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -603,30 +603,6 @@ Export all the examples from a dataset and save it in the designated file as JSO
603
603
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the dataset | |
604
604
  | `--output`, `-o` | `str` | JSON output path for data | `'-'` |
605
605
 
606
- ### `ellf examples`
607
-
608
- Disable and activate annotated examples
609
-
610
- #### `ellf examples disable`
611
-
612
- Disable examples: supersede each with a copy answered "ignore". They stay in their dataset and remain their annotators' work
613
-
614
- | Argument | Type | Description | Default |
615
- | --- | --- | --- | --- |
616
- | `dataset` | `str` | Name of the dataset the examples belong to | |
617
- | `example_ids` | `list[int]` | Comma-separated IDs of the examples | |
618
- | `--json` | `bool` | Output the result as JSON | `False` |
619
-
620
- #### `ellf examples activate`
621
-
622
- Activate disabled examples: restore the answers they replaced
623
-
624
- | Argument | Type | Description | Default |
625
- | --- | --- | --- | --- |
626
- | `dataset` | `str` | Name of the dataset the examples belong to | |
627
- | `example_ids` | `list[int]` | Comma-separated IDs of the examples | |
628
- | `--json` | `bool` | Output the result as JSON | `False` |
629
-
630
606
  ### `ellf files`
631
607
 
632
608
  Manage files on the cluster. Your files are only ever sent to servers or buckets you control. They are never sent to our servers.
@@ -1331,23 +1307,23 @@ Mint a fresh 90-day token for an existing service. Issuing a new token does not
1331
1307
 
1332
1308
  ### `ellf sessions`
1333
1309
 
1334
- View, disable and activate a task's annotation sessions
1310
+ View, exclude and activate a task's annotation sessions
1335
1311
 
1336
1312
  #### `ellf sessions list`
1337
1313
 
1338
- List a task's annotation sessions, with how much each annotated and whether it was 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
1339
1315
 
1340
1316
  | Argument | Type | Description | Default |
1341
1317
  | --- | --- | --- | --- |
1342
1318
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
1343
1319
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
1344
1320
  | `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1345
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', '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']` |
1346
1322
  | `--json` | `bool` | Output the result as JSON | `False` |
1347
1323
 
1348
- #### `ellf sessions disable`
1324
+ #### `ellf sessions exclude`
1349
1325
 
1350
- 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
1351
1327
 
1352
1328
  | Argument | Type | Description | Default |
1353
1329
  | --- | --- | --- | --- |
@@ -1356,7 +1332,7 @@ Disable an annotation session: take its examples out of the task's dataset, so t
1356
1332
 
1357
1333
  #### `ellf sessions activate`
1358
1334
 
1359
- Activate 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
1360
1336
 
1361
1337
  | Argument | Type | Description | Default |
1362
1338
  | --- | --- | --- | --- |
@@ -1407,7 +1383,7 @@ List the tasks in a project. Uses your default project unless --project is given
1407
1383
  | Argument | Type | Description | Default |
1408
1384
  | --- | --- | --- | --- |
1409
1385
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
1410
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state'] | `['id', 'name', 'state']` |
1386
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state'] | `['id', 'name', 'state']` |
1411
1387
  | `--json` | `bool` | Output the result as JSON | `False` |
1412
1388
 
1413
1389
  #### `ellf tasks info`
@@ -1419,7 +1395,7 @@ Print information about a task on the cluster
1419
1395
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the task | |
1420
1396
  | `--project` | `str` | Name, slug, or ID of task's project or the last project if not set | `None` |
1421
1397
  | `--cluster` | `str` | Name, slug, or ID of the cluster to search for task name (or the last cluster if not set) | `None` |
1422
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] | `None` |
1398
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] | `None` |
1423
1399
  | `--json` | `bool` | Output the result as JSON | `False` |
1424
1400
 
1425
1401
  #### `ellf tasks logs`
@@ -110,7 +110,6 @@ cli.placeholder("auth", description=Messages.doc_auth)
110
110
  cli.placeholder("clusters", description=Messages.doc_clusters)
111
111
  cli.placeholder("config", description=Messages.doc_config)
112
112
  cli.placeholder("datasets", description=Messages.doc_datasets)
113
- cli.placeholder("examples", description=Messages.doc_examples)
114
113
  cli.placeholder("files", description=Messages.doc_files)
115
114
  cli.placeholder("gcp", description=Messages.doc_gcp)
116
115
  cli.placeholder("infra", description=Messages.doc_infra)
@@ -164,6 +164,9 @@ def export(
164
164
  cluster_id = auth.cluster_id
165
165
 
166
166
  dataset = resolve_dataset(name_or_id, cluster_id=cluster_id)
167
+ legacy = auth.broker_client.datasets.total_example_count(dataset.name).legacy
168
+ if legacy:
169
+ raise CLIError(Messages.E066.format(name=dataset.name, count=legacy))
167
170
 
168
171
  def get_examples_page(page: int):
169
172
  return auth.broker_client.datasets.read_examples(
@@ -1,10 +1,10 @@
1
- """Annotation sessions and the examples in them.
1
+ """Annotation sessions.
2
2
 
3
3
  A task's annotations live in the cluster's Prodigy database, where every
4
4
  PAM session (one sitting of one annotator) has a dataset of its own named
5
- ``{dataset}-{task_id}-{annotator_id}-{session_id}``. 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
- session dataset; disabling an example supersedes it with an ignored answer.
7
+ session dataset.
8
8
  """
9
9
 
10
10
  import builtins
@@ -12,7 +12,7 @@ from collections.abc import Sequence
12
12
  from typing import Any, Optional, Union
13
13
  from uuid import UUID
14
14
 
15
- from radicli import Arg, get_list_converter
15
+ from radicli import Arg
16
16
 
17
17
  from ..cli import cli
18
18
  from ..messages import Messages
@@ -20,7 +20,7 @@ from ..query import resolve_task
20
20
  from ..ui import print_mutation_result, print_table_with_select
21
21
  from ._state import get_auth_state
22
22
 
23
- SESSION_FIELDS = ["id", "annotator", "started", "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,58 +114,6 @@ def disable(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
111
114
  as_json=Arg("--json", help=Messages.as_json),
112
115
  )
113
116
  def activate(session_id: UUID, as_json: bool = False) -> dict[str, Any]:
114
- """Activate 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
-
118
-
119
- def _set_examples_disabled(
120
- dataset: str, example_ids: builtins.list[int], disabled: bool, as_json: bool
121
- ) -> dict[str, Any]:
122
- examples = get_auth_state().broker_client.examples
123
- replaced = (
124
- examples.disable(dataset, example_ids)
125
- if disabled
126
- else examples.activate(dataset, example_ids)
127
- )
128
- result = {
129
- "examples": [
130
- {"old_example_id": r.old_example_id, "id": r.id} for r in replaced.examples
131
- ]
132
- }
133
- message = Messages.T074 if disabled else Messages.T075
134
- print_mutation_result(
135
- result,
136
- message.format(count=len(replaced.examples), name=dataset),
137
- as_json=as_json,
138
- )
139
- return result
140
-
141
-
142
- @cli.subcommand(
143
- "examples",
144
- "disable",
145
- dataset=Arg(help=Messages.example_dataset),
146
- example_ids=Arg(help=Messages.example_ids, converter=get_list_converter(int)),
147
- as_json=Arg("--json", help=Messages.as_json),
148
- )
149
- def disable_examples(
150
- dataset: str, example_ids: builtins.list[int], as_json: bool = False
151
- ) -> dict[str, Any]:
152
- """Disable examples: supersede each with a copy answered "ignore". They stay
153
- in their dataset and remain their annotators' work"""
154
- return _set_examples_disabled(dataset, example_ids, True, as_json)
155
-
156
-
157
- @cli.subcommand(
158
- "examples",
159
- "activate",
160
- dataset=Arg(help=Messages.example_dataset),
161
- example_ids=Arg(help=Messages.example_ids, converter=get_list_converter(int)),
162
- as_json=Arg("--json", help=Messages.as_json),
163
- )
164
- def activate_examples(
165
- dataset: str, example_ids: builtins.list[int], as_json: bool = False
166
- ) -> dict[str, Any]:
167
- """Activate disabled examples: restore the answers they replaced"""
168
- return _set_examples_disabled(dataset, example_ids, False, as_json)
117
+ """Activate an excluded annotation session: put its examples back into
118
+ the task's dataset"""
119
+ return _set_session_excluded(session_id, False, as_json)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "prog": "ellf",
3
3
  "help": "Ellf Command Line Interface.",
4
- "version": "18.1.1",
4
+ "version": "19.0.3",
5
5
  "extra_key": "_extra",
6
6
  "commands": {
7
7
  "actions": {
@@ -68,14 +68,6 @@
68
68
  "parent": null,
69
69
  "is_placeholder": true
70
70
  },
71
- "examples": {
72
- "name": "examples",
73
- "args": [],
74
- "description": "Disable and activate annotated examples",
75
- "allow_extra": false,
76
- "parent": null,
77
- "is_placeholder": true
78
- },
79
71
  "files": {
80
72
  "name": "files",
81
73
  "args": [],
@@ -167,7 +159,7 @@
167
159
  "sessions": {
168
160
  "name": "sessions",
169
161
  "args": [],
170
- "description": "View, disable and activate a task's annotation sessions",
162
+ "description": "View, exclude and activate a task's annotation sessions",
171
163
  "allow_extra": false,
172
164
  "parent": null,
173
165
  "is_placeholder": true
@@ -7467,9 +7459,9 @@
7467
7459
  "id": "select",
7468
7460
  "option": "--select",
7469
7461
  "short": null,
7470
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'annotator', 'started', 'annotations', 'status']",
7471
- "default": "['id', 'annotator', 'started', 'annotations', 'status']",
7472
- "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])",
7473
7465
  "action": null,
7474
7466
  "choices": null,
7475
7467
  "has_converter": true,
@@ -7490,13 +7482,13 @@
7490
7482
  "orig_type": "bool"
7491
7483
  }
7492
7484
  ],
7493
- "description": "List a task's annotation sessions, with how much each annotated 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",
7494
7486
  "allow_extra": false,
7495
7487
  "parent": "sessions",
7496
7488
  "is_placeholder": false
7497
7489
  },
7498
- "disable": {
7499
- "name": "disable",
7490
+ "exclude": {
7491
+ "name": "exclude",
7500
7492
  "args": [
7501
7493
  {
7502
7494
  "id": "session_id",
@@ -7525,7 +7517,7 @@
7525
7517
  "orig_type": "bool"
7526
7518
  }
7527
7519
  ],
7528
- "description": "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",
7529
7521
  "allow_extra": false,
7530
7522
  "parent": "sessions",
7531
7523
  "is_placeholder": false
@@ -7560,110 +7552,12 @@
7560
7552
  "orig_type": "bool"
7561
7553
  }
7562
7554
  ],
7563
- "description": "Activate 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",
7564
7556
  "allow_extra": false,
7565
7557
  "parent": "sessions",
7566
7558
  "is_placeholder": false
7567
7559
  }
7568
7560
  },
7569
- "examples": {
7570
- "disable": {
7571
- "name": "disable",
7572
- "args": [
7573
- {
7574
- "id": "dataset",
7575
- "option": null,
7576
- "short": null,
7577
- "orig_help": "Name of the dataset the examples belong to",
7578
- "default": "==SUPPRESS==",
7579
- "help": "Name of the dataset the examples belong to (str)",
7580
- "action": null,
7581
- "choices": null,
7582
- "has_converter": false,
7583
- "type": "str",
7584
- "orig_type": "str"
7585
- },
7586
- {
7587
- "id": "example_ids",
7588
- "option": null,
7589
- "short": null,
7590
- "orig_help": "Comma-separated IDs of the examples",
7591
- "default": "==SUPPRESS==",
7592
- "help": "Comma-separated IDs of the examples (list[int])",
7593
- "action": null,
7594
- "choices": null,
7595
- "has_converter": true,
7596
- "type": "converter",
7597
- "orig_type": "list[int]"
7598
- },
7599
- {
7600
- "id": "as_json",
7601
- "option": "--json",
7602
- "short": null,
7603
- "orig_help": "Output the result as JSON",
7604
- "default": false,
7605
- "help": "Output the result as JSON (bool)",
7606
- "action": "store_true",
7607
- "choices": null,
7608
- "has_converter": false,
7609
- "type": null,
7610
- "orig_type": "bool"
7611
- }
7612
- ],
7613
- "description": "Disable examples: supersede each with a copy answered \"ignore\". They stay\nin their dataset and remain their annotators' work",
7614
- "allow_extra": false,
7615
- "parent": "examples",
7616
- "is_placeholder": false
7617
- },
7618
- "activate": {
7619
- "name": "activate",
7620
- "args": [
7621
- {
7622
- "id": "dataset",
7623
- "option": null,
7624
- "short": null,
7625
- "orig_help": "Name of the dataset the examples belong to",
7626
- "default": "==SUPPRESS==",
7627
- "help": "Name of the dataset the examples belong to (str)",
7628
- "action": null,
7629
- "choices": null,
7630
- "has_converter": false,
7631
- "type": "str",
7632
- "orig_type": "str"
7633
- },
7634
- {
7635
- "id": "example_ids",
7636
- "option": null,
7637
- "short": null,
7638
- "orig_help": "Comma-separated IDs of the examples",
7639
- "default": "==SUPPRESS==",
7640
- "help": "Comma-separated IDs of the examples (list[int])",
7641
- "action": null,
7642
- "choices": null,
7643
- "has_converter": true,
7644
- "type": "converter",
7645
- "orig_type": "list[int]"
7646
- },
7647
- {
7648
- "id": "as_json",
7649
- "option": "--json",
7650
- "short": null,
7651
- "orig_help": "Output the result as JSON",
7652
- "default": false,
7653
- "help": "Output the result as JSON (bool)",
7654
- "action": "store_true",
7655
- "choices": null,
7656
- "has_converter": false,
7657
- "type": null,
7658
- "orig_type": "bool"
7659
- }
7660
- ],
7661
- "description": "Activate disabled examples: restore the answers they replaced",
7662
- "allow_extra": false,
7663
- "parent": "examples",
7664
- "is_placeholder": false
7665
- }
7666
- },
7667
7561
  "support": {
7668
7562
  "create": {
7669
7563
  "name": "create",
@@ -7903,9 +7797,9 @@
7903
7797
  "id": "select",
7904
7798
  "option": "--select",
7905
7799
  "short": null,
7906
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state']",
7800
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state']",
7907
7801
  "default": "['id', 'name', 'state']",
7908
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'state'] (list[str])",
7802
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'state'] (list[str])",
7909
7803
  "action": null,
7910
7804
  "choices": null,
7911
7805
  "has_converter": true,
@@ -7977,9 +7871,9 @@
7977
7871
  "id": "select",
7978
7872
  "option": "--select",
7979
7873
  "short": null,
7980
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url']",
7874
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url']",
7981
7875
  "default": null,
7982
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] (list[str])",
7876
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'project_id', 'cluster_id', 'name', 'recipe_name', 'recipe_title', 'project_name', 'error', 'plan', 'job_type', 'cli_command', 'last_execution_started', 'created_by_user', 'last_execution_id', 'related_actions', 'url_logs', 'url'] (list[str])",
7983
7877
  "action": null,
7984
7878
  "choices": null,
7985
7879
  "has_converter": true,
@@ -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