ellf-cli 6.1.2__tar.gz → 6.1.4__tar.gz

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