openrunner-sdk 2.37.30__tar.gz → 2.37.32__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.
Files changed (186) hide show
  1. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/cli.py +40 -0
  4. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/install_commands.py +32 -2
  5. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/pyproject.toml +1 -1
  6. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/.gitignore +0 -0
  7. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/=6.0 +0 -0
  8. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/=8.1 +0 -0
  9. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/README.md +0 -0
  10. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/CLAUDE.md +0 -0
  11. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/_safepath.py +0 -0
  12. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/_secret_rules.py +0 -0
  13. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/api_client.py +0 -0
  14. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/artifact.py +0 -0
  15. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/autoresearch.py +0 -0
  16. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/buffer.py +0 -0
  17. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/cache.py +0 -0
  18. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/config.py +0 -0
  19. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/cost.py +0 -0
  20. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/dataset.py +0 -0
  21. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/datasets.py +0 -0
  22. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/environment.py +0 -0
  23. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/evaluation.py +0 -0
  24. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/feedback.py +0 -0
  25. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/git_info.py +0 -0
  26. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/__init__.py +0 -0
  27. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/api_integration.py +0 -0
  28. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/cost_guard.py +0 -0
  29. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/gpu_types.py +0 -0
  30. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/price_compare.py +0 -0
  31. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/provider_base.py +0 -0
  32. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/__init__.py +0 -0
  33. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/lambda_cloud.py +0 -0
  34. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/modal_provider.py +0 -0
  35. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/ovhcloud.py +0 -0
  36. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/runpod.py +0 -0
  37. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/providers/vastai.py +0 -0
  38. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/runner.py +0 -0
  39. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/gpu/workspace_sync.py +0 -0
  40. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/guardrails.py +0 -0
  41. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/handover.py +0 -0
  42. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/hooks/patent-lab-post-commit +0 -0
  43. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/__init__.py +0 -0
  44. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/accelerate.py +0 -0
  45. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/anthropic_tracer.py +0 -0
  46. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/catboost.py +0 -0
  47. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/diffusers.py +0 -0
  48. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/fastai.py +0 -0
  49. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/forced_alignment.py +0 -0
  50. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/gladia.py +0 -0
  51. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/gymnasium.py +0 -0
  52. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/huggingface.py +0 -0
  53. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/hydra.py +0 -0
  54. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/ignite.py +0 -0
  55. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/jax.py +0 -0
  56. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/keras.py +0 -0
  57. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/langchain.py +0 -0
  58. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/lightgbm.py +0 -0
  59. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/lightning.py +0 -0
  60. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/llamaindex.py +0 -0
  61. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/openai_finetune.py +0 -0
  62. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/openai_tracer.py +0 -0
  63. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/optuna.py +0 -0
  64. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/pytorch.py +0 -0
  65. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/sb3.py +0 -0
  66. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/sklearn.py +0 -0
  67. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/skypilot.py +0 -0
  68. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/tensorflow.py +0 -0
  69. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/trl.py +0 -0
  70. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/tts.py +0 -0
  71. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/ultralytics.py +0 -0
  72. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/voice_agent.py +0 -0
  73. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/whisper.py +0 -0
  74. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/integration/xgboost.py +0 -0
  75. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/launch.py +0 -0
  76. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/machine.py +0 -0
  77. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/mcp_server.py +0 -0
  78. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/media.py +0 -0
  79. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/migrate.py +0 -0
  80. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/model.py +0 -0
  81. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/model_card.py +0 -0
  82. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/offline.py +0 -0
  83. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/patent_scan.py +0 -0
  84. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/pii.py +0 -0
  85. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/plot.py +0 -0
  86. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/projects.py +0 -0
  87. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/prompt.py +0 -0
  88. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/query_api.py +0 -0
  89. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/redact.py +0 -0
  90. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/reload.py +0 -0
  91. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/research.py +0 -0
  92. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/research_policy.py +0 -0
  93. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/run.py +0 -0
  94. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/scorers.py +0 -0
  95. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/sender.py +0 -0
  96. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/session.py +0 -0
  97. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/settings.py +0 -0
  98. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/summary.py +0 -0
  99. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/sweep.py +0 -0
  100. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/sync.py +0 -0
  101. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/system_metrics.py +0 -0
  102. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/tensorboard.py +0 -0
  103. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/tools/__init__.py +0 -0
  104. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/tools/patent_report.py +0 -0
  105. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/trace.py +0 -0
  106. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/transcript_formatter.py +0 -0
  107. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/wal.py +0 -0
  108. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/wandb_compat/__init__.py +0 -0
  109. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/wandb_compat/_shim.py +0 -0
  110. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/openrunner/wer.py +0 -0
  111. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/scripts/gen_betterleaks_rules.py +0 -0
  112. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/__init__.py +0 -0
  113. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/conftest.py +0 -0
  114. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
  115. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
  116. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
  117. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
  118. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
  119. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
  120. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
  121. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
  122. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
  123. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
  124. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
  125. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
  126. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/integration/__init__.py +0 -0
  127. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/integration/conftest.py +0 -0
  128. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/integration/test_artifact_round_trip.py +0 -0
  129. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_alert.py +0 -0
  130. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_aliases.py +0 -0
  131. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_api_client.py +0 -0
  132. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_artifact.py +0 -0
  133. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_buffer.py +0 -0
  134. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_cache.py +0 -0
  135. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_class_scorers.py +0 -0
  136. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_cli.py +0 -0
  137. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_config.py +0 -0
  138. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_evaluation.py +0 -0
  139. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_finish.py +0 -0
  140. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_git_info.py +0 -0
  141. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/__init__.py +0 -0
  142. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/conftest.py +0 -0
  143. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_cost_guard.py +0 -0
  144. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_gpu_types.py +0 -0
  145. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_lambda.py +0 -0
  146. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_modal.py +0 -0
  147. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_ovhcloud.py +0 -0
  148. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_price_compare.py +0 -0
  149. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_provider_base.py +0 -0
  150. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_runner.py +0 -0
  151. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_runpod.py +0 -0
  152. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
  153. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_vastai.py +0 -0
  154. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_gpu/test_workspace_sync.py +0 -0
  155. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_init.py +0 -0
  156. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_install_commands.py +0 -0
  157. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_fastai.py +0 -0
  158. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_huggingface.py +0 -0
  159. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_keras.py +0 -0
  160. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_langchain.py +0 -0
  161. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_lightning.py +0 -0
  162. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_pytorch.py +0 -0
  163. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_sklearn.py +0 -0
  164. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_integration_xgboost.py +0 -0
  165. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_launch.py +0 -0
  166. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_log.py +0 -0
  167. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_log_code.py +0 -0
  168. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_mcp_decisions.py +0 -0
  169. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_mcp_monitor.py +0 -0
  170. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_mcp_predictions.py +0 -0
  171. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_media.py +0 -0
  172. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_migrate.py +0 -0
  173. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_offline.py +0 -0
  174. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_offline_sync.py +0 -0
  175. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_pii.py +0 -0
  176. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_plot.py +0 -0
  177. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_query_api.py +0 -0
  178. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_resume.py +0 -0
  179. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_sdk_features.py +0 -0
  180. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_sender.py +0 -0
  181. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_session_sync.py +0 -0
  182. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_summary.py +0 -0
  183. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_sweep.py +0 -0
  184. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_system_metrics.py +0 -0
  185. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/tests/test_trace.py +0 -0
  186. {openrunner_sdk-2.37.30 → openrunner_sdk-2.37.32}/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.30
