openrunner-sdk 2.37.6__tar.gz → 2.37.7__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.6 → openrunner_sdk-2.37.7}/PKG-INFO +1 -1
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/api_client.py +33 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cli.py +33 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/install_commands.py +11 -4
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/pyproject.toml +1 -1
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/.gitignore +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/=6.0 +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/=8.1 +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/README.md +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/CLAUDE.md +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/_safepath.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/_secret_rules.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/autoresearch.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/config.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/datasets.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/api_integration.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/cost_guard.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/gpu_types.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/price_compare.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/provider_base.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/lambda_cloud.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/modal_provider.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/ovhcloud.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/runpod.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/vastai.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/runner.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/workspace_sync.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/handover.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/hooks/patent-lab-post-commit +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/skypilot.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/machine.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/mcp_server.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/media.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/model.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/model_card.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/patent_scan.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/projects.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/reload.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/research.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/research_policy.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/run.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/session.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sync.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tools/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tools/patent_report.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/scripts/gen_betterleaks_rules.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/conftest.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/conftest.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/test_artifact_round_trip.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_config.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/__init__.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/conftest.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_cost_guard.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_gpu_types.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_lambda.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_modal.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_ovhcloud.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_price_compare.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_provider_base.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_runner.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_runpod.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_vastai.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_workspace_sync.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_init.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_install_commands.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_log.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_decisions.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_monitor.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_predictions.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_media.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_session_sync.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/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.7
|
|
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.7"
|
|
185
185
|
|
|
186
186
|
logger = logging.getLogger("openrunner")
|
|
187
187
|
|
|
@@ -147,6 +147,39 @@ class APIClient:
|
|
|
147
147
|
logger.warning("post_metrics failed: %s", e)
|
|
148
148
|
return 0
|
|
149
149
|
|
|
150
|
+
def create_api_key(
|
|
151
|
+
self,
|
|
152
|
+
name: str,
|
|
153
|
+
scopes: list[str] | None = None,
|
|
154
|
+
scope_project_id: str | None = None,
|
|
155
|
+
scope_org_id: str | None = None,
|
|
156
|
+
) -> dict[str, Any] | None:
|
|
157
|
+
"""POST /users/me/api-keys -- mint a scoped API key.
|
|
158
|
+
|
|
159
|
+
``scopes`` are fine-grained capability scopes, e.g.
|
|
160
|
+
``["drift:read", "drift:write"]``; None/empty means full access.
|
|
161
|
+
``scope_project_id`` / ``scope_org_id`` further restrict the key to a
|
|
162
|
+
single project/org. The plaintext key is returned ONCE, in the ``key``
|
|
163
|
+
field of the response dict -- it is never retrievable again.
|
|
164
|
+
|
|
165
|
+
Returns the created-key dict (incl. plaintext ``key``), or None on
|
|
166
|
+
failure.
|
|
167
|
+
"""
|
|
168
|
+
try:
|
|
169
|
+
body: dict[str, Any] = {"name": name}
|
|
170
|
+
if scopes:
|
|
171
|
+
body["scopes"] = scopes
|
|
172
|
+
if scope_project_id:
|
|
173
|
+
body["scope_project_id"] = scope_project_id
|
|
174
|
+
if scope_org_id:
|
|
175
|
+
body["scope_org_id"] = scope_org_id
|
|
176
|
+
response = self._request("post", "/users/me/api-keys", json=body)
|
|
177
|
+
response.raise_for_status()
|
|
178
|
+
return response.json()
|
|
179
|
+
except Exception as e:
|
|
180
|
+
logger.warning("create_api_key failed: %s", e)
|
|
181
|
+
return None
|
|
182
|
+
|
|
150
183
|
def post_inference_events(
|
|
151
184
|
self,
|
|
152
185
|
project_id: str,
|
|
@@ -4339,6 +4339,39 @@ def drift_group() -> None:
|
|
|
4339
4339
|
pass
|
|
4340
4340
|
|
|
4341
4341
|
|
|
4342
|
+
@drift_group.command("key")
|
|
4343
|
+
@click.option("--project", "-p", default=None, help="Project org/name or UUID to scope the key to")
|
|
4344
|
+
@click.option("--name", "-n", default=None, help="Key name (default: drift-<project>)")
|
|
4345
|
+
@click.option("--read-only", is_flag=True, help="Mint a drift:read-only key (no ingest)")
|
|
4346
|
+
@click.option("--json", "as_json", is_flag=True, help="Print the key record as JSON")
|
|
4347
|
+
def drift_key(project, name, read_only, as_json) -> None:
|
|
4348
|
+
"""Mint an API key scoped to inference-drift only (read+write by default).
|
|
4349
|
+
|
|
4350
|
+
The key carries ONLY ``drift:read``+``drift:write`` (or ``drift:read`` with
|
|
4351
|
+
--read-only) and is bound to the project — it cannot touch runs, datasets,
|
|
4352
|
+
artifacts, weights, or any other domain. Give this to a container/service
|
|
4353
|
+
that reports drift events instead of a full-access key. The plaintext key is
|
|
4354
|
+
shown ONCE; store it as the container's ``OPENRUNNER_API_KEY``.
|
|
4355
|
+
"""
|
|
4356
|
+
import json as _json
|
|
4357
|
+
|
|
4358
|
+
client, pid = _drift_client_project(project)
|
|
4359
|
+
scopes = ["drift:read"] if read_only else ["drift:read", "drift:write"]
|
|
4360
|
+
key_name = name or f"drift-{(project or _load_settings().get('project') or pid)}".replace("/", "-")
|
|
4361
|
+
rec = client.create_api_key(key_name, scopes=scopes, scope_project_id=pid)
|
|
4362
|
+
client.close()
|
|
4363
|
+
if not rec or not rec.get("key"):
|
|
4364
|
+
click.echo("Error: failed to mint drift key (check login / project membership).", err=True)
|
|
4365
|
+
raise SystemExit(1)
|
|
4366
|
+
if as_json:
|
|
4367
|
+
click.echo(_json.dumps(rec))
|
|
4368
|
+
return
|
|
4369
|
+
click.echo(f"name: {rec.get('name')}")
|
|
4370
|
+
click.echo(f"scopes: {','.join(rec.get('scopes') or scopes)}")
|
|
4371
|
+
click.echo(f"key: {rec['key']}")
|
|
4372
|
+
click.echo("\nStore as the container env OPENRUNNER_API_KEY — shown only once.")
|
|
4373
|
+
|
|
4374
|
+
|
|
4342
4375
|
@drift_group.command("report")
|
|
4343
4376
|
@click.argument("events_json", type=click.Path(exists=True))
|
|
4344
4377
|
@click.option("--project", "-p", default=None, help="Project org/name or UUID")
|
|
@@ -2743,12 +2743,19 @@ the reference). Do each step; ask only when genuinely ambiguous.
|
|
|
2743
2743
|
- If several, ask which to instrument (default: the prediction routes). Honour
|
|
2744
2744
|
`--endpoint PATH` when given.
|
|
2745
2745
|
|
|
2746
|
-
## Step 2 -- resolve project +
|
|
2746
|
+
## Step 2 -- resolve project + mint a DRIFT-ONLY key for the container
|
|
2747
2747
|
- `openrunner login` if needed. Resolve the project id (from the `org/name` arg,
|
|
2748
2748
|
else `APIClient.list_projects()`; ask if ambiguous).
|
|
2749
|
-
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2749
|
+
- **Mint a scoped key for this container** -- do NOT reuse the user's full key.
|
|
2750
|
+
Run `openrunner drift key --project ORG/NAME --name drift-<service>` (add
|
|
2751
|
+
`--json` to capture it). It returns a key carrying ONLY `drift:read` +
|
|
2752
|
+
`drift:write`, bound to that project: it can report/read drift and nothing else
|
|
2753
|
+
(no runs, datasets, artifacts, weights). Shown once.
|
|
2754
|
+
- Inject it as the container's `OPENRUNNER_API_KEY` (+ optional
|
|
2755
|
+
`OPENRUNNER_BASE_URL`) via `.env.example` / deploy secret -- **never hardcode
|
|
2756
|
+
the key** in source. Store `PROJECT_ID` as a module constant or env var.
|
|
2757
|
+
- If key minting fails (e.g. the user lacks membership), fall back to the
|
|
2758
|
+
existing `OPENRUNNER_API_KEY` from env and note it is broader than needed.
|
|
2752
2759
|
|
|
2753
2760
|
## Step 3 -- add the non-blocking reporter module
|
|
2754
2761
|
Create `openrunner_drift.py` (match the repo layout) with a background batcher
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.6 → openrunner_sdk-2.37.7}/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.37.6 → openrunner_sdk-2.37.7}/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.37.6 → openrunner_sdk-2.37.7}/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
|