openrunner-sdk 2.37.4__tar.gz → 2.37.5__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.4 → openrunner_sdk-2.37.5}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/install_commands.py +125 -1
  4. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/pyproject.toml +1 -1
  5. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/.gitignore +0 -0
  6. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/=6.0 +0 -0
  7. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/=8.1 +0 -0
  8. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/README.md +0 -0
  9. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/CLAUDE.md +0 -0
  10. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/_safepath.py +0 -0
  11. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/_secret_rules.py +0 -0
  12. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/api_client.py +0 -0
  13. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/artifact.py +0 -0
  14. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/autoresearch.py +0 -0
  15. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/buffer.py +0 -0
  16. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/cache.py +0 -0
  17. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/cli.py +0 -0
  18. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/config.py +0 -0
  19. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/cost.py +0 -0
  20. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/dataset.py +0 -0
  21. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/datasets.py +0 -0
  22. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/environment.py +0 -0
  23. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/evaluation.py +0 -0
  24. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/feedback.py +0 -0
  25. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/git_info.py +0 -0
  26. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/__init__.py +0 -0
  27. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/api_integration.py +0 -0
  28. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/cost_guard.py +0 -0
  29. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/gpu_types.py +0 -0
  30. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/price_compare.py +0 -0
  31. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/provider_base.py +0 -0
  32. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/__init__.py +0 -0
  33. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/lambda_cloud.py +0 -0
  34. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/modal_provider.py +0 -0
  35. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/ovhcloud.py +0 -0
  36. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/runpod.py +0 -0
  37. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/providers/vastai.py +0 -0
  38. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/runner.py +0 -0
  39. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/gpu/workspace_sync.py +0 -0
  40. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/guardrails.py +0 -0
  41. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/handover.py +0 -0
  42. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/hooks/patent-lab-post-commit +0 -0
  43. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/__init__.py +0 -0
  44. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/accelerate.py +0 -0
  45. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/anthropic_tracer.py +0 -0
  46. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/catboost.py +0 -0
  47. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/diffusers.py +0 -0
  48. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/fastai.py +0 -0
  49. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/forced_alignment.py +0 -0
  50. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/gladia.py +0 -0
  51. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/gymnasium.py +0 -0
  52. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/huggingface.py +0 -0
  53. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/hydra.py +0 -0
  54. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/ignite.py +0 -0
  55. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/jax.py +0 -0
  56. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/keras.py +0 -0
  57. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/langchain.py +0 -0
  58. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/lightgbm.py +0 -0
  59. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/lightning.py +0 -0
  60. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/llamaindex.py +0 -0
  61. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/openai_finetune.py +0 -0
  62. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/openai_tracer.py +0 -0
  63. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/optuna.py +0 -0
  64. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/pytorch.py +0 -0
  65. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/sb3.py +0 -0
  66. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/sklearn.py +0 -0
  67. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/skypilot.py +0 -0
  68. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/tensorflow.py +0 -0
  69. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/trl.py +0 -0
  70. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/tts.py +0 -0
  71. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/ultralytics.py +0 -0
  72. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/voice_agent.py +0 -0
  73. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/whisper.py +0 -0
  74. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/integration/xgboost.py +0 -0
  75. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/launch.py +0 -0
  76. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/machine.py +0 -0
  77. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/mcp_server.py +0 -0
  78. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/media.py +0 -0
  79. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/migrate.py +0 -0
  80. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/model.py +0 -0
  81. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/model_card.py +0 -0
  82. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/offline.py +0 -0
  83. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/patent_scan.py +0 -0
  84. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/pii.py +0 -0
  85. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/plot.py +0 -0
  86. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/projects.py +0 -0
  87. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/prompt.py +0 -0
  88. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/query_api.py +0 -0
  89. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/redact.py +0 -0
  90. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/reload.py +0 -0
  91. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/research.py +0 -0
  92. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/research_policy.py +0 -0
  93. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/run.py +0 -0
  94. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/scorers.py +0 -0
  95. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/sender.py +0 -0
  96. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/session.py +0 -0
  97. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/settings.py +0 -0
  98. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/summary.py +0 -0
  99. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/sweep.py +0 -0
  100. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/sync.py +0 -0
  101. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/system_metrics.py +0 -0
  102. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/tensorboard.py +0 -0
  103. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/tools/__init__.py +0 -0
  104. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/tools/patent_report.py +0 -0
  105. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/trace.py +0 -0
  106. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/transcript_formatter.py +0 -0
  107. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/wal.py +0 -0
  108. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/wandb_compat/__init__.py +0 -0
  109. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/wandb_compat/_shim.py +0 -0
  110. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/openrunner/wer.py +0 -0
  111. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/scripts/gen_betterleaks_rules.py +0 -0
  112. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/__init__.py +0 -0
  113. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/conftest.py +0 -0
  114. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
  115. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
  116. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
  117. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
  118. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
  119. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
  120. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
  121. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
  122. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
  123. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
  124. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
  125. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
  126. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/integration/__init__.py +0 -0
  127. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/integration/conftest.py +0 -0
  128. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/integration/test_artifact_round_trip.py +0 -0
  129. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_alert.py +0 -0
  130. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_aliases.py +0 -0
  131. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_api_client.py +0 -0
  132. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_artifact.py +0 -0
  133. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_buffer.py +0 -0
  134. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_cache.py +0 -0
  135. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_class_scorers.py +0 -0
  136. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_cli.py +0 -0
  137. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_config.py +0 -0
  138. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_evaluation.py +0 -0
  139. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_finish.py +0 -0
  140. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_git_info.py +0 -0
  141. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/__init__.py +0 -0
  142. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/conftest.py +0 -0
  143. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_cost_guard.py +0 -0
  144. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_gpu_types.py +0 -0
  145. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_lambda.py +0 -0
  146. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_modal.py +0 -0
  147. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_ovhcloud.py +0 -0
  148. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_price_compare.py +0 -0
  149. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_provider_base.py +0 -0
  150. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_runner.py +0 -0
  151. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_runpod.py +0 -0
  152. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
  153. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_vastai.py +0 -0
  154. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_gpu/test_workspace_sync.py +0 -0
  155. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_init.py +0 -0
  156. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_install_commands.py +0 -0
  157. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_fastai.py +0 -0
  158. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_huggingface.py +0 -0
  159. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_keras.py +0 -0
  160. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_langchain.py +0 -0
  161. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_lightning.py +0 -0
  162. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_pytorch.py +0 -0
  163. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_sklearn.py +0 -0
  164. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_integration_xgboost.py +0 -0
  165. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_launch.py +0 -0
  166. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_log.py +0 -0
  167. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_log_code.py +0 -0
  168. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_mcp_decisions.py +0 -0
  169. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_mcp_monitor.py +0 -0
  170. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_mcp_predictions.py +0 -0
  171. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_media.py +0 -0
  172. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_migrate.py +0 -0
  173. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_offline.py +0 -0
  174. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_offline_sync.py +0 -0
  175. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_pii.py +0 -0
  176. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_plot.py +0 -0
  177. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_query_api.py +0 -0
  178. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_resume.py +0 -0
  179. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_sdk_features.py +0 -0
  180. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_sender.py +0 -0
  181. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_session_sync.py +0 -0
  182. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_summary.py +0 -0
  183. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_sweep.py +0 -0
  184. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_system_metrics.py +0 -0
  185. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/tests/test_trace.py +0 -0
  186. {openrunner_sdk-2.37.4 → openrunner_sdk-2.37.5}/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.4