3
+ Version: 2.37.32
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.30"
184
+ __version__ = "2.37.32"
185
185
 
186
186
  logger = logging.getLogger("openrunner")
187
187
 
@@ -3055,6 +3055,22 @@ def version_cmd(check: bool) -> None:
3055
3055
  click.echo("Up to date.")
3056
3056
 
3057
3057
 
3058
+ @main.command("_update_nudge", hidden=True)
3059
+ def update_nudge_cmd() -> None:
3060
+ """Print ONE update-hint line if a newer SDK exists, else nothing. Cheap:
3061
+ uses the 24h cache so it hits the network at most once/day. Skills call this
3062
+ at start — it never blocks or errors."""
3063
+ try:
3064
+ info = check_for_update(force=False)
3065
+ if info.get("update_available"):
3066
+ click.echo(
3067
+ f"[openrunner] update available: {info['installed']} -> "
3068
+ f"{info['latest']} (run: openrunner update)"
3069
+ )
3070
+ except Exception:
3071
+ pass
3072
+
3073
+
3058
3074
  @main.command("update")
3059
3075
  @click.option("--pre", is_flag=True, help="Include pre-releases")
3060
3076
  @click.option("--no-reinstall", is_flag=True, help="Only upgrade the package; skip reinstalling slash commands")
@@ -5427,6 +5443,30 @@ def jobs_ls(org, status) -> None:
5427
5443
  click.echo(f"- {j['id']} {j['status']}{code} · {j['type']} · {j.get('image')} · runner={j.get('runner_id') or '-'}")
5428
5444
 
5429
5445
 
