openrunner-sdk 2.37.32__tar.gz → 2.37.34__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.37.32 → openrunner_sdk-2.37.34}/PKG-INFO +1 -1
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cli.py +121 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/install_commands.py +8 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/pyproject.toml +1 -1
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/.gitignore +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/=6.0 +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/=8.1 +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/README.md +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/CLAUDE.md +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/_safepath.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/_secret_rules.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/autoresearch.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/config.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/datasets.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/api_integration.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/cost_guard.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/gpu_types.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/price_compare.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/provider_base.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/lambda_cloud.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/modal_provider.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/ovhcloud.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/runpod.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/vastai.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/runner.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/workspace_sync.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/handover.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/hooks/patent-lab-post-commit +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/skypilot.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/machine.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/mcp_server.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/media.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/model.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/model_card.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/patent_scan.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/projects.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/reload.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/research.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/research_policy.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/run.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/session.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sync.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tools/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tools/patent_report.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/scripts/gen_betterleaks_rules.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/conftest.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/conftest.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/test_artifact_round_trip.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_config.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/__init__.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/conftest.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_cost_guard.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_gpu_types.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_lambda.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_modal.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_ovhcloud.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_price_compare.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_provider_base.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_runner.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_runpod.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_vastai.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_workspace_sync.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_init.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_install_commands.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_log.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_decisions.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_monitor.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_predictions.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_media.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_session_sync.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/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.37.
|
|
3
|
+
Version: 2.37.34
|
|
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.37.
|
|
184
|
+
__version__ = "2.37.34"
|
|
185
185
|
|
|
186
186
|
logger = logging.getLogger("openrunner")
|
|
187
187
|
|
|
@@ -4825,6 +4825,57 @@ def deploy_rm(deployment_id, project) -> None:
|
|
|
4825
4825
|
click.echo(f"Deployment {d['name']} deleted (replicas terminating).")
|
|
4826
4826
|
|
|
4827
4827
|
|
|
4828
|
+
@deploy_group.command("call")
|
|
4829
|
+
@click.argument("deployment_id")
|
|
4830
|
+
@click.argument("path", default="")
|
|
4831
|
+
@click.option("--project", "-p", default=None, help="Project org/name or UUID")
|
|
4832
|
+
@click.option("--method", "-X", default="POST", help="HTTP method (default POST)")
|
|
4833
|
+
@click.option("--data", "-d", default=None, help="Request body (string). '@file' reads a file.")
|
|
4834
|
+
@click.option("--header", "-H", "headers", multiple=True, help="Extra header 'K: V' (repeatable)")
|
|
4835
|
+
def deploy_call(deployment_id, path, project, method, data, headers) -> None:
|
|
4836
|
+
"""Call a deployment's HTTP endpoint via the governed router (LB across live
|
|
4837
|
+
replicas). PATH is appended to the deployment's proxy base, e.g. 'predict'.
|
|
4838
|
+
|
|
4839
|
+
Example:
|
|
4840
|
+
openrunner deploy call <id> predict -p ORG/NAME -d '{"text":"hi"}'
|
|
4841
|
+
"""
|
|
4842
|
+
settings = _load_settings()
|
|
4843
|
+
api_key = settings.get("api_key")
|
|
4844
|
+
base_url = settings.get("base_url", "http://localhost:8000").rstrip("/")
|
|
4845
|
+
if not api_key:
|
|
4846
|
+
click.echo("Error: Not logged in.", err=True); raise SystemExit(1)
|
|
4847
|
+
_c = APIClient(base_url=base_url, api_key=api_key)
|
|
4848
|
+
proj = project or settings.get("project")
|
|
4849
|
+
pid = proj
|
|
4850
|
+
if proj and ("/" in proj or "-" not in proj):
|
|
4851
|
+
want = proj.split("/")[-1].lower()
|
|
4852
|
+
m = next((p for p in _c.list_projects()
|
|
4853
|
+
if str(p.get("slug", "")).lower() == want or str(p.get("name", "")).lower() == want), None)
|
|
4854
|
+
if m:
|
|
4855
|
+
pid = m["id"]
|
|
4856
|
+
_c.close()
|
|
4857
|
+
if data and data.startswith("@"):
|
|
4858
|
+
data = Path(data[1:]).read_text()
|
|
4859
|
+
hdrs = {"Authorization": f"Bearer {api_key}"}
|
|
4860
|
+
for h in headers:
|
|
4861
|
+
if ":" in h:
|
|
4862
|
+
k, v = h.split(":", 1)
|
|
4863
|
+
hdrs[k.strip()] = v.strip()
|
|
4864
|
+
if data and not any(k.lower() == "content-type" for k in hdrs):
|
|
4865
|
+
hdrs["Content-Type"] = "application/json"
|
|
4866
|
+
url = f"{base_url}/api/v1/projects/{pid}/deployments/{deployment_id}/proxy/{path.lstrip('/')}"
|
|
4867
|
+
import httpx
|
|
4868
|
+
try:
|
|
4869
|
+
r = httpx.request(method.upper(), url, headers=hdrs, content=data, timeout=300.0)
|
|
4870
|
+
except Exception as e:
|
|
4871
|
+
click.echo(f"call failed: {e}", err=True); raise SystemExit(1)
|
|
4872
|
+
if r.status_code == 503:
|
|
4873
|
+
click.echo("503 — no live replica yet (still starting or scaled to zero).", err=True)
|
|
4874
|
+
raise SystemExit(1)
|
|
4875
|
+
click.echo(r.text)
|
|
4876
|
+
raise SystemExit(0 if r.status_code < 400 else 1)
|
|
4877
|
+
|
|
4878
|
+
|
|
4828
4879
|
# ---------------------------------------------------------------------------
|
|
4829
4880
|
# register / hosts — self-hosted (BYO) GPU compute hosts
|
|
4830
4881
|
# ---------------------------------------------------------------------------
|
|
@@ -5578,3 +5629,73 @@ def session_close(name, org, runner_id) -> None:
|
|
|
5578
5629
|
client = _plain_client(); org_id = _resolve_org_id(client, org)
|
|
5579
5630
|
st, out = _run_on_runner(client, org_id, runner_id, f"tmux kill-session -t {name} && echo 'closed {name}'"); client.close()
|
|
5580
5631
|
click.echo(out.rstrip() if out else st)
|
|
5632
|
+
|
|
5633
|
+
|
|
5634
|
+
@session_group.command("watch")
|
|
5635
|
+
@click.argument("name")
|
|
5636
|
+
@_sess_common
|
|
5637
|
+
@click.option("--interval", default=1.0, type=float, help="Seconds between pane captures")
|
|
5638
|
+
def session_watch(name, org, runner_id, interval) -> None:
|
|
5639
|
+
"""Live-tail a session's pane (repeated capture, redraw). Ctrl-C to stop.
|
|
5640
|
+
|
|
5641
|
+
Near-real-time view without a persistent connection — polls the pane at
|
|
5642
|
+
--interval. For a true real-time TTY use the pod's --web browser terminal.
|
|
5643
|
+
"""
|
|
5644
|
+
import time as _time
|
|
5645
|
+
|
|
5646
|
+
if not _SESSION_RE.match(name):
|
|
5647
|
+
click.echo("Invalid session name.", err=True); raise SystemExit(1)
|
|
5648
|
+
client = _plain_client(); org_id = _resolve_org_id(client, org)
|
|
5649
|
+
click.echo(f"Watching session '{name}' (every {interval}s) — Ctrl-C to stop.")
|
|
5650
|
+
last = None
|
|
5651
|
+
try:
|
|
5652
|
+
while True:
|
|
5653
|
+
st, out = _run_on_runner(client, org_id, runner_id, f"tmux capture-pane -t {name} -p")
|
|
5654
|
+
if out != last:
|
|
5655
|
+
click.clear()
|
|
5656
|
+
click.echo(f"[{name} @ runner {runner_id[:8]}]")
|
|
5657
|
+
click.echo(out.rstrip() if out else st)
|
|
5658
|
+
last = out
|
|
5659
|
+
_time.sleep(max(0.3, interval))
|
|
5660
|
+
except KeyboardInterrupt:
|
|
5661
|
+
click.echo("\nStopped watching.")
|
|
5662
|
+
finally:
|
|
5663
|
+
client.close()
|
|
5664
|
+
|
|
5665
|
+
|
|
5666
|
+
@session_group.command("shell")
|
|
5667
|
+
@click.argument("name")
|
|
5668
|
+
@_sess_common
|
|
5669
|
+
@click.option("--wait", default=0.6, type=float, help="Seconds to wait before capturing after each command")
|
|
5670
|
+
def session_shell(name, org, runner_id, wait) -> None:
|
|
5671
|
+
"""Interactive REPL against a session: type a command, see the pane, repeat.
|
|
5672
|
+
|
|
5673
|
+
A human-friendly loop over send+read (no persistent connection). Latency is
|
|
5674
|
+
roughly the runner poll interval per command. Type 'exit' or Ctrl-D to leave
|
|
5675
|
+
(the tmux session keeps running — use `session close` to kill it).
|
|
5676
|
+
"""
|
|
5677
|
+
import time as _time
|
|
5678
|
+
|
|
5679
|
+
if not _SESSION_RE.match(name):
|
|
5680
|
+
click.echo("Invalid session name.", err=True); raise SystemExit(1)
|
|
5681
|
+
client = _plain_client(); org_id = _resolve_org_id(client, org)
|
|
5682
|
+
# Ensure the session exists.
|
|
5683
|
+
_run_on_runner(client, org_id, runner_id,
|
|
5684
|
+
f"tmux has-session -t {name} 2>/dev/null || tmux new-session -d -s {name}")
|
|
5685
|
+
click.echo(f"Interactive shell on session '{name}' (runner {runner_id[:8]}). "
|
|
5686
|
+
"'exit' or Ctrl-D to leave (session stays alive).")
|
|
5687
|
+
try:
|
|
5688
|
+
while True:
|
|
5689
|
+
try:
|
|
5690
|
+
line = click.prompt(f"{name}", prompt_suffix="$ ")
|
|
5691
|
+
except (EOFError, click.exceptions.Abort):
|
|
5692
|
+
break
|
|
5693
|
+
if line.strip() in ("exit", "quit"):
|
|
5694
|
+
break
|
|
5695
|
+
cmd = (f"T=$(printf %s {_b64(line)} | base64 -d); tmux send-keys -t {name} \"$T\" Enter; "
|
|
5696
|
+
f"sleep {max(0.0, wait)}; tmux capture-pane -t {name} -p")
|
|
5697
|
+
st, out = _run_on_runner(client, org_id, runner_id, cmd)
|
|
5698
|
+
click.echo(out.rstrip() if out else st)
|
|
5699
|
+
finally:
|
|
5700
|
+
client.close()
|
|
5701
|
+
click.echo("Left shell (session still running).")
|
|
@@ -2936,8 +2936,12 @@ Target ONE pod with `--runner RID` (from `runner ls` / `runner launch`):
|
|
|
2936
2936
|
openrunner session send s1 'python train.py' --org ORG --runner RID
|
|
2937
2937
|
openrunner session read s1 --org ORG --runner RID # current pane
|
|
2938
2938
|
openrunner session ls --org ORG --runner RID # list sessions in the pod
|
|
2939
|
+
openrunner session watch s1 --org ORG --runner RID # live-tail the pane (redraw)
|
|
2940
|
+
openrunner session shell s1 --org ORG --runner RID # interactive REPL loop
|
|
2939
2941
|
openrunner session close s1 --org ORG --runner RID
|
|
2940
2942
|
|
|
2943
|
+
- `session shell` = a human-friendly interactive loop (type -> pane -> repeat);
|
|
2944
|
+
`session watch` live-tails the pane. Both poll, so latency ~ the poll interval.
|
|
2941
2945
|
- Open several names (`s1`, `s2`, ...) for **parallel** shells in the same pod.
|
|
2942
2946
|
- Sessions **persist** (tmux) between commands -- cwd, env, running processes stay.
|
|
2943
2947
|
- `session send` runs the line then returns the pane; add `--wait N` if the
|
|
@@ -3230,6 +3234,10 @@ Then ask replica bounds + autoscale:
|
|
|
3230
3234
|
- Poll `openrunner deploy ls -p ORG/NAME` + `openrunner deploy replicas <id>
|
|
3231
3235
|
-p ORG/NAME` until replicas are running; report status + the endpoint URL when
|
|
3232
3236
|
the router assigns one. Scale later with `openrunner deploy scale <id> --to N`.
|
|
3237
|
+
- Once >=1 replica is live, call it through the governed router (LB across
|
|
3238
|
+
replicas): `openrunner deploy call <id> predict -p ORG/NAME -d '{{"text":"hi"}}'`
|
|
3239
|
+
(503 = still starting / scaled to zero). Give the user this command + the
|
|
3240
|
+
endpoint_url to integrate.
|
|
3233
3241
|
|
|
3234
3242
|
## Guardrails
|
|
3235
3243
|
- Ground every sizing number in the card/run; label anything estimated. Never
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/modal_provider.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
|
{openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/anthropic_tracer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/forced_alignment.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
|
{openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/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
|