3
+ Version: 2.37.5
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.4"
184
+ __version__ = "2.37.5"
185
185
 
186
186
  logger = logging.getLogger("openrunner")
187
187
 
@@ -442,7 +442,7 @@ allowed-tools:
442
442
  Upgrade openrunner-sdk and reinstall slash commands:
443
443
 
444
444
  ```bash
445
- pip install --upgrade openrunner-sdk 2>&1 | tail -3 && python3 -c "
445
+ pip install --upgrade --no-cache-dir openrunner-sdk 2>&1 | tail -3 && python3 -c "
446
446
  import sys, os
447
447
  from pathlib import Path
448
448
  for p in ([os.path.join(d, 'site-packages') for d in __import__('glob').glob(os.path.expanduser('~/.local/lib/python3.*/')) + __import__('glob').glob(os.path.expanduser('~/Library/Python/3.*/lib/python/'))]):
@@ -2596,6 +2596,128 @@ pulls** -- `openrunner gpu run --image ...` resolves the org's stored registry.)
2596
2596
  """
2597
2597
 
2598
2598
 
2599
+ DRIFT_CMD = """---
2600
+ name: {prefix}drift
2601
+ description: Instrument an inference API/service to report per-prediction events to OpenRunner inference-drift monitoring (distribution shift / PSI), segment by metadata, then watch + alert -- no raw payloads stored, only the metrics you choose
2602
+ argument-hint: "[project org/name]"
2603
+ allowed-tools:
2604
+ - Bash
2605
+ - Read
2606
+ - Edit
2607
+ - AskUserQuestion
2608
+ ---
2609
+
2610
+ Add **inference-drift monitoring** to an API/service: after each prediction,
2611
+ report a lightweight event (input features + output metrics) to OpenRunner, which
2612
+ tracks distribution shift (PSI), per-segment health and A/B. Only the numbers +
2613
+ tags you send are stored -- never the raw inputs/outputs.
2614
+
2615
+ ## The event shape (one per inference)
2616
+
2617
+ - `inference_id` -- your request/prediction id (str).
2618
+ - `metadata` -- dict of scalars OR lists (the axes you'll slice by), e.g.
2619
+ `{{"model": "v3", "lang": ["fr", "en"], "route": "asr", "region": "eu"}}`.
2620
+ - `metrics` -- dict of floats to watch, e.g.
2621
+ `{{"confidence": 0.92, "latency_ms": 180, "tokens": 57, "input_len": 12.4}}`.
2622
+ - `monitor` (optional) -- the drift stream name; use one per model/endpoint.
2623
+ - `event_time` (optional) -- ISO timestamp; defaults to now.
2624
+
2625
+ Choose metrics that reveal drift: output confidence/score, input length / feature
2626
+ stats, latency, class distribution. Metadata = segments to localise a drift.
2627
+
2628
+ ## Step 1 -- resolve the project id
2629
+
2630
+ ```bash
2631
+ openrunner login
2632
+ python3 -c "
2633
+ from openrunner.api_client import APIClient
2634
+ import json, os
2635
+ c = APIClient(base_url=os.environ.get('OPENRUNNER_BASE_URL','https://openrun.gladia.io'),
2636
+ api_key=os.environ['OPENRUNNER_API_KEY'])
2637
+ print([(p['name'], p['id']) for p in c.list_projects()])
2638
+ "
2639
+ ```
2640
+
2641
+ ## Step 2 -- instrument (NON-BLOCKING) -- FastAPI example
2642
+
2643
+ Report AFTER responding, batched on a background thread, so you never add latency
2644
+ to the request. The ingest endpoint answers **429 + Retry-After** under load (the
2645
+ client backs off) -- so drop events rather than block the request path.
2646
+
2647
+ ```python
2648
+ import os, threading, queue, atexit
2649
+ from openrunner.api_client import APIClient
2650
+
2651
+ PROJECT_ID = "..." # from step 1
2652
+ _client = APIClient(base_url=os.environ.get("OPENRUNNER_BASE_URL", "https://openrun.gladia.io"),
2653
+ api_key=os.environ["OPENRUNNER_API_KEY"])
2654
+ _q: queue.Queue = queue.Queue(maxsize=10000)
2655
+
2656
+ def _flush_loop():
2657
+ buf = []
2658
+ while True:
2659
+ ev = _q.get()
2660
+ if ev is not None:
2661
+ buf.append(ev)
2662
+ if buf and (ev is None or len(buf) >= 200):
2663
+ _client.post_inference_events(PROJECT_ID, buf, monitor="asr-prod")
2664
+ buf = []
2665
+ if ev is None:
2666
+ return
2667
+
2668
+ threading.Thread(target=_flush_loop, daemon=True).start()
2669
+ atexit.register(lambda: _q.put(None))
2670
+
2671
+ def record_inference(req_id, metadata, metrics):
2672
+ try:
2673
+ _q.put_nowait({{"inference_id": req_id, "metadata": metadata, "metrics": metrics}})
2674
+ except queue.Full:
2675
+ pass # never block or fail the request because of monitoring
2676
+
2677
+ # ... in your endpoint, AFTER producing the result:
2678
+ record_inference(
2679
+ req_id,
2680
+ {{"model": "v3", "lang": lang, "route": "asr"}},
2681
+ {{"confidence": conf, "latency_ms": dt_ms, "audio_s": duration}},
2682
+ )
2683
+ ```
2684
+
2685
+ **Non-Python service?** POST the events directly:
2686
+
2687
+ ```
2688
+ POST /api/v1/projects/PROJECT_ID/inference-drift/ingest
2689
+ Authorization: Bearer <API_KEY>
2690
+ {{ "monitor": "asr-prod",
2691
+ "events": [ {{"inference_id": "r1", "metadata": {{"lang": "fr"}}, "metrics": {{"confidence": 0.9}}}} ] }}
2692
+ -> {{"ingested": n}} (429 + Retry-After under load -> back off)
2693
+ ```
2694
+
2695
+ **Batch offline** from a JSON file instead of instrumenting:
2696
+
2697
+ ```bash
2698
+ openrunner drift report events.json --project ORG/NAME --monitor asr-prod
2699
+ ```
2700
+
2701
+ ## Step 3 -- watch + alert
2702
+
2703
+ - UI: the **Drift** menu -> overview / timeseries / per-segment PSI / A/B.
2704
+ - CLI:
2705
+ - `openrunner drift monitors --project ORG/NAME`
2706
+ - `openrunner drift check --project ORG/NAME --metric confidence` (drift verdict)
2707
+ - `openrunner drift ab --project ORG/NAME --metric confidence --variant-a v2 --variant-b v3`
2708
+ - `openrunner drift ask --project ORG/NAME "did latency drift this week?"`
2709
+ - MCP (if the OpenRunner server is registered): the drift tools answer the same in-session.
2710
+
2711
+ ## Notes
2712
+
2713
+ - **Nothing raw is stored** -- only the metrics + metadata you send.
2714
+ - One `monitor` per model/endpoint; segment with metadata (lang / region / route /
2715
+ model version) so a drift can be traced to a slice.
2716
+ - **Sample** at high QPS (report 1 in N) -- PSI needs volume, not every event.
2717
+ - Old days age out to S3 parquet automatically (a hot window stays in Postgres).
2718
+ """
2719
+
2720
+
2599
2721
  def install_claude_code() -> list[str]:
2600
2722
  """Install commands in ~/.claude/commands/openrunner/."""
2601
2723
  cmd_dir = Path.home() / ".claude" / "commands" / "openrunner"
@@ -2630,6 +2752,7 @@ def install_claude_code() -> list[str]:
2630
2752
  "derive-dataset.md": DERIVE_DATASET_CMD,
2631
2753
  "launch-gpu.md": LAUNCH_GPU_CMD,
2632
2754
  "registry.md": REGISTRY_CMD,
2755
+ "drift.md": DRIFT_CMD,
2633
2756
  }
2634
2757
 
2635
2758
  files = []
@@ -2832,6 +2955,7 @@ def _install_all_commands_to_dir(cmd_dir: Path, prefix: str = "openrunner:") ->
2832
2955
  "derive-dataset.md": DERIVE_DATASET_CMD,
2833
2956
  "launch-gpu.md": LAUNCH_GPU_CMD,
2834
2957
  "registry.md": REGISTRY_CMD,
2958
+ "drift.md": DRIFT_CMD,
2835
2959
  }
2836
2960
 
2837
2961
  files = []
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.37.4"
3
+ version = "2.37.5"
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