openrunner-sdk 2.24.2__tar.gz → 2.25.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.25.0}/PKG-INFO +1 -1
- openrunner_sdk-2.25.0/openrunner/CLAUDE.md +33 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/__init__.py +1 -1
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/install_commands.py +187 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/mcp_server.py +679 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/pyproject.toml +1 -1
- openrunner_sdk-2.25.0/tests/test_mcp_decisions.py +187 -0
- openrunner_sdk-2.25.0/tests/test_mcp_monitor.py +146 -0
- openrunner_sdk-2.24.2/openrunner/CLAUDE.md +0 -15
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/.gitignore +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/=6.0 +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/=8.1 +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/README.md +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/config.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/api_integration.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/cost_guard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/gpu_types.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/price_compare.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/provider_base.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/lambda_cloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/modal_provider.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/ovhcloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/runpod.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/providers/vastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/gpu/workspace_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/hooks/patent-lab-post-commit +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/skypilot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/media.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/model.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/patent_scan.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/redact.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/run.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/session.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/tools/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/tools/patent_report.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/openrunner/wer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/integration/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/integration/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/integration/test_artifact_round_trip.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_config.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/__init__.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/conftest.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_cost_guard.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_gpu_types.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_lambda.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_modal.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_ovhcloud.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_price_compare.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_provider_base.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_runpod.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_vastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_gpu/test_workspace_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_init.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_log.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_mcp_predictions.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_media.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.0}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.24.2 → openrunner_sdk-2.25.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.25.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,33 @@
|
|
|
1
|
+
# OpenRunner MCP Integration
|
|
2
|
+
|
|
3
|
+
When the user asks about training metrics, loss charts, run data, or experiment results:
|
|
4
|
+
- Use `mcp__openrunner__openrunner_watch_run` to show ASCII sparkline charts
|
|
5
|
+
- Use `mcp__openrunner__openrunner_get_run_metrics` for raw metrics
|
|
6
|
+
- Use `mcp__openrunner__openrunner_list_runs` to find runs
|
|
7
|
+
- Use `mcp__openrunner__openrunner_search_sessions` to search AI session history
|
|
8
|
+
|
|
9
|
+
Do NOT parse log files or grep for metrics when OpenRunner MCP tools are available.
|
|
10
|
+
|
|
11
|
+
When the user asks to monitor a training, diagnose loss curves, or get training
|
|
12
|
+
advice (diverging, overfitting, plateau, NaN loss, LR tuning):
|
|
13
|
+
- Use `mcp__openrunner__openrunner_monitor_training` for a health verdict
|
|
14
|
+
(HEALTHY / IMPROVING / PLATEAUED / OVERFITTING / UNSTABLE / DIVERGING) plus
|
|
15
|
+
per-metric trend, plateau, instability and overfitting signals.
|
|
16
|
+
- Run `/openrunner:training-recommendations [run_id]` for actionable fixes.
|
|
17
|
+
|
|
18
|
+
When the user makes or describes a deliberate decision (changing a param,
|
|
19
|
+
switching strategy, picking an architecture, a data/process/tooling choice):
|
|
20
|
+
- Use `mcp__openrunner__openrunner_log_decision` to document it (context,
|
|
21
|
+
rationale, alternatives; `source_runs` for the run(s) it was decided from,
|
|
22
|
+
`param`/`old_value`/`new_value` for a param change, optional `markdown` body
|
|
23
|
+
+ `attachment_url` PDF).
|
|
24
|
+
- Use `mcp__openrunner__openrunner_set_decision_runs` to attach resulting runs.
|
|
25
|
+
- Use `mcp__openrunner__openrunner_list_decisions` to review the decision log.
|
|
26
|
+
- Run `/openrunner:log-decision` for a guided capture.
|
|
27
|
+
- Decisions render to HTML/PDF: `GET /projects/{id}/decisions/{id}/render?format=pdf`.
|
|
28
|
+
|
|
29
|
+
When the user asks about papers, research, or sessions:
|
|
30
|
+
- Use `mcp__openrunner__openrunner_search_papers` for paper content
|
|
31
|
+
- Use `mcp__openrunner__openrunner_search_research` for research plans
|
|
32
|
+
- Use `mcp__openrunner__openrunner_search_sessions` for AI session history
|
|
33
|
+
- Use `mcp__openrunner__openrunner_update_paper` to modify paper sections
|
|
@@ -121,7 +121,7 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
|
|
|
121
121
|
# openrunner.trace.patch_openai() syntax
|
|
122
122
|
trace.patch_openai = _patch_openai # type: ignore[attr-defined]
|
|
123
123
|
|
|
124
|
-
__version__ = "2.
|
|
124
|
+
__version__ = "2.25.0"
|
|
125
125
|
|
|
126
126
|
logger = logging.getLogger("openrunner")
|
|
127
127
|
|
|
@@ -1062,6 +1062,170 @@ Ask if the user wants the report logged back to OpenRunner via
|
|
|
1062
1062
|
- Keep the report under ~80 lines unless the user asks for the full mismatch list.
|
|
1063
1063
|
"""
|
|
1064
1064
|
|
|
1065
|
+
TRAINING_RECOMMENDATIONS_CMD = """---
|
|
1066
|
+
name: {prefix}training-recommendations
|
|
1067
|
+
description: Monitor a training run's metrics and recommend concrete fixes (LR, regularization, early stop, schedule)
|
|
1068
|
+
argument-hint: "[run_id] [--window 10] [--keys train/loss,val/loss]"
|
|
1069
|
+
allowed-tools:
|
|
1070
|
+
- Bash
|
|
1071
|
+
- Read
|
|
1072
|
+
- mcp__openrunner__openrunner_monitor_training
|
|
1073
|
+
- mcp__openrunner__openrunner_watch_run
|
|
1074
|
+
- mcp__openrunner__openrunner_list_runs
|
|
1075
|
+
- mcp__openrunner__openrunner_log_note
|
|
1076
|
+
---
|
|
1077
|
+
|
|
1078
|
+
Monitor a training run and turn its metric health into **actionable recommendations**.
|
|
1079
|
+
|
|
1080
|
+
## Inputs
|
|
1081
|
+
|
|
1082
|
+
`$ARGUMENTS` may contain:
|
|
1083
|
+
- `run_id` -- the run to diagnose. If omitted, list recent runs and ask the user.
|
|
1084
|
+
- `--window N` -- recent-window size for trend/plateau analysis (default: 10)
|
|
1085
|
+
- `--keys a,b` -- restrict to specific metric keys (default: all logged)
|
|
1086
|
+
|
|
1087
|
+
## Process
|
|
1088
|
+
|
|
1089
|
+
### 1. Resolve the run
|
|
1090
|
+
|
|
1091
|
+
If no `run_id` is given:
|
|
1092
|
+
- Call `mcp__openrunner__openrunner_list_runs` for the configured project.
|
|
1093
|
+
- Show the 10 most recent runs and ask the user to pick one.
|
|
1094
|
+
|
|
1095
|
+
### 2. Diagnose
|
|
1096
|
+
|
|
1097
|
+
Call `mcp__openrunner__openrunner_monitor_training` with the chosen `run_id` (pass
|
|
1098
|
+
`window` / `keys` if the user supplied them). Read the `Verdict`, the per-metric
|
|
1099
|
+
statuses, the `Overfitting signals`, and the machine-readable `## Signals` JSON block.
|
|
1100
|
+
|
|
1101
|
+
If it reports no metrics: tell the user to log metrics from the SDK
|
|
1102
|
+
(`run.log({{"train/loss": ...}}, step=...)`) and stop.
|
|
1103
|
+
|
|
1104
|
+
### 3. Map signals -> recommendations
|
|
1105
|
+
|
|
1106
|
+
Use the verdict + signals to produce targeted advice. Only raise a recommendation when
|
|
1107
|
+
a signal supports it, and cite the metric/value it leans on.
|
|
1108
|
+
|
|
1109
|
+
| Signal | Recommended actions |
|
|
1110
|
+
|--------|--------------------|
|
|
1111
|
+
| **DIVERGING** (loss rising, NaN/Inf) | Lower learning rate 3-10x; add or tighten grad clipping; check for overflow under mixed precision (try bf16 / loss scaling); verify data normalization; add LR warmup. |
|
|
1112
|
+
| **OVERFITTING** (train down while val up) | Early-stop at the val best step; add regularization (weight decay, dropout); augment or add data; reduce model size / epochs; raise early-stop patience. |
|
|
1113
|
+
| **PLATEAUED** (flat loss) | Decay LR (step/cosine) or run an LR finder; increase model/batch capacity; unfreeze layers; confirm data shuffling; or accept convergence and stop. |
|
|
1114
|
+
| **UNSTABLE** (noisy/jittery) | Increase batch size or grad accumulation; lower LR; add grad clipping; smooth the LR schedule; check for label noise. |
|
|
1115
|
+
| **worsening** single metric | Inspect that metric's objective/schedule; check for leakage or a metric bug. |
|
|
1116
|
+
| **IMPROVING** | No change needed; suggest when to checkpoint or stop, note any ETA. |
|
|
1117
|
+
|
|
1118
|
+
### 4. Output
|
|
1119
|
+
|
|
1120
|
+
Print a concise markdown report:
|
|
1121
|
+
|
|
1122
|
+
```
|
|
1123
|
+
# Training Recommendations -- run <id>
|
|
1124
|
+
|
|
1125
|
+
Verdict: <VERDICT>
|
|
1126
|
+
Key evidence: <one line per metric that drives a recommendation>
|
|
1127
|
+
|
|
1128
|
+
## Recommendations (priority order)
|
|
1129
|
+
1. **<action>** -- why: <signal + metric:value>. how: <concrete change>.
|
|
1130
|
+
2. ...
|
|
1131
|
+
|
|
1132
|
+
## Watchlist
|
|
1133
|
+
- <metric to keep watching> -- <threshold / what to look for>
|
|
1134
|
+
```
|
|
1135
|
+
|
|
1136
|
+
Keep it under ~40 lines. Be specific (numbers, step counts), not generic.
|
|
1137
|
+
|
|
1138
|
+
### 5. Offer to log
|
|
1139
|
+
|
|
1140
|
+
Ask if the user wants the report logged back to OpenRunner via
|
|
1141
|
+
`mcp__openrunner__openrunner_log_note` so the team can review it.
|
|
1142
|
+
|
|
1143
|
+
## Constraints
|
|
1144
|
+
|
|
1145
|
+
- Do not invent metrics or numbers -- only use what the MCP tool returned.
|
|
1146
|
+
- Distinguish "the run is broken" (diverging/unstable) from "the run is done"
|
|
1147
|
+
(plateaued/converged).
|
|
1148
|
+
- If the verdict is UNCLEAR, say so and suggest which metric to log for a clearer signal.
|
|
1149
|
+
"""
|
|
1150
|
+
|
|
1151
|
+
LOG_DECISION_CMD = """---
|
|
1152
|
+
name: {prefix}log-decision
|
|
1153
|
+
description: Document a project decision (param change, strategy, architecture, ...) as an ADR-style record
|
|
1154
|
+
argument-hint: "[short decision statement] [--run run_id] [--type param|strategy|...]"
|
|
1155
|
+
allowed-tools:
|
|
1156
|
+
- Bash
|
|
1157
|
+
- Read
|
|
1158
|
+
- mcp__openrunner__openrunner_log_decision
|
|
1159
|
+
- mcp__openrunner__openrunner_list_decisions
|
|
1160
|
+
- mcp__openrunner__openrunner_set_decision_runs
|
|
1161
|
+
- mcp__openrunner__openrunner_list_runs
|
|
1162
|
+
---
|
|
1163
|
+
|
|
1164
|
+
Capture a deliberate decision so the reasoning is preserved for the team and
|
|
1165
|
+
for future-you. Decisions are ADR-style records: title, context, decision,
|
|
1166
|
+
rationale, alternatives — decided FROM one or more runs, and optionally
|
|
1167
|
+
producing resulting runs. The body is markdown and renders to HTML/PDF.
|
|
1168
|
+
|
|
1169
|
+
## Inputs
|
|
1170
|
+
|
|
1171
|
+
`$ARGUMENTS` may contain:
|
|
1172
|
+
- a short decision statement (the title), e.g. "Switch optimizer to AdamW"
|
|
1173
|
+
- `--run run_id` (repeatable) -- run(s) the decision was decided FROM
|
|
1174
|
+
- `--type T` -- one of: param, strategy, architecture, data, process, tooling, other
|
|
1175
|
+
|
|
1176
|
+
## Process
|
|
1177
|
+
|
|
1178
|
+
### 1. Gather the decision
|
|
1179
|
+
|
|
1180
|
+
Infer as much as possible from the current conversation / recent changes, then
|
|
1181
|
+
fill these fields (ask the user only for what you genuinely cannot infer):
|
|
1182
|
+
- **title** -- one-line statement of what was decided
|
|
1183
|
+
- **type** -- param | strategy | architecture | data | process | tooling | other
|
|
1184
|
+
- **context** -- what problem/situation prompted it
|
|
1185
|
+
- **decision** -- what was decided, in detail
|
|
1186
|
+
- **rationale** -- why this option
|
|
1187
|
+
- **alternatives** -- options considered and why they were rejected
|
|
1188
|
+
- **impact** -- expected consequences
|
|
1189
|
+
- **source_runs** -- the run(s) the decision is based on (its evidence)
|
|
1190
|
+
- For a **param change**: the `param` name, its `old_value`, and `new_value`.
|
|
1191
|
+
- Optionally a `markdown` body (full writeup) and/or an `attachment_url` (PDF).
|
|
1192
|
+
|
|
1193
|
+
Do not block on missing optional fields — a title alone is enough to record.
|
|
1194
|
+
If the decision is based on training results, call
|
|
1195
|
+
`mcp__openrunner__openrunner_list_runs` to resolve the source run id(s).
|
|
1196
|
+
|
|
1197
|
+
### 2. Record it
|
|
1198
|
+
|
|
1199
|
+
Call `mcp__openrunner__openrunner_log_decision` with the gathered fields, passing
|
|
1200
|
+
`source_runs` for the run(s) it was decided from. For a param change, pass
|
|
1201
|
+
`param` / `old_value` / `new_value` (the tool sets `type=param` and stores the
|
|
1202
|
+
change in metadata automatically).
|
|
1203
|
+
|
|
1204
|
+
If the decision reverses or replaces an earlier one, first call
|
|
1205
|
+
`mcp__openrunner__openrunner_list_decisions` to find its `id`, then pass it as
|
|
1206
|
+
`supersedes` so the older record is marked superseded.
|
|
1207
|
+
|
|
1208
|
+
### 3. Attach resulting runs (when they exist)
|
|
1209
|
+
|
|
1210
|
+
If the user later launches run(s) as a result of this decision, record them with
|
|
1211
|
+
`mcp__openrunner__openrunner_set_decision_runs` (`result_runs=[...]`, `append=true`
|
|
1212
|
+
to add to existing). This closes the loop decided-from → resulting-runs.
|
|
1213
|
+
|
|
1214
|
+
### 4. Confirm
|
|
1215
|
+
|
|
1216
|
+
Echo the created decision (id, title, type, status, param change, source/result
|
|
1217
|
+
runs). Mention it can be rendered as a PDF via
|
|
1218
|
+
`GET /projects/<pid>/decisions/<id>/render?format=pdf`. Offer to list recent
|
|
1219
|
+
decisions via `mcp__openrunner__openrunner_list_decisions`.
|
|
1220
|
+
|
|
1221
|
+
## Constraints
|
|
1222
|
+
|
|
1223
|
+
- One decision per call. If the user describes several, record each separately.
|
|
1224
|
+
- Keep `title` short and declarative; put detail in `markdown` / `decision` / `rationale`.
|
|
1225
|
+
- A decision should cite the run(s) it was decided from whenever results drove it.
|
|
1226
|
+
- Do not invent a rationale the user did not give — leave it blank instead.
|
|
1227
|
+
"""
|
|
1228
|
+
|
|
1065
1229
|
MCP_CMD = """---
|
|
1066
1230
|
name: {prefix}mcp
|
|
1067
1231
|
description: Register OpenRunner MCP server for native tool access
|
|
@@ -1267,6 +1431,8 @@ def install_claude_code() -> list[str]:
|
|
|
1267
1431
|
"plot-session-run.md": PLOT_SESSION_RUN_CMD,
|
|
1268
1432
|
"statusline.md": STATUSLINE_CMD,
|
|
1269
1433
|
"gt-recommendations.md": GT_RECOMMENDATIONS_CMD,
|
|
1434
|
+
"training-recommendations.md": TRAINING_RECOMMENDATIONS_CMD,
|
|
1435
|
+
"log-decision.md": LOG_DECISION_CMD,
|
|
1270
1436
|
}
|
|
1271
1437
|
|
|
1272
1438
|
files = []
|
|
@@ -1297,6 +1463,25 @@ When the user asks about papers, research, or sessions:
|
|
|
1297
1463
|
- Use `mcp__openrunner__openrunner_search_sessions` for AI session history
|
|
1298
1464
|
- Use `mcp__openrunner__openrunner_update_paper` to modify paper sections
|
|
1299
1465
|
|
|
1466
|
+
When the user asks to monitor a training, diagnose loss curves, or get training
|
|
1467
|
+
advice (diverging, overfitting, plateau, NaN loss, LR tuning):
|
|
1468
|
+
- Use `mcp__openrunner__openrunner_monitor_training` for a health verdict
|
|
1469
|
+
(HEALTHY / IMPROVING / PLATEAUED / OVERFITTING / UNSTABLE / DIVERGING) plus
|
|
1470
|
+
per-metric trend, plateau, instability and overfitting signals.
|
|
1471
|
+
- Run `/openrunner:training-recommendations [run_id]` for actionable fixes.
|
|
1472
|
+
|
|
1473
|
+
When the user makes or describes a deliberate decision (changing a param,
|
|
1474
|
+
switching strategy, picking an architecture, a data/process/tooling choice):
|
|
1475
|
+
- Use `mcp__openrunner__openrunner_log_decision` to document it (context,
|
|
1476
|
+
rationale, alternatives; pass `source_runs` for the run(s) it was decided
|
|
1477
|
+
from, `param`/`old_value`/`new_value` for a param change, optional `markdown`
|
|
1478
|
+
body + `attachment_url` PDF).
|
|
1479
|
+
- Use `mcp__openrunner__openrunner_set_decision_runs` to attach the run(s) that
|
|
1480
|
+
resulted from a decision once they exist.
|
|
1481
|
+
- Use `mcp__openrunner__openrunner_list_decisions` to review the decision log.
|
|
1482
|
+
- Run `/openrunner:log-decision` for a guided capture.
|
|
1483
|
+
- Decisions render to HTML/PDF: `GET /projects/{id}/decisions/{id}/render?format=pdf`.
|
|
1484
|
+
|
|
1300
1485
|
When the user asks about prediction quality, ground-truth errors, mislabels,
|
|
1301
1486
|
or annotation rules:
|
|
1302
1487
|
- Use `mcp__openrunner__openrunner_fetch_predictions` to pull a run's logged
|
|
@@ -1417,6 +1602,8 @@ def _install_all_commands_to_dir(cmd_dir: Path, prefix: str = "openrunner:") ->
|
|
|
1417
1602
|
"plot-session-run.md": PLOT_SESSION_RUN_CMD,
|
|
1418
1603
|
"statusline.md": STATUSLINE_CMD,
|
|
1419
1604
|
"gt-recommendations.md": GT_RECOMMENDATIONS_CMD,
|
|
1605
|
+
"training-recommendations.md": TRAINING_RECOMMENDATIONS_CMD,
|
|
1606
|
+
"log-decision.md": LOG_DECISION_CMD,
|
|
1420
1607
|
}
|
|
1421
1608
|
|
|
1422
1609
|
files = []
|