5446
+ @jobs_group.command("stats")
5447
+ @click.option("--org", required=True, help="Organization UUID or name/slug")
5448
+ def jobs_stats(org) -> None:
5449
+ """Fleet snapshot: queue depth, running, avg duration, failure rate, runners."""
5450
+ client = _plain_client()
5451
+ org_id = _resolve_org_id(client, org)
5452
+ try:
5453
+ r = client._request("get", "/jobs/stats", params={"org_id": org_id})
5454
+ r.raise_for_status()
5455
+ s = r.json()
5456
+ finally:
5457
+ client.close()
5458
+ click.echo(f"runners: {s.get('runners_online')}/{s.get('runners_total')} online")
5459
+ click.echo(f"queue depth: {s.get('queue_depth')}")
5460
+ click.echo(f"running: {s.get('running')}")
5461
+ dur = s.get("avg_duration_seconds")
5462
+ click.echo(f"avg duration: {dur if dur is not None else '-'}s")
5463
+ fr = s.get("failure_rate")
5464
+ click.echo(f"failure rate: {f'{fr:.1%}' if fr is not None else '-'}")
5465
+ bys = s.get("jobs_by_status") or {}
5466
+ if bys:
5467
+ click.echo("by status: " + ", ".join(f"{k}={v}" for k, v in sorted(bys.items())))
5468
+
5469
+
5430
5470
  # ---------------------------------------------------------------------------
5431
5471
  # session — 1+ interactive shells INSIDE one runner pod (SSH-less, via tmux
5432
5472
  # driven over the job channel). Each session is a tmux session on that pod.
@@ -3306,6 +3306,36 @@ the freshly scaffolded `/predict` -- add the non-blocking reporter + a
3306
3306
  """
3307
3307
 
3308
3308
 
3309
+ # A tiny freshness check injected at the top of every skill body (after the
3310
+ # frontmatter). `openrunner _update_nudge` is cached (24h) so it's near-free and
3311
+ # never blocks; if a newer SDK exists it prints one line the assistant relays to
3312
+ # the user, then the skill proceeds regardless.
3313
+ _FRESHNESS_NOTE = (
3314
+ "> Freshness check (non-blocking): run `openrunner _update_nudge` once at the "
3315
+ "start. If it prints an `update available` line, tell the user (they can run "
3316
+ "`/openrunner:update`), then continue with the task regardless.\n\n"
3317
+ )
3318
+
3319
+
3320
+ def _render_command(template: str, prefix: str, filename: str) -> str:
3321
+ """Format a command template and inject the freshness note right after its
3322
+ YAML frontmatter. Skipped for update.md (it already checks) and any template
3323
+ without frontmatter."""
3324
+ body = template.format(prefix=prefix)
3325
+ if filename == "update.md":
3326
+ return body
3327
+ if body.startswith("---"):
3328
+ end = body.find("\n---", 3)
3329
+ if end != -1:
3330
+ after = end + len("\n---")
3331
+ # keep the newline(s) following the closing fence
3332
+ nl = after
3333
+ while nl < len(body) and body[nl] == "\n":
3334
+ nl += 1
3335
+ return body[:nl] + _FRESHNESS_NOTE + body[nl:]
3336
+ return body
3337
+
3338
+
3309
3339
  def install_claude_code() -> list[str]:
3310
3340
  """Install commands in ~/.claude/commands/openrunner/."""
3311
3341
  cmd_dir = Path.home() / ".claude" / "commands" / "openrunner"
@@ -3354,7 +3384,7 @@ def install_claude_code() -> list[str]:
3354
3384
  files = []
3355
3385
  for filename, template in commands.items():
3356
3386
  path = cmd_dir / filename
3357
- path.write_text(template.format(prefix="openrunner:"))
3387
+ path.write_text(_render_command(template, "openrunner:", filename))
3358
3388
  files.append(str(path))
3359
3389
 
3360
3390
  # Install CLAUDE.md with MCP usage instructions
@@ -3565,7 +3595,7 @@ def _install_all_commands_to_dir(cmd_dir: Path, prefix: str = "openrunner:") ->
3565
3595
  files = []
3566
3596
  for filename, template in commands.items():
3567
3597
  path = cmd_dir / filename
3568
- path.write_text(template.format(prefix=prefix))
3598
+ path.write_text(_render_command(template, prefix, filename))
3569
3599
  files.append(str(path))
3570
3600
 
3571
3601
  return files
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.37.30"
3
+ version = "2.37.32"
4
4
  description = "OpenRunner SDK - W&B-compatible ML experiment tracking client"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
File without changes
File without changes