openrunner-sdk 2.24.2__tar.gz → 2.37.0__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.24.2 → openrunner_sdk-2.37.0}/PKG-INFO +1 -1
- openrunner_sdk-2.37.0/openrunner/CLAUDE.md +151 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/__init__.py +129 -3
- openrunner_sdk-2.37.0/openrunner/_secret_rules.py +284 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/api_client.py +43 -2
- openrunner_sdk-2.37.0/openrunner/autoresearch.py +108 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/cli.py +349 -0
- openrunner_sdk-2.37.0/openrunner/datasets.py +788 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/environment.py +66 -28
- openrunner_sdk-2.37.0/openrunner/handover.py +230 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/install_commands.py +1080 -0
- openrunner_sdk-2.37.0/openrunner/machine.py +236 -0
- openrunner_sdk-2.37.0/openrunner/mcp_server.py +3932 -0
- openrunner_sdk-2.37.0/openrunner/model_card.py +314 -0
- openrunner_sdk-2.37.0/openrunner/projects.py +72 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/query_api.py +75 -3
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/redact.py +152 -8
- openrunner_sdk-2.37.0/openrunner/reload.py +557 -0
- openrunner_sdk-2.37.0/openrunner/research.py +376 -0
- openrunner_sdk-2.37.0/openrunner/research_policy.py +200 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/run.py +66 -6
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/session.py +152 -24
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/settings.py +69 -6
- openrunner_sdk-2.37.0/openrunner/sync.py +162 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/pyproject.toml +1 -1
- openrunner_sdk-2.37.0/scripts/gen_betterleaks_rules.py +175 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_api_client.py +33 -0
- openrunner_sdk-2.37.0/tests/test_mcp_decisions.py +187 -0
- openrunner_sdk-2.37.0/tests/test_mcp_monitor.py +146 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_query_api.py +47 -0
- openrunner_sdk-2.37.0/tests/test_session_sync.py +117 -0
- openrunner_sdk-2.24.2/openrunner/CLAUDE.md +0 -15
- openrunner_sdk-2.24.2/openrunner/mcp_server.py +0 -1986
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/.gitignore +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/=6.0 +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/=8.1 +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/README.md +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/config.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/api_integration.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/cost_guard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/gpu_types.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/price_compare.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/provider_base.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/lambda_cloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/modal_provider.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/ovhcloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/runpod.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/providers/vastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/gpu/workspace_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/hooks/patent-lab-post-commit +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/skypilot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/media.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/model.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/patent_scan.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/tools/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/tools/patent_report.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/integration/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/integration/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/integration/test_artifact_round_trip.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_config.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_cost_guard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_gpu_types.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_lambda.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_modal.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_ovhcloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_price_compare.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_provider_base.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_runpod.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_vastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_gpu/test_workspace_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_init.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_log.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_mcp_predictions.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_media.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.37.0}/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.
|
|
3
|
+
Version: 2.37.0
|
|
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
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# OpenRunner SDK — Datasets (HuggingFace-style)
|
|
2
|
+
|
|
3
|
+
`openrunner.datasets` is a near drop-in replacement for `huggingface_hub` +
|
|
4
|
+
`datasets` for **org-level, reference-only** datasets (metadata, tags, card,
|
|
5
|
+
optional small preview — no full content stored). `repo_id` is `"org/name"`.
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from openrunner import datasets as ord
|
|
9
|
+
|
|
10
|
+
ord.create_dataset("gladia/wmt-en-fr", modality="Text", tasks=["translation"],
|
|
11
|
+
languages=["en", "fr"], num_examples=40_000_000,
|
|
12
|
+
format="parquet", source_uri="hf:wmt/wmt14",
|
|
13
|
+
card="# WMT En-Fr\n...", preview=[{"en": "hi", "fr": "salut"}])
|
|
14
|
+
|
|
15
|
+
ord.list_datasets(org="gladia") # -> [DatasetInfo, ...]
|
|
16
|
+
info = ord.dataset_info("gladia/wmt-en-fr")
|
|
17
|
+
ds = ord.load_dataset("gladia/wmt-en-fr") # HF rows if source is hf:*, else metadata+preview
|
|
18
|
+
ord.set_dataset_card("gladia/wmt-en-fr", md) # update README
|
|
19
|
+
ord.link_run("gladia/wmt-en-fr", run_id) # lineage dataset -> run -> model
|
|
20
|
+
ord.push_dataset("gladia/wmt-en-fr", license="cc-by-4.0") # create-or-update
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**ALWAYS link the dataset(s) a run uses** — pass `datasets=` to `init` so every
|
|
24
|
+
run has data lineage (no "no dataset linked" reproducibility gap):
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
openrunner.init(project="gladia/age-gender-sentiment-emotion", name="v15",
|
|
28
|
+
datasets=["03822df0-...", "gladia/fleurs"]) # UUID or org/name
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
(`openrunner.sync_environment(..., link_datasets=[...])` and
|
|
32
|
+
`/openrunner:sync-env --link-dataset ID` do the same when pushing a local env.)
|
|
33
|
+
|
|
34
|
+
`load_dataset` delegates to HF `datasets.load_dataset` when `source_uri` is
|
|
35
|
+
`hf:org/name` and the package is installed; otherwise returns a `LoadedDataset`
|
|
36
|
+
(`.info`, `.rows`, iterable). Facets match the HF Hub: modality, format,
|
|
37
|
+
dataset_type (standard/benchmark/traces), tasks, languages, size.
|
|
38
|
+
|
|
39
|
+
### Charts & diagrams in cards
|
|
40
|
+
Dataset cards and model cards render markdown with two live graphic blocks —
|
|
41
|
+
use them instead of static tables/images, with REAL data only:
|
|
42
|
+
- ```` ```echarts ```` + a valid ECharts option (JSON) → a live chart
|
|
43
|
+
(line/bar/scatter/pie, and `series.type:"graph"` for node-edge dependency
|
|
44
|
+
graphs). e.g. plot per-subset row counts or eval metrics.
|
|
45
|
+
- ```` ```mermaid ```` → a flowchart / sequence / ER diagram for pipeline or
|
|
46
|
+
schema. Rendered in `securityLevel:"strict"`.
|
|
47
|
+
|
|
48
|
+
## Managed (governed) uploads
|
|
49
|
+
|
|
50
|
+
Bind a dataset to **one** org storage connection so uploads flow through the API
|
|
51
|
+
— credentials never leave the server, and every file is tracked (who/what/size/
|
|
52
|
+
sha256/content-type). This avoids scattered connections and opaque bucket blobs.
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
# bind at create (connection = org storage-connection NAME or UUID)
|
|
56
|
+
ord.create_dataset("gladia/my-text-set", modality="Text", format="parquet",
|
|
57
|
+
connection="ML.text-datasets") # -> source_type="managed"
|
|
58
|
+
|
|
59
|
+
ord.upload_file("gladia/my-text-set", "train.parquet") # one file
|
|
60
|
+
ord.upload_folder("gladia/my-text-set", "./data") # whole tree
|
|
61
|
+
ord.list_files("gladia/my-text-set") # [{path,size_bytes,sha256,content_type,uploaded_by}]
|
|
62
|
+
|
|
63
|
+
# or bind lazily on first upload of an unbound dataset:
|
|
64
|
+
ord.upload_file("gladia/my-text-set", "train.parquet", connection="ML.text-datasets")
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
CLI: `openrunner datasets create … --connection ML.text-datasets`,
|
|
68
|
+
`openrunner datasets upload org/name FILE_OR_DIR…`, `openrunner datasets files org/name`.
|
|
69
|
+
|
|
70
|
+
Files land under `s3://<bucket>/<conn.prefix>/datasets/<org_id>/<name>/<path>`;
|
|
71
|
+
`source_uri` is set to that prefix and `source_type` becomes `managed`.
|
|
72
|
+
|
|
73
|
+
Uploading does **not** index/embed. To make a managed dataset searchable, build
|
|
74
|
+
a LanceDB index (written to the same connection) — opt-in:
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
ord.index_dataset("gladia/my-text-set", text_columns=["en", "fr"]) # FTS, no external svc
|
|
78
|
+
ord.search_dataset("gladia/my-text-set", "translation", limit=10)
|
|
79
|
+
ord.index_dataset("gladia/my-text-set", embed=True) # + vectors, only if a server embedder is set
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
CLI: `openrunner datasets index org/name --text-col en --text-col fr`,
|
|
83
|
+
`openrunner datasets search org/name "translation"`. FTS indexes a single
|
|
84
|
+
combined `_text` column so one query spans all text fields; preview/search read
|
|
85
|
+
the LanceDB table on the dataset's own connection.
|
|
86
|
+
|
|
87
|
+
# OpenRunner MCP Integration
|
|
88
|
+
|
|
89
|
+
When the user publishes a MODEL, or asks to write/update a model card:
|
|
90
|
+
- FIRST call `mcp__openrunner__openrunner_model_card_standard` (pass `model_type`/`task`)
|
|
91
|
+
to get the rules + a fill-in template. Follow it exactly.
|
|
92
|
+
- Ground every number in REAL data — read run `summary` (metrics live there),
|
|
93
|
+
`config`, environment, the project's AI sessions and repo reports. NEVER
|
|
94
|
+
fabricate a number; flag unknowns as `must benchmark`. Label each figure
|
|
95
|
+
`(ours, measured, <protocol>)` or as an external published reference.
|
|
96
|
+
- Write the card with `mcp__openrunner__openrunner_set_model_card` (it validates
|
|
97
|
+
against the standard and returns non-blocking warnings). It only ever PATCHes
|
|
98
|
+
`card_markdown` — never touch other fields/runs/weights.
|
|
99
|
+
- From the SDK: `openrunner.set_model_card(name, md)` / `openrunner.get_model_card(name)`,
|
|
100
|
+
`openrunner.MODEL_CARD_STANDARD`, `openrunner.model_card_template()`,
|
|
101
|
+
`openrunner.validate_model_card(md)`. CLI: `openrunner upload-artifact ... --card card.md`.
|
|
102
|
+
Call `log_artifact`/`link_artifact` EXACTLY ONCE per version (a second call
|
|
103
|
+
duplicates the version).
|
|
104
|
+
|
|
105
|
+
When the user says a model is "done", wants to hand it over / ship / deploy it, or
|
|
106
|
+
asks how to make a model ready for product (the ML / inference / foundations teams):
|
|
107
|
+
- FIRST call `mcp__openrunner__openrunner_handover_standard` (pass `model_name`) to
|
|
108
|
+
get the Gladia Model Handover Standard: 13 mandatory deliverables, Definition of
|
|
109
|
+
Done, enablement session, ownership transfer, maturity tags POC/BETA/PROD-READY.
|
|
110
|
+
- "It's done" != "ready for product". Ownership only transfers when the receiving
|
|
111
|
+
team can operate, modify, retrain and deploy WITHOUT the author.
|
|
112
|
+
- Assess each deliverable against REAL artifacts/runs; fill gaps (model card via
|
|
113
|
+
`openrunner_model_card_standard`, benchmarks vs Solaria baselines, license
|
|
114
|
+
analysis, repro script, ops/COGS, known gaps with owner+ETA).
|
|
115
|
+
- Validate with `mcp__openrunner__openrunner_validate_handover` (pass a `status`
|
|
116
|
+
map + `maturity`). Never call a model PROD-READY while a BLOCKING gap is open.
|
|
117
|
+
- SDK: `openrunner.HANDOVER_STANDARD`, `handover_ticket_template(name)`,
|
|
118
|
+
`validate_handover(status, maturity=...)`. CLI: `openrunner handover standard|ticket|check`.
|
|
119
|
+
Slash command: `/openrunner:handover`.
|
|
120
|
+
|
|
121
|
+
When the user asks about training metrics, loss charts, run data, or experiment results:
|
|
122
|
+
- Use `mcp__openrunner__openrunner_watch_run` to show ASCII sparkline charts
|
|
123
|
+
- Use `mcp__openrunner__openrunner_get_run_metrics` for raw metrics
|
|
124
|
+
- Use `mcp__openrunner__openrunner_list_runs` to find runs
|
|
125
|
+
- Use `mcp__openrunner__openrunner_search_sessions` to search AI session history
|
|
126
|
+
|
|
127
|
+
Do NOT parse log files or grep for metrics when OpenRunner MCP tools are available.
|
|
128
|
+
|
|
129
|
+
When the user asks to monitor a training, diagnose loss curves, or get training
|
|
130
|
+
advice (diverging, overfitting, plateau, NaN loss, LR tuning):
|
|
131
|
+
- Use `mcp__openrunner__openrunner_monitor_training` for a health verdict
|
|
132
|
+
(HEALTHY / IMPROVING / PLATEAUED / OVERFITTING / UNSTABLE / DIVERGING) plus
|
|
133
|
+
per-metric trend, plateau, instability and overfitting signals.
|
|
134
|
+
- Run `/openrunner:training-recommendations [run_id]` for actionable fixes.
|
|
135
|
+
|
|
136
|
+
When the user makes or describes a deliberate decision (changing a param,
|
|
137
|
+
switching strategy, picking an architecture, a data/process/tooling choice):
|
|
138
|
+
- Use `mcp__openrunner__openrunner_log_decision` to document it (context,
|
|
139
|
+
rationale, alternatives; `source_runs` for the run(s) it was decided from,
|
|
140
|
+
`param`/`old_value`/`new_value` for a param change, optional `markdown` body
|
|
141
|
+
+ `attachment_url` PDF).
|
|
142
|
+
- Use `mcp__openrunner__openrunner_set_decision_runs` to attach resulting runs.
|
|
143
|
+
- Use `mcp__openrunner__openrunner_list_decisions` to review the decision log.
|
|
144
|
+
- Run `/openrunner:log-decision` for a guided capture.
|
|
145
|
+
- Decisions render to HTML/PDF: `GET /projects/{id}/decisions/{id}/render?format=pdf`.
|
|
146
|
+
|
|
147
|
+
When the user asks about papers, research, or sessions:
|
|
148
|
+
- Use `mcp__openrunner__openrunner_search_papers` for paper content
|
|
149
|
+
- Use `mcp__openrunner__openrunner_search_research` for research plans
|
|
150
|
+
- Use `mcp__openrunner__openrunner_search_sessions` for AI session history
|
|
151
|
+
- Use `mcp__openrunner__openrunner_update_paper` to modify paper sections
|
|
@@ -35,6 +35,9 @@ Public API:
|
|
|
35
35
|
openrunner.launch -> Create a remote execution job
|
|
36
36
|
openrunner.launch.from_run -> Re-launch from a previous run's config
|
|
37
37
|
openrunner.LaunchJob -> Job handle with .wait() and .cancel()
|
|
38
|
+
openrunner.reload_run -> Reload a run to resume/recalibrate/restart it
|
|
39
|
+
openrunner.reload_environment -> Reload a full experiment env (config, data,
|
|
40
|
+
checkpoints, model card, AI sessions) to iterate
|
|
38
41
|
openrunner.trace -> Decorator for LLM call tracing (supports sample_rate)
|
|
39
42
|
openrunner.trace.patch_openai -> Auto-trace OpenAI chat completions
|
|
40
43
|
openrunner.Prompt -> Versioned prompt management (get/render/publish)
|
|
@@ -65,6 +68,43 @@ from pathlib import Path
|
|
|
65
68
|
from typing import Any
|
|
66
69
|
|
|
67
70
|
from openrunner.artifact import Artifact
|
|
71
|
+
from openrunner.model_card import (
|
|
72
|
+
MODEL_CARD_STANDARD,
|
|
73
|
+
model_card_standard,
|
|
74
|
+
model_card_template,
|
|
75
|
+
validate_model_card,
|
|
76
|
+
)
|
|
77
|
+
from openrunner.handover import (
|
|
78
|
+
HANDOVER_STANDARD,
|
|
79
|
+
HANDOVER_DELIVERABLES,
|
|
80
|
+
MATURITY_TAGS,
|
|
81
|
+
MATURITY_DEFINITIONS,
|
|
82
|
+
OPTIMIZATION_SWEEP_GUIDE,
|
|
83
|
+
handover_standard,
|
|
84
|
+
handover_ticket_template,
|
|
85
|
+
optimization_sweep_guide,
|
|
86
|
+
validate_handover,
|
|
87
|
+
)
|
|
88
|
+
import openrunner.datasets as datasets
|
|
89
|
+
from openrunner.datasets import (
|
|
90
|
+
DatasetInfo,
|
|
91
|
+
DatasetsClient,
|
|
92
|
+
create_dataset,
|
|
93
|
+
dataset_info,
|
|
94
|
+
index_dataset,
|
|
95
|
+
list_datasets,
|
|
96
|
+
link_project,
|
|
97
|
+
list_files,
|
|
98
|
+
load_dataset,
|
|
99
|
+
add_derivation,
|
|
100
|
+
push_dataset,
|
|
101
|
+
search_dataset,
|
|
102
|
+
set_dataset_card,
|
|
103
|
+
set_storage_policy,
|
|
104
|
+
upload_file,
|
|
105
|
+
upload_sharded,
|
|
106
|
+
upload_folder,
|
|
107
|
+
)
|
|
68
108
|
from openrunner.config import Config
|
|
69
109
|
from openrunner.model import Model
|
|
70
110
|
from openrunner.prompt import MessagesPrompt, Prompt, StringPrompt
|
|
@@ -92,8 +132,21 @@ from openrunner.media import (
|
|
|
92
132
|
from openrunner.cost import add_cost
|
|
93
133
|
from openrunner.dataset import Dataset
|
|
94
134
|
from openrunner.query_api import Api
|
|
135
|
+
from openrunner.reload import (
|
|
136
|
+
reload_run,
|
|
137
|
+
ReloadedExperiment,
|
|
138
|
+
reload_environment,
|
|
139
|
+
ExperimentEnvironment,
|
|
140
|
+
reload_project,
|
|
141
|
+
ProjectEnvironment,
|
|
142
|
+
check_reproducibility,
|
|
143
|
+
ReproReport,
|
|
144
|
+
dataset_handle,
|
|
145
|
+
)
|
|
146
|
+
from openrunner.sync import sync_environment, scan_environment
|
|
147
|
+
from openrunner.projects import create_project
|
|
95
148
|
from openrunner.run import Run
|
|
96
|
-
from openrunner.settings import SDKSettings
|
|
149
|
+
from openrunner.settings import SDKSettings, resolve_project, pin_project
|
|
97
150
|
from openrunner.summary import Summary
|
|
98
151
|
from openrunner.sweep import agent, sweep
|
|
99
152
|
from openrunner.evaluation import EvaluationLogger, Scorer, evaluate, scorer
|
|
@@ -112,6 +165,9 @@ from openrunner.trace import trace, patch_openai as _patch_openai, set_thread_id
|
|
|
112
165
|
import openrunner.scorers as scorers
|
|
113
166
|
import openrunner.plot as plot
|
|
114
167
|
import openrunner.gpu as gpu
|
|
168
|
+
import openrunner.autoresearch as autoresearch
|
|
169
|
+
import openrunner.research as research
|
|
170
|
+
import openrunner.machine as machine
|
|
115
171
|
|
|
116
172
|
# Attach from_run as a method on the launch function for
|
|
117
173
|
# openrunner.launch.from_run() syntax
|
|
@@ -121,10 +177,14 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
|
|
|
121
177
|
# openrunner.trace.patch_openai() syntax
|
|
122
178
|
trace.patch_openai = _patch_openai # type: ignore[attr-defined]
|
|
123
179
|
|
|
124
|
-
__version__ = "2.
|
|
180
|
+
__version__ = "2.37.0"
|
|
125
181
|
|
|
126
182
|
logger = logging.getLogger("openrunner")
|
|
127
183
|
|
|
184
|
+
|
|
185
|
+
class _RequireOrgError(ValueError):
|
|
186
|
+
"""Raised (and never swallowed) when a run is created without an explicit org."""
|
|
187
|
+
|
|
128
188
|
# Auto-install/update slash commands + MCP on import if version changed
|
|
129
189
|
def _auto_install_on_import():
|
|
130
190
|
try:
|
|
@@ -424,6 +484,7 @@ def init(
|
|
|
424
484
|
config_exclude_keys: list[str] | None = None,
|
|
425
485
|
config_include_keys: list[str] | None = None,
|
|
426
486
|
allow_val_change: bool = False,
|
|
487
|
+
datasets: list[str] | str | None = None,
|
|
427
488
|
**kwargs: Any,
|
|
428
489
|
) -> Run | None:
|
|
429
490
|
"""Initialize a new run.
|
|
@@ -468,6 +529,10 @@ def init(
|
|
|
468
529
|
allow_val_change: If True, allow overwriting existing config values.
|
|
469
530
|
If False (default), setting a config key that already has
|
|
470
531
|
a different value raises ValueError.
|
|
532
|
+
datasets: Dataset(s) to link to this run for data lineage — a UUID,
|
|
533
|
+
'org/name', or a list of them. ALWAYS pass the dataset(s) a
|
|
534
|
+
run trains/evaluates on so the run is reproducible (no
|
|
535
|
+
"no dataset linked" gap). Failures are logged, never raised.
|
|
471
536
|
|
|
472
537
|
Returns:
|
|
473
538
|
The Run object, or None if initialization fails.
|
|
@@ -526,8 +591,16 @@ def init(
|
|
|
526
591
|
if resume is None and settings.resume:
|
|
527
592
|
resume = settings.resume
|
|
528
593
|
|
|
529
|
-
# Resolve project
|
|
594
|
+
# Resolve project — REQUIRE explicit "org/project". A bare name (or the
|
|
595
|
+
# "uncategorized" fallback) resolves ambiguously across orgs, so reject
|
|
596
|
+
# it loudly (raised below — not swallowed by the resilience wrapper).
|
|
530
597
|
resolved_project = project or settings.project or "uncategorized"
|
|
598
|
+
if "/" not in resolved_project or not resolved_project.split("/", 1)[0].strip():
|
|
599
|
+
raise _RequireOrgError(
|
|
600
|
+
f"project must be 'org/project' (got {resolved_project!r}). "
|
|
601
|
+
"A bare project name is rejected — set e.g. project='gladia/my-project' "
|
|
602
|
+
"or OPENRUNNER_PROJECT='gladia/my-project'."
|
|
603
|
+
)
|
|
531
604
|
|
|
532
605
|
# Warn if no API key (skip in offline mode)
|
|
533
606
|
if not settings.api_key and settings.mode != "offline":
|
|
@@ -577,6 +650,20 @@ def init(
|
|
|
577
650
|
except Exception as e:
|
|
578
651
|
logger.warning("openrunner.init() save_code failed: %s", e)
|
|
579
652
|
|
|
653
|
+
# Auto-link datasets to the run (data lineage) — avoids the run-level
|
|
654
|
+
# "no dataset linked" reproducibility gap. Accepts UUIDs or 'org/name'.
|
|
655
|
+
if datasets:
|
|
656
|
+
refs = [datasets] if isinstance(datasets, str) else list(datasets)
|
|
657
|
+
try:
|
|
658
|
+
from openrunner import datasets as _ds
|
|
659
|
+
for ref in refs:
|
|
660
|
+
try:
|
|
661
|
+
_ds.link_run(ref, run.id)
|
|
662
|
+
except Exception as e: # noqa: BLE001
|
|
663
|
+
logger.warning("init() could not link dataset %r: %s", ref, e)
|
|
664
|
+
except Exception as e: # noqa: BLE001
|
|
665
|
+
logger.warning("init() dataset linking unavailable: %s", e)
|
|
666
|
+
|
|
580
667
|
# Auto-import TensorBoard logs if requested
|
|
581
668
|
if sync_tensorboard_path:
|
|
582
669
|
try:
|
|
@@ -608,6 +695,8 @@ def init(
|
|
|
608
695
|
|
|
609
696
|
return run
|
|
610
697
|
|
|
698
|
+
except _RequireOrgError:
|
|
699
|
+
raise # hard-fail: never push to an ambiguous/wrong org
|
|
611
700
|
except Exception as e:
|
|
612
701
|
logger.warning("openrunner.init() failed: %s", e)
|
|
613
702
|
return None
|
|
@@ -810,6 +899,43 @@ def link_artifact(
|
|
|
810
899
|
return None
|
|
811
900
|
|
|
812
901
|
|
|
902
|
+
def set_model_card(name: str, card_markdown: str) -> dict[str, Any] | None:
|
|
903
|
+
"""Set the model card on a published artifact. Never raises.
|
|
904
|
+
|
|
905
|
+
Validates against ``MODEL_CARD_STANDARD`` (warnings are logged, not
|
|
906
|
+
enforced), then PATCHes ``card_markdown`` on the artifact named ``name`` in
|
|
907
|
+
the active run's project.
|
|
908
|
+
|
|
909
|
+
Args:
|
|
910
|
+
name: Artifact name (the model you published).
|
|
911
|
+
card_markdown: Full markdown card body. See ``MODEL_CARD_STANDARD`` and
|
|
912
|
+
``model_card_template()``.
|
|
913
|
+
|
|
914
|
+
Returns:
|
|
915
|
+
The updated artifact dict, or None on failure.
|
|
916
|
+
"""
|
|
917
|
+
try:
|
|
918
|
+
if _active_run is None:
|
|
919
|
+
logger.warning("openrunner.set_model_card(): no active run — call init() first")
|
|
920
|
+
return None
|
|
921
|
+
return _active_run.set_model_card(name, card_markdown)
|
|
922
|
+
except Exception as e:
|
|
923
|
+
logger.warning("openrunner.set_model_card() failed: %s", e)
|
|
924
|
+
return None
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
def get_model_card(name: str) -> str | None:
|
|
928
|
+
"""Return the current card_markdown for an artifact by name. Never raises."""
|
|
929
|
+
try:
|
|
930
|
+
if _active_run is None:
|
|
931
|
+
logger.warning("openrunner.get_model_card(): no active run — call init() first")
|
|
932
|
+
return None
|
|
933
|
+
return _active_run.get_model_card(name)
|
|
934
|
+
except Exception as e:
|
|
935
|
+
logger.warning("openrunner.get_model_card() failed: %s", e)
|
|
936
|
+
return None
|
|
937
|
+
|
|
938
|
+
|
|
813
939
|
def use_artifact(
|
|
814
940
|
name: str, version: int | None = None, alias: str | None = None
|
|
815
941
|
) -> Path | None:
|