openrunner-sdk 2.38.0__tar.gz → 2.38.2__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.
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/PKG-INFO +1 -1
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/install_commands.py +151 -10
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/pyproject.toml +1 -1
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/.gitignore +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/=6.0 +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/=8.1 +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/README.md +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/CLAUDE.md +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/_safepath.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/_secret_rules.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/autoresearch.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/config.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/datasets.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/api_integration.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/cost_guard.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/gpu_types.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/price_compare.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/provider_base.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/forge_provider.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/lambda_cloud.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/modal_provider.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/ovhcloud.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/runpod.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/providers/vastai.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/runner.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/gpu/workspace_sync.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/handover.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/hooks/patent-lab-post-commit +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/skypilot.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/machine.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/mcp_server.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/media.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/model.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/model_card.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/patent_scan.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/projects.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/reload.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/research.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/research_policy.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/run.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/session.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/sync.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/tools/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/tools/patent_report.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/scripts/gen_betterleaks_rules.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/conftest.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/integration/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/integration/conftest.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/integration/test_artifact_round_trip.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_api_client_methods.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_api_client_transport.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_artifact_sweep.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_datasets.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_gpu_registry_deploy.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_infra.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_remainder.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_cli_topup.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_config.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_datasets_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/__init__.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/conftest.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_cost_guard.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_forge.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_gpu_cluster.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_gpu_types.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_lambda.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_modal.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_ovhcloud.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_price_compare.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_provider_base.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_runner.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_runpod.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_vastai.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu/test_workspace_sync.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_gpu_modal_creds.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_init.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_init_facade.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_install_commands.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_setA.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_setB.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_setC.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_log.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_machine_migrate.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_mcp_decisions.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_mcp_monitor.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_mcp_predictions.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_mcp_server.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_media.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_media_extra.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_patent_scan.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_plot_media_extra2.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_prompt_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_pure_modules.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_redact.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_reload_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_research_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_run_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_cluster_j1.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_cluster_j2.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_cluster_j3.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_cluster_j4.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_core_edges.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_session_module.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_session_sync.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_topup_hi.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/test_wandb_compat.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrunner-sdk
|
|
3
|
-
Version: 2.38.
|
|
3
|
+
Version: 2.38.2
|
|
4
4
|
Summary: OpenRunner SDK - W&B-compatible ML experiment tracking client
|
|
5
5
|
Project-URL: Homepage, https://github.com/jqueguiner/openrunner
|
|
6
6
|
Project-URL: Repository, https://github.com/jqueguiner/openrunner
|
|
@@ -181,7 +181,7 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
|
|
|
181
181
|
# openrunner.trace.patch_openai() syntax
|
|
182
182
|
trace.patch_openai = _patch_openai # type: ignore[attr-defined]
|
|
183
183
|
|
|
184
|
-
__version__ = "2.38.
|
|
184
|
+
__version__ = "2.38.2"
|
|
185
185
|
|
|
186
186
|
logger = logging.getLogger("openrunner")
|
|
187
187
|
|
|
@@ -2017,6 +2017,14 @@ allowed-tools:
|
|
|
2017
2017
|
|
|
2018
2018
|
Create a dataset on OpenRunner following the standard pattern (e.g. `paralinguistics-speech-labels-*`): a **managed** dataset bound to a storage connection, with `modality`, `format`, `tasks`, `languages`, `license_use`, a **structured card**, and optionally its files uploaded + linked to a run for lineage.
|
|
2019
2019
|
|
|
2020
|
+
!!! danger "Media datasets MUST be preview-playable — never a bare tar + a separate labels file"
|
|
2021
|
+
Every **Audio / Video / Image** dataset has to end up **browsable and playable in the UI**: each clip visible and playable **next to its label** (transcript, caption…). The UI never joins a side manifest — the label must live IN the rows the UI reads. There are exactly two correct layouts:
|
|
2022
|
+
|
|
2023
|
+
- **Sharded** (default, 1k+ clips): media in `shards/*.tar` + a top-level **`index.jsonl`** with one row per clip carrying `key, shard, offset, size, content_type` **and** the label columns (`text`, `dur`, …); then set `metadata.sharded=true` + `shard_index` and run `index_dataset(text_columns=[...])`. The UI plays each clip via a Range GET on the shard using `key/shard/offset`.
|
|
2024
|
+
- **Non-sharded** (small): individual clip files + a root **`dataset.jsonl`** whose `audio` column is the repo-relative object path, **plus** the label columns on the same row.
|
|
2025
|
+
|
|
2026
|
+
**Anti-pattern that produces NO preview and NO playback (do not do this):** uploading a bare `audio.tar` (or a folder of clips) alongside a SEPARATE `labels.jsonl`. The UI joins nothing → an empty, unplayable dataset. If you already did it, use the *repair* path in Step 5 (build `index.jsonl` with offsets + label columns, or `reconcile_shards`) — you do not need to re-upload the media.
|
|
2027
|
+
|
|
2020
2028
|
`$ARGUMENTS`: `[org/name] [--connection NAME] [--upload DIR] [--link-run RUN_ID]` (ask for what's missing).
|
|
2021
2029
|
|
|
2022
2030
|
## Process
|
|
@@ -2323,7 +2331,7 @@ cat "$CACHE" 2>/dev/null
|
|
|
2323
2331
|
|
|
2324
2332
|
LAUNCH_GPU_CMD = """---
|
|
2325
2333
|
name: {prefix}launch-gpu
|
|
2326
|
-
description: Provision a remote cloud GPU (RunPod, Vast.ai, Lambda) and run a training job
|
|
2334
|
+
description: Provision a remote cloud GPU (RunPod, Vast.ai, Lambda, OVH) or run on a serverless fleet (Modal, Forge via `--provider forge <script>`) and run a training job end-to-end -- governed compute, auto cost tracking, auto-terminate. "on forge"/"on modal" = a provider, not an ssh host.
|
|
2327
2335
|
argument-hint: "[provider] [gpu] -- <training command>"
|
|
2328
2336
|
allowed-tools:
|
|
2329
2337
|
- Bash
|
|
@@ -3078,7 +3086,7 @@ Surface a clear message on 403 (needs admin) or 404 (already gone).
|
|
|
3078
3086
|
|
|
3079
3087
|
TRAIN_CMD = """---
|
|
3080
3088
|
name: {prefix}train
|
|
3081
|
-
description: Train on the right infra from a plain-English request -- lists ALL available compute (registered self-hosted workers + cloud provider offers RunPod/Vast/Lambda), interprets your NL intent ("cheapest A100", "my 4090 box", "runpod H100 x2") to pick the target, confirms, then launches the training governed (server-side key, auto cost + terminate)
|
|
3089
|
+
description: Train on the right infra from a plain-English request -- lists ALL available compute (registered self-hosted workers + cloud provider offers RunPod/Vast/Lambda/OVH + serverless Modal/Forge), interprets your NL intent ("cheapest A100", "my 4090 box", "runpod H100 x2", "on forge") to pick the target, confirms, then launches the training governed (server-side key, auto cost + terminate)
|
|
3082
3090
|
argument-hint: "[natural-language infra + training request]"
|
|
3083
3091
|
allowed-tools:
|
|
3084
3092
|
- Bash
|
|
@@ -3104,9 +3112,14 @@ Gather the real options (don't hardcode):
|
|
|
3104
3112
|
|
|
3105
3113
|
## Step 2 -- interpret the NL request (map intent -> concrete target)
|
|
3106
3114
|
From the user's phrasing, resolve a single target + shape:
|
|
3115
|
+
- **A bare/unknown target name is a PROVIDER, not an ssh host.** If the user says
|
|
3116
|
+
"on forge", "launch on modal", "use runpod", match it against the provider set
|
|
3117
|
+
(runpod, vastai, lambda, ovhcloud, modal, forge) + `openrunner gpu credentials
|
|
3118
|
+
ls` FIRST. Don't conclude the target "doesn't exist" just because it's not in
|
|
3119
|
+
`~/.ssh/config` or `hosts ls` -- serverless providers have no host at all.
|
|
3107
3120
|
- **Named worker** ("my 4090 box", "the a100 rig") -> match a registered host by
|
|
3108
3121
|
name / GPU.
|
|
3109
|
-
- **Provider** ("on runpod", "vast") -> that provider's offers.
|
|
3122
|
+
- **Provider** ("on runpod", "vast", "on forge/modal") -> that provider's offers.
|
|
3110
3123
|
- **GPU class** ("an A100 80G", "H100 x2") -> gpu type + count.
|
|
3111
3124
|
- **Constraints**: "cheapest" -> min $/hr that fits; "fits <model>" -> enough VRAM
|
|
3112
3125
|
(read the model card's measured peak VRAM if a model is named; label estimates);
|
|
@@ -3132,11 +3145,17 @@ Two ways to run, by target. **Choose based on SSH reachability** (see Step 4b):
|
|
|
3132
3145
|
- **B. Registered self-hosted HOST (real SSH)**: a `hosts`-registered box with
|
|
3133
3146
|
direct SSH (e.g. a bare-metal box you control) -- run over SSH
|
|
3134
3147
|
`ssh USER@HOST -p PORT "<docker run / train cmd>"`.
|
|
3135
|
-
- **C. Cloud provider (RunPod,
|
|
3148
|
+
- **C. Cloud pod provider (RunPod, Vast.ai, Lambda, OVH)**:
|
|
3136
3149
|
`openrunner gpu run --provider P --gpu GPU [--gpu-count N] --project ORG/NAME
|
|
3137
3150
|
[-e KEY=VAL ...] "<train command>"`. Governed (key server-side, cost-tracked,
|
|
3138
3151
|
auto-terminate). Deliver code/data inside the command (git clone / artifact
|
|
3139
3152
|
fetch) -- it runs a command, doesn't sync the cwd.
|
|
3153
|
+
- **D. Serverless fleet (Modal, Forge)** -- no pod, no SSH, no runner to find:
|
|
3154
|
+
`openrunner gpu run --provider forge <app_script.py>`. COMMAND is the App
|
|
3155
|
+
SCRIPT (not a shell command); the GPU is declared inside it
|
|
3156
|
+
(`@app.function(gpu=...)`), so `--gpu` is omitted; the Run auto-terminates when
|
|
3157
|
+
the function returns. Use this whenever the target is `forge`/`modal` -- do NOT
|
|
3158
|
+
fall back to searching for an SSH host or registered runner.
|
|
3140
3159
|
- Forward `OPENRUNNER_API_KEY` (+ project) into the job env so training logs back.
|
|
3141
3160
|
|
|
3142
3161
|
## Step 4b -- SSH not coming up? (RunPod SECURE pods)
|
|
@@ -3175,6 +3194,112 @@ directly SSH-reachable** (`publicIp:22`): SSH is only via the **proxy**
|
|
|
3175
3194
|
"""
|
|
3176
3195
|
|
|
3177
3196
|
|
|
3197
|
+
FORGE_CMD = """---
|
|
3198
|
+
name: {prefix}forge
|
|
3199
|
+
description: Run or write a Python function on the Forge (Shadow-PaaS) serverless GPU fleet. Use for "run/launch/train on forge", "forge GPU", or writing an @app.function. Forge is a serverless PROVIDER (like Modal) -- NOT an ssh host or runner, so don't hunt ~/.ssh/config or `hosts ls`.
|
|
3200
|
+
argument-hint: "[run <script.py> | new <name> | explain]"
|
|
3201
|
+
allowed-tools:
|
|
3202
|
+
- Bash
|
|
3203
|
+
- Read
|
|
3204
|
+
- Write
|
|
3205
|
+
---
|
|
3206
|
+
|
|
3207
|
+
Forge (shadow-paas.com) is a **serverless GPU fleet** -- like Modal. You deploy an
|
|
3208
|
+
**App** exposing **@app.function**s; each call is a **Run** on a GPU container that
|
|
3209
|
+
auto-terminates. It is NOT an ssh box or a registered runner.
|
|
3210
|
+
|
|
3211
|
+
## Run an App
|
|
3212
|
+
- Governed (token stored server-side, cost-tracked): store once with
|
|
3213
|
+
`openrunner gpu credentials add --provider forge --api-key fg_..`, then
|
|
3214
|
+
`openrunner gpu run --provider forge <script.py>` -- COMMAND is the App SCRIPT
|
|
3215
|
+
(the GPU is declared inside it, so no `--gpu`); the Run auto-terminates.
|
|
3216
|
+
- Native client: `forge run <script.py>` (needs the `forge-shadow` client on a
|
|
3217
|
+
Python 3.13 interpreter + `FORGE_TOKEN`; install:
|
|
3218
|
+
`pip install forge-shadow --extra-index-url https://forge.shadow-paas.com/sdk/`).
|
|
3219
|
+
|
|
3220
|
+
## How the function runs (mental model)
|
|
3221
|
+
`forge run script.py` runs `@app.local_entrypoint()` on YOUR machine; each
|
|
3222
|
+
`fn.remote(args)` is the boundary -- Forge cloudpickles the function + args into a
|
|
3223
|
+
fresh GPU container (the App's image), runs it ON the fleet, streams stdout back,
|
|
3224
|
+
and cloudpickles the RETURN value back. The container is torn down when the
|
|
3225
|
+
function returns. Therefore:
|
|
3226
|
+
- args + return value cross a **pickle boundary** -> keep them small & picklable;
|
|
3227
|
+
download a dataset/checkpoint INSIDE the function (from a URI), don't pass it as
|
|
3228
|
+
an arg, and return a metrics dict / an uploaded URL, not a multi-GB tensor.
|
|
3229
|
+
- heavy **imports + file reads go INSIDE** the function (they resolve in the
|
|
3230
|
+
container, not your laptop).
|
|
3231
|
+
- the **GPU is set per function** via `gpu=` on the decorator.
|
|
3232
|
+
- local Python must be **3.13** to match the image or every run errors
|
|
3233
|
+
`PYTHON_VERSION_MISMATCH`.
|
|
3234
|
+
|
|
3235
|
+
## Write the App -- training shape
|
|
3236
|
+
```python
|
|
3237
|
+
import forge
|
|
3238
|
+
|
|
3239
|
+
app = forge.App("lora-finetune", image="forge/torch") # forge/torch = PyTorch+CUDA
|
|
3240
|
+
|
|
3241
|
+
|
|
3242
|
+
@app.function(gpu="A100-80GB")
|
|
3243
|
+
def train(cfg: dict) -> dict:
|
|
3244
|
+
import torch # import INSIDE the function
|
|
3245
|
+
from urllib.request import urlretrieve
|
|
3246
|
+
|
|
3247
|
+
urlretrieve(cfg["data_url"], "/tmp/train.pt") # fetch data IN-container
|
|
3248
|
+
data = torch.load("/tmp/train.pt", map_location="cuda")
|
|
3249
|
+
# ... build model, run your training loop, print progress (streams live) ...
|
|
3250
|
+
return {{"final_loss": 0.1234, "steps": cfg["steps"]}} # small, picklable
|
|
3251
|
+
|
|
3252
|
+
|
|
3253
|
+
@app.local_entrypoint()
|
|
3254
|
+
def main():
|
|
3255
|
+
cfg = {{"data_url": "https://.../train.pt", "lr": 3e-4, "steps": 500}}
|
|
3256
|
+
print(train.remote(cfg)) # runs on the fleet A100
|
|
3257
|
+
```
|
|
3258
|
+
|
|
3259
|
+
Run it: `forge run train.py` (or `openrunner gpu run --provider forge train.py`).
|
|
3260
|
+
To log to OpenRunner FROM the fleet, put the api key + project in `cfg` and call
|
|
3261
|
+
`openrunner.init(...)` / `openrunner.log(...)` INSIDE `train` -- your local env
|
|
3262
|
+
vars do NOT cross the `.remote()` boundary.
|
|
3263
|
+
|
|
3264
|
+
## Serve an inference API (a DEPLOYMENT, not a one-shot Run)
|
|
3265
|
+
`@app.web_endpoint` / `@app.asgi_app` turn a function into an **autoscaled HTTP
|
|
3266
|
+
endpoint**. Ship it with `forge deploy api.py` (versioned, long-lived; `forge app`
|
|
3267
|
+
manages it) -- NOT `forge run` (that's for a one-shot entrypoint).
|
|
3268
|
+
```python
|
|
3269
|
+
import forge
|
|
3270
|
+
|
|
3271
|
+
app = forge.App("whisper-api", image="forge/torch")
|
|
3272
|
+
|
|
3273
|
+
|
|
3274
|
+
@app.function(gpu="A100-80GB")
|
|
3275
|
+
@app.asgi_app(public=True, min_replicas=1, max_replicas=4) # 1 warm, burst to 4
|
|
3276
|
+
def api():
|
|
3277
|
+
from fastapi import FastAPI, UploadFile # imports resolve IN-container
|
|
3278
|
+
import whisperx
|
|
3279
|
+
|
|
3280
|
+
web = FastAPI()
|
|
3281
|
+
model = whisperx.load_model("large-v3", device="cuda") # loaded once PER replica
|
|
3282
|
+
|
|
3283
|
+
@web.post("/transcribe")
|
|
3284
|
+
async def transcribe(file: UploadFile):
|
|
3285
|
+
audio = decode(await file.read()) # your decode
|
|
3286
|
+
return {{"text": model.transcribe(audio)["text"]}}
|
|
3287
|
+
|
|
3288
|
+
return web # asgi_app returns the ASGI app
|
|
3289
|
+
```
|
|
3290
|
+
Deploy: `forge deploy api.py` -> prints the public URL + autoscale bounds. Notes:
|
|
3291
|
+
- the model is loaded **once per replica** (module/handler scope), not per request;
|
|
3292
|
+
- `min_replicas>=1` avoids cold starts; it scales to `max_replicas` under load;
|
|
3293
|
+
- `public=True` exposes it without auth (omit for a workspace-scoped endpoint);
|
|
3294
|
+
- for a single handler instead of a whole app, use
|
|
3295
|
+
`@app.web_endpoint(path="/predict", methods=["POST"])` on the function directly.
|
|
3296
|
+
|
|
3297
|
+
Gotchas: run `forge run` from a CLEAN directory (it snapshots the cwd -- a managed
|
|
3298
|
+
repo with unreadable files aborts with `PermissionError [Errno 13]`); the first run
|
|
3299
|
+
pulls the GPU image (~a minute), then it's fast.
|
|
3300
|
+
"""
|
|
3301
|
+
|
|
3302
|
+
|
|
3178
3303
|
DEPLOY_CMD = """---
|
|
3179
3304
|
name: {prefix}deploy
|
|
3180
3305
|
description: Interactively deploy a project's model image on serverless GPUs -- reads the model card's measured results to RECOMMEND a GPU (VRAM headroom) + platform (price/availability), asks you to confirm platform + GPU, sets replica bounds/autoscale, creates the deployment and watches it roll out
|
|
@@ -3387,6 +3512,7 @@ def install_claude_code() -> list[str]:
|
|
|
3387
3512
|
"unregister-machine.md": UNREGISTER_MACHINE_CMD,
|
|
3388
3513
|
"train.md": TRAIN_CMD,
|
|
3389
3514
|
"deploy.md": DEPLOY_CMD,
|
|
3515
|
+
"forge.md": FORGE_CMD,
|
|
3390
3516
|
}
|
|
3391
3517
|
|
|
3392
3518
|
files = []
|
|
@@ -3450,14 +3576,28 @@ or annotation rules:
|
|
|
3450
3576
|
- Run `/openrunner:gt-recommendations [run_id]` for a structured rule report.
|
|
3451
3577
|
|
|
3452
3578
|
When the user asks to start / run / launch a TRAINING on a remote or cloud GPU
|
|
3453
|
-
(RunPod, Vast.ai, Lambda),
|
|
3579
|
+
(RunPod, Vast.ai, Lambda, OVH; serverless: Modal, Forge), names a provider, or
|
|
3580
|
+
mentions a "distant GPU":
|
|
3581
|
+
- FIRST: a bare target name the user gives ("on forge", "launch on modal",
|
|
3582
|
+
"runpod H100") is almost always a GPU **provider**, NOT an ssh host. Do NOT
|
|
3583
|
+
conclude it "doesn't exist" after checking ~/.ssh/config or `hosts ls` --
|
|
3584
|
+
check `openrunner gpu credentials ls` and the provider registry
|
|
3585
|
+
(runpod, vastai, lambda, ovhcloud, modal, forge) and use `--provider <name>`.
|
|
3454
3586
|
- Run `/openrunner:launch-gpu` for the full guided flow (auth -> provider key ->
|
|
3455
3587
|
pick GPU/image -> launch -> monitor -> terminate).
|
|
3456
|
-
-
|
|
3457
|
-
|
|
3458
|
-
logs, auto-terminates.
|
|
3459
|
-
|
|
3460
|
-
|
|
3588
|
+
- Pod providers (RunPod/Vast/Lambda/OVH): the one-shot is
|
|
3589
|
+
`openrunner gpu run --provider runpod --gpu A100_80GB --project ORG/PROJECT
|
|
3590
|
+
"<train cmd>"` -- provisions a pod server-side, streams logs, auto-terminates.
|
|
3591
|
+
- Serverless fleets (**Modal, Forge**): no pod / no SSH -- they run a function on
|
|
3592
|
+
demand. Forge:
|
|
3593
|
+
`openrunner gpu run --provider forge <app_script.py>` -- COMMAND is the App
|
|
3594
|
+
SCRIPT (GPU is declared in `@app.function(gpu=...)`, so no `--gpu`), the Run
|
|
3595
|
+
auto-terminates when the function returns. Don't hunt for an SSH host/runner.
|
|
3596
|
+
For native Forge use, the `forge-deploy` skill covers install/auth/write/run.
|
|
3597
|
+
- Provider keys are stored encrypted with `openrunner gpu credentials add`
|
|
3598
|
+
(e.g. `--provider forge --api-key fg_..`); list/kill pods with
|
|
3599
|
+
`openrunner gpu ls` / `openrunner gpu terminate`. Governed compute -- the key
|
|
3600
|
+
never leaves the API.
|
|
3461
3601
|
"""
|
|
3462
3602
|
import re
|
|
3463
3603
|
if claude_md.exists():
|
|
@@ -3598,6 +3738,7 @@ def _install_all_commands_to_dir(cmd_dir: Path, prefix: str = "openrunner:") ->
|
|
|
3598
3738
|
"unregister-machine.md": UNREGISTER_MACHINE_CMD,
|
|
3599
3739
|
"train.md": TRAIN_CMD,
|
|
3600
3740
|
"deploy.md": DEPLOY_CMD,
|
|
3741
|
+
"forge.md": FORGE_CMD,
|
|
3601
3742
|
}
|
|
3602
3743
|
|
|
3603
3744
|
files = []
|
|
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
|
|
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
|
{openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-aaa/config.json
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
|
{openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/fixtures/wandb-export-mini/run-bbb/config.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openrunner_sdk-2.38.0 → openrunner_sdk-2.38.2}/tests/integration/test_artifact_round_trip.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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|