ellf-cli 4.0.97__tar.gz → 4.0.100__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ellf_cli-4.0.97/ellf_cli.egg-info → ellf_cli-4.0.100}/PKG-INFO +1 -1
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/README.md +2 -2
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/about.json +1 -1
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/projects.py +3 -3
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf.json +29 -29
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/query.py +39 -14
- {ellf_cli-4.0.97 → ellf_cli-4.0.100/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/LICENSE +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/MANIFEST.in +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/__main__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/about.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/auth.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/cli.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/config.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/bin/write-current-session.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/hooks/hooks.json +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skill_variants.json +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/errors.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/helm.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/main.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/messages.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ty.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ui.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/url.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/util.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/SOURCES.txt +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/pyproject.toml +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/setup.cfg +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/setup.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_appdirs.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_auth.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_config.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_errors.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_files_cp.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_info.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_key_pair.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_login.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_main.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_plans.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_projects.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_query.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_recipe_file.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_recipes.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_state.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_support.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_ty.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_ui.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_ui_extras.py +0 -0
- {ellf_cli-4.0.97 → ellf_cli-4.0.100}/tests/test_util.py +0 -0
|
@@ -795,7 +795,7 @@ List all projects
|
|
|
795
795
|
|
|
796
796
|
| Argument | Type | Description | Default |
|
|
797
797
|
| --- | --- | --- | --- |
|
|
798
|
-
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template'] | `['
|
|
798
|
+
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template'] | `['slug', 'name']` |
|
|
799
799
|
| `--name` | `str` | Filter by name | `None` |
|
|
800
800
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
801
801
|
|
|
@@ -806,7 +806,7 @@ Get detailed info for a project
|
|
|
806
806
|
| Argument | Type | Description | Default |
|
|
807
807
|
| --- | --- | --- | --- |
|
|
808
808
|
| `name_or_id` | `Union[str, UUID]` | Name or ID of the project | |
|
|
809
|
-
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template'] | `None` |
|
|
809
|
+
| `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template'] | `None` |
|
|
810
810
|
| `--json` | `bool` | Output the result as JSON | `False` |
|
|
811
811
|
|
|
812
812
|
#### `ellf projects create`
|
|
@@ -39,7 +39,7 @@ logger = logging.getLogger(__name__)
|
|
|
39
39
|
# fmt: on
|
|
40
40
|
)
|
|
41
41
|
def list(
|
|
42
|
-
select: builtins.list[str] = ["
|
|
42
|
+
select: builtins.list[str] = ["slug", "name"],
|
|
43
43
|
name: Optional[str] = None,
|
|
44
44
|
as_json: bool = False,
|
|
45
45
|
) -> Sequence[ProjectSummary]:
|
|
@@ -108,7 +108,7 @@ def create(
|
|
|
108
108
|
except EllfErrors.ProjectInvalid:
|
|
109
109
|
raise CLIError(Messages.E004.format(noun="project", name=name))
|
|
110
110
|
print_mutation_result(
|
|
111
|
-
{"id": str(res.id), "name": res.name},
|
|
111
|
+
{"slug": res.slug, "id": str(res.id), "name": res.name},
|
|
112
112
|
Messages.T002.format(noun="project", name=res.name),
|
|
113
113
|
as_json=as_json,
|
|
114
114
|
)
|
|
@@ -147,7 +147,7 @@ def update(
|
|
|
147
147
|
)
|
|
148
148
|
res = auth.client.project.update(body)
|
|
149
149
|
print_mutation_result(
|
|
150
|
-
{"id": str(res.id), "name": res.name},
|
|
150
|
+
{"slug": res.slug, "id": str(res.id), "name": res.name},
|
|
151
151
|
Messages.T051.format(noun="project", name=res.name),
|
|
152
152
|
as_json=as_json,
|
|
153
153
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prog": "ellf",
|
|
3
3
|
"help": "Ellf Command Line Interface.",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.99",
|
|
5
5
|
"extra_key": "_extra",
|
|
6
6
|
"commands": {
|
|
7
7
|
"actions": {
|
|
@@ -204,7 +204,7 @@
|
|
|
204
204
|
"orig_type": "bool"
|
|
205
205
|
}
|
|
206
206
|
],
|
|
207
|
-
"description": "\
|
|
207
|
+
"description": "\nLog in to your Ellf account. You normally don't need to call this\nmanually. It will automatically authenticate when needed.\n",
|
|
208
208
|
"allow_extra": false,
|
|
209
209
|
"parent": null,
|
|
210
210
|
"is_placeholder": false
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
"orig_type": "Literal[api, cluster, id, ci]"
|
|
258
258
|
}
|
|
259
259
|
],
|
|
260
|
-
"description": "\
|
|
260
|
+
"description": "\nReturn an auth token for the current user\n",
|
|
261
261
|
"allow_extra": false,
|
|
262
262
|
"parent": null,
|
|
263
263
|
"is_placeholder": false
|
|
@@ -333,7 +333,7 @@
|
|
|
333
333
|
"orig_type": "list[Literal[tasks, actions, assets, datasets, paths]]"
|
|
334
334
|
}
|
|
335
335
|
],
|
|
336
|
-
"description": "\
|
|
336
|
+
"description": "\nSave the state of the current app JSON file. If an assets directory is\nprovided, assets will be downloaded and referenced in the JSON accordingly.\n",
|
|
337
337
|
"allow_extra": false,
|
|
338
338
|
"parent": null,
|
|
339
339
|
"is_placeholder": false
|
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
"orig_type": "bool"
|
|
369
369
|
}
|
|
370
370
|
],
|
|
371
|
-
"description": "\
|
|
371
|
+
"description": "\nPopulate Ellf with data for projects, tasks, actions, assets and paths.\n",
|
|
372
372
|
"allow_extra": false,
|
|
373
373
|
"parent": null,
|
|
374
374
|
"is_placeholder": false
|
|
@@ -445,7 +445,7 @@
|
|
|
445
445
|
"orig_type": "List[str]"
|
|
446
446
|
}
|
|
447
447
|
],
|
|
448
|
-
"description": "\
|
|
448
|
+
"description": "\nCreate a new action. The available action recipes are fetched from your\ncluster and are added as dynamic subcommands. You can see more details\nand available arguments by calling the subcommand with --help, e.g. create\n[name] --help\n",
|
|
449
449
|
"allow_extra": true,
|
|
450
450
|
"parent": "actions",
|
|
451
451
|
"is_placeholder": false
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
"orig_type": "bool"
|
|
481
481
|
}
|
|
482
482
|
],
|
|
483
|
-
"description": "\
|
|
483
|
+
"description": "\nList the actions on the cluster. By default, this includes their ID, name\nand current state, e.g. created or completed\n",
|
|
484
484
|
"allow_extra": false,
|
|
485
485
|
"parent": "actions",
|
|
486
486
|
"is_placeholder": false
|
|
@@ -926,7 +926,7 @@
|
|
|
926
926
|
"orig_type": "List[str]"
|
|
927
927
|
}
|
|
928
928
|
],
|
|
929
|
-
"description": "\
|
|
929
|
+
"description": "\nCreate a new agent. The available agent recipes are fetched from your\ncluster and are added as dynamic subcommands. You can see more details\nand available arguments by calling the subcommand with --help, e.g. create\n[name] --help\n",
|
|
930
930
|
"allow_extra": true,
|
|
931
931
|
"parent": "agents",
|
|
932
932
|
"is_placeholder": false
|
|
@@ -1035,7 +1035,7 @@
|
|
|
1035
1035
|
"orig_type": "bool"
|
|
1036
1036
|
}
|
|
1037
1037
|
],
|
|
1038
|
-
"description": "\
|
|
1038
|
+
"description": "\nList the agents on the cluster. By default, this includes their ID, name\nand current state, e.g. created or completed\n",
|
|
1039
1039
|
"allow_extra": false,
|
|
1040
1040
|
"parent": "agents",
|
|
1041
1041
|
"is_placeholder": false
|
|
@@ -1529,7 +1529,7 @@
|
|
|
1529
1529
|
"orig_type": "bool"
|
|
1530
1530
|
}
|
|
1531
1531
|
],
|
|
1532
|
-
"description": "\
|
|
1532
|
+
"description": "\nGet detailed info for an asset uploaded to the cluster and registered\nwith Ellf\n",
|
|
1533
1533
|
"allow_extra": false,
|
|
1534
1534
|
"parent": "assets",
|
|
1535
1535
|
"is_placeholder": false
|
|
@@ -1629,7 +1629,7 @@
|
|
|
1629
1629
|
"orig_type": "bool"
|
|
1630
1630
|
}
|
|
1631
1631
|
],
|
|
1632
|
-
"description": "\
|
|
1632
|
+
"description": "\nCreate an asset on the cluster and register it with Ellf. Assets\npoint to files or directories you control. The Ellf server only has\na reference to them. This command doesn't transfer any data. See `ellf files`\nfor utilities to transfer files to and from your cluster\n",
|
|
1633
1633
|
"allow_extra": false,
|
|
1634
1634
|
"parent": "assets",
|
|
1635
1635
|
"is_placeholder": false
|
|
@@ -1858,7 +1858,7 @@
|
|
|
1858
1858
|
"orig_type": "Union[str, UUID]"
|
|
1859
1859
|
}
|
|
1860
1860
|
],
|
|
1861
|
-
"description": "\
|
|
1861
|
+
"description": "\nDelete a cluster from PAM. This only removes PAM's record\nof it. The cluster itself will continue to exist - you need\nto shut it down separately.\n",
|
|
1862
1862
|
"allow_extra": false,
|
|
1863
1863
|
"parent": "clusters",
|
|
1864
1864
|
"is_placeholder": false
|
|
@@ -1945,7 +1945,7 @@
|
|
|
1945
1945
|
"orig_type": "bool"
|
|
1946
1946
|
}
|
|
1947
1947
|
],
|
|
1948
|
-
"description": "Check the health of a cluster deployment.\n\
|
|
1948
|
+
"description": "Check the health of a cluster deployment.\n\nRuns CLI-side connectivity checks against the cluster and PAM.\nUse --deep to also trigger cluster-side deployment checks (K8s API,\nNFS, database, etc.).\n",
|
|
1949
1949
|
"allow_extra": false,
|
|
1950
1950
|
"parent": "clusters",
|
|
1951
1951
|
"is_placeholder": false
|
|
@@ -2028,7 +2028,7 @@
|
|
|
2028
2028
|
"orig_type": "str"
|
|
2029
2029
|
}
|
|
2030
2030
|
],
|
|
2031
|
-
"description": "Rotate the cluster RSA keypair.\n\
|
|
2031
|
+
"description": "Rotate the cluster RSA keypair.\n\nGenerates a new keypair, updates the cluster record in PAM with the\nnew public key, patches the K8s secret with the new private key,\nand restarts the cluster deployment.\n",
|
|
2032
2032
|
"allow_extra": false,
|
|
2033
2033
|
"parent": "clusters",
|
|
2034
2034
|
"is_placeholder": false
|
|
@@ -2813,7 +2813,7 @@
|
|
|
2813
2813
|
"orig_type": "str"
|
|
2814
2814
|
}
|
|
2815
2815
|
],
|
|
2816
|
-
"description": "Export all the examples from a dataset and save it in the designated file as\
|
|
2816
|
+
"description": "Export all the examples from a dataset and save it in the designated file as\nJSONL (newline-delimited JSON).\n",
|
|
2817
2817
|
"allow_extra": false,
|
|
2818
2818
|
"parent": "datasets",
|
|
2819
2819
|
"is_placeholder": false
|
|
@@ -3248,7 +3248,7 @@
|
|
|
3248
3248
|
"orig_type": "bool"
|
|
3249
3249
|
}
|
|
3250
3250
|
],
|
|
3251
|
-
"description": "Deploy or upgrade the Ellf Helm chart.\n\
|
|
3251
|
+
"description": "Deploy or upgrade the Ellf Helm chart.\n\nCreates the namespace, image pull secret, cluster keypair secret,\nthen runs helm upgrade --install with the provided values.\n",
|
|
3252
3252
|
"allow_extra": false,
|
|
3253
3253
|
"parent": "infra",
|
|
3254
3254
|
"is_placeholder": false
|
|
@@ -3492,7 +3492,7 @@
|
|
|
3492
3492
|
"orig_type": "str"
|
|
3493
3493
|
}
|
|
3494
3494
|
],
|
|
3495
|
-
"description": "Install cluster infrastructure prerequisites (Traefik, cert-manager).\n\
|
|
3495
|
+
"description": "Install cluster infrastructure prerequisites (Traefik, cert-manager).\n\nThese operations are idempotent and safe to re-run.\n",
|
|
3496
3496
|
"allow_extra": false,
|
|
3497
3497
|
"parent": "infra",
|
|
3498
3498
|
"is_placeholder": false
|
|
@@ -3775,7 +3775,7 @@
|
|
|
3775
3775
|
"orig_type": "str"
|
|
3776
3776
|
}
|
|
3777
3777
|
],
|
|
3778
|
-
"description": "Manage TLS certificates for local cluster access.\n\
|
|
3778
|
+
"description": "Manage TLS certificates for local cluster access.\n\nUse --self-signed when you have direct kubectl access to the cluster.\nUse --setup HOST to do everything from your laptop over SSH.\nUse --trust HOST to fetch and install an existing CA from a remote cluster.\n",
|
|
3779
3779
|
"allow_extra": false,
|
|
3780
3780
|
"parent": "infra",
|
|
3781
3781
|
"is_placeholder": false
|
|
@@ -3799,7 +3799,7 @@
|
|
|
3799
3799
|
"orig_type": "str"
|
|
3800
3800
|
}
|
|
3801
3801
|
],
|
|
3802
|
-
"description": "\
|
|
3802
|
+
"description": "\nRun a job directly on the cluster from a YAML spec file, bypassing PAM.\n",
|
|
3803
3803
|
"allow_extra": false,
|
|
3804
3804
|
"parent": "jobs",
|
|
3805
3805
|
"is_placeholder": false
|
|
@@ -4547,9 +4547,9 @@
|
|
|
4547
4547
|
"id": "select",
|
|
4548
4548
|
"option": "--select",
|
|
4549
4549
|
"short": null,
|
|
4550
|
-
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template']",
|
|
4551
|
-
"default": "['
|
|
4552
|
-
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template'] (list[str])",
|
|
4550
|
+
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template']",
|
|
4551
|
+
"default": "['slug', 'name']",
|
|
4552
|
+
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template'] (list[str])",
|
|
4553
4553
|
"action": null,
|
|
4554
4554
|
"choices": null,
|
|
4555
4555
|
"has_converter": true,
|
|
@@ -4608,9 +4608,9 @@
|
|
|
4608
4608
|
"id": "select",
|
|
4609
4609
|
"option": "--select",
|
|
4610
4610
|
"short": null,
|
|
4611
|
-
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template']",
|
|
4611
|
+
"orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template']",
|
|
4612
4612
|
"default": null,
|
|
4613
|
-
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'description', 'default_job_name_template'] (list[str])",
|
|
4613
|
+
"help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'name', 'slug', 'description', 'default_job_name_template'] (list[str])",
|
|
4614
4614
|
"action": null,
|
|
4615
4615
|
"choices": null,
|
|
4616
4616
|
"has_converter": true,
|
|
@@ -4877,7 +4877,7 @@
|
|
|
4877
4877
|
"orig_type": "str"
|
|
4878
4878
|
}
|
|
4879
4879
|
],
|
|
4880
|
-
"description": "\
|
|
4880
|
+
"description": "\nUpload and advertise a recipes package from your Python environment.\n",
|
|
4881
4881
|
"allow_extra": false,
|
|
4882
4882
|
"parent": "publish",
|
|
4883
4883
|
"is_placeholder": false
|
|
@@ -4990,7 +4990,7 @@
|
|
|
4990
4990
|
"orig_type": "bool"
|
|
4991
4991
|
}
|
|
4992
4992
|
],
|
|
4993
|
-
"description": "\
|
|
4993
|
+
"description": "\nTransfer data to the cluster, and advertise it to Ellf.\n\nThese steps can also be done separately. See `ellf files` to transfer\ndata to the cluster without creating an Asset record for it, and\n`ellf assets create` to create an Asset without transfer.\n",
|
|
4994
4994
|
"allow_extra": false,
|
|
4995
4995
|
"parent": "publish",
|
|
4996
4996
|
"is_placeholder": false
|
|
@@ -5663,7 +5663,7 @@
|
|
|
5663
5663
|
"orig_type": "List[str]"
|
|
5664
5664
|
}
|
|
5665
5665
|
],
|
|
5666
|
-
"description": "\
|
|
5666
|
+
"description": "\nCreate a new task. The available task recipes are fetched from your\ncluster and are added as dynamic subcommands. You can see more details\nand available arguments by calling the subcommand with --help, e.g. create\n[name] --help\n",
|
|
5667
5667
|
"allow_extra": true,
|
|
5668
5668
|
"parent": "tasks",
|
|
5669
5669
|
"is_placeholder": false
|
|
@@ -5698,7 +5698,7 @@
|
|
|
5698
5698
|
"orig_type": "bool"
|
|
5699
5699
|
}
|
|
5700
5700
|
],
|
|
5701
|
-
"description": "\
|
|
5701
|
+
"description": "\nList the tasks on the cluster. By default, this includes their ID, name\nand current state, e.g. created or completed\n",
|
|
5702
5702
|
"allow_extra": false,
|
|
5703
5703
|
"parent": "tasks",
|
|
5704
5704
|
"is_placeholder": false
|
|
@@ -6129,7 +6129,7 @@
|
|
|
6129
6129
|
"orig_type": "bool"
|
|
6130
6130
|
}
|
|
6131
6131
|
],
|
|
6132
|
-
"description": "Fetch a batch of questions from a running annotation task.\n\
|
|
6132
|
+
"description": "Fetch a batch of questions from a running annotation task.\n\nMirrors the web app: asks the broker for a Prodigy login token, then talks\nto the task pod directly via its public task_url. Note that requesting a\nbatch reserves those questions for this CLI's session \u2014 they will not be\nhanded to other annotators until they are answered or another session\nruns out of work and steals them.\n",
|
|
6133
6133
|
"allow_extra": false,
|
|
6134
6134
|
"parent": "tasks",
|
|
6135
6135
|
"is_placeholder": false
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
4
|
from collections.abc import Callable, Iterable
|
|
5
|
-
from typing import Literal, TypeVar, Union
|
|
5
|
+
from typing import Any, Literal, TypeVar, Union, cast
|
|
6
6
|
from uuid import UUID
|
|
7
7
|
|
|
8
8
|
import httpx
|
|
@@ -384,9 +384,8 @@ def _resolve_id(
|
|
|
384
384
|
name_or_id: str | UUID,
|
|
385
385
|
params: dict[str, str | UUID | None],
|
|
386
386
|
) -> UUID:
|
|
387
|
-
"""Resolve reference to a Ellf Entity by
|
|
388
|
-
If an ID is given, return it.
|
|
389
|
-
look up the ID.
|
|
387
|
+
"""Resolve reference to a Ellf Entity by UUID, slug, or name.
|
|
388
|
+
If an ID is given, return it. Otherwise try slug then name.
|
|
390
389
|
"""
|
|
391
390
|
if isinstance(name_or_id, UUID):
|
|
392
391
|
return name_or_id
|
|
@@ -397,12 +396,11 @@ def _resolve_id(
|
|
|
397
396
|
auth = get_auth_state()
|
|
398
397
|
model_client = getattr(auth.client, model_name)
|
|
399
398
|
NotFound = get_not_found_error(model_name)
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
return res.id
|
|
403
|
-
except NotFound:
|
|
399
|
+
res = _read_by_slug_or_name(model_client, str(name_or_id), params, NotFound)
|
|
400
|
+
if res is None:
|
|
404
401
|
err = Messages.E038.format(noun=model_name, name_or_id=name_or_id)
|
|
405
402
|
raise CLIError(err, params)
|
|
403
|
+
return cast(UUID, res.id) # type: ignore[attr-defined]
|
|
406
404
|
|
|
407
405
|
|
|
408
406
|
def _resolve_object(
|
|
@@ -410,9 +408,13 @@ def _resolve_object(
|
|
|
410
408
|
name_or_id: str | UUID,
|
|
411
409
|
params: dict[str, str | UUID | None],
|
|
412
410
|
) -> BaseModel:
|
|
413
|
-
"""Resolve reference to a Ellf Entity by
|
|
414
|
-
|
|
415
|
-
the
|
|
411
|
+
"""Resolve reference to a Ellf Entity by UUID, slug, or name.
|
|
412
|
+
|
|
413
|
+
UUIDs are detected by parsing. Otherwise we try the input as a slug
|
|
414
|
+
first (globally unique), then fall back to name (scoped). The slug
|
|
415
|
+
branch is silently skipped for SDK clients that don't yet expose
|
|
416
|
+
a slug field on their Reading model — older deployments stay
|
|
417
|
+
name-resolvable.
|
|
416
418
|
"""
|
|
417
419
|
auth = get_auth_state()
|
|
418
420
|
model_client = getattr(auth.client, model_name)
|
|
@@ -432,14 +434,37 @@ def _resolve_object(
|
|
|
432
434
|
err = Messages.E038.format(noun=model_name, name_or_id=name_or_id)
|
|
433
435
|
raise CLIError(err, params)
|
|
434
436
|
else:
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
except NotFound:
|
|
437
|
+
res = _read_by_slug_or_name(model_client, str(name_or_id), params, NotFound)
|
|
438
|
+
if res is None:
|
|
438
439
|
err = Messages.E038.format(noun=model_name, name_or_id=name_or_id)
|
|
439
440
|
raise CLIError(err, params)
|
|
440
441
|
return res
|
|
441
442
|
|
|
442
443
|
|
|
444
|
+
def _read_by_slug_or_name(
|
|
445
|
+
model_client: Any,
|
|
446
|
+
value: str,
|
|
447
|
+
params: dict[str, str | UUID | None],
|
|
448
|
+
not_found_exc: type[BaseException],
|
|
449
|
+
) -> BaseModel | None:
|
|
450
|
+
"""Try slug lookup first, then name. Return None if neither matches.
|
|
451
|
+
|
|
452
|
+
Slug lookup is only attempted when the SDK's Reading schema for this
|
|
453
|
+
resource declares a ``slug`` field; without it the request would fail
|
|
454
|
+
schema validation client-side before ever leaving the process.
|
|
455
|
+
"""
|
|
456
|
+
reading_cls = getattr(model_client, "Reading", None)
|
|
457
|
+
if reading_cls is not None and "slug" in getattr(reading_cls, "model_fields", {}):
|
|
458
|
+
try:
|
|
459
|
+
return model_client.read(slug=value, **params)
|
|
460
|
+
except not_found_exc:
|
|
461
|
+
pass
|
|
462
|
+
try:
|
|
463
|
+
return model_client.read(name=value, **params)
|
|
464
|
+
except not_found_exc:
|
|
465
|
+
return None
|
|
466
|
+
|
|
467
|
+
|
|
443
468
|
def _resolve_latest_object(
|
|
444
469
|
model_name: str,
|
|
445
470
|
name_or_id: str | UUID,
|
|
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
|
|
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
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py
RENAMED
|
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
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md
RENAMED
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{ellf_cli-4.0.97 → ellf_cli-4.0.100}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md
RENAMED
|
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
|
|
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
|