openrunner-sdk 2.37.5__tar.gz → 2.37.6__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.5 → openrunner_sdk-2.37.6}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/install_commands.py +132 -0
  4. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/pyproject.toml +1 -1
  5. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/.gitignore +0 -0
  6. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/=6.0 +0 -0
  7. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/=8.1 +0 -0
  8. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/README.md +0 -0
  9. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/CLAUDE.md +0 -0
  10. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/_safepath.py +0 -0
  11. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/_secret_rules.py +0 -0
  12. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/api_client.py +0 -0
  13. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/artifact.py +0 -0
  14. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/autoresearch.py +0 -0
  15. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/buffer.py +0 -0
  16. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/cache.py +0 -0
  17. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/cli.py +0 -0
  18. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/config.py +0 -0
  19. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/cost.py +0 -0
  20. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/dataset.py +0 -0
  21. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/datasets.py +0 -0
  22. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/environment.py +0 -0
  23. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/evaluation.py +0 -0
  24. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/feedback.py +0 -0
  25. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/git_info.py +0 -0
  26. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/__init__.py +0 -0
  27. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/api_integration.py +0 -0
  28. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/cost_guard.py +0 -0
  29. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/gpu_types.py +0 -0
  30. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/price_compare.py +0 -0
  31. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/provider_base.py +0 -0
  32. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/__init__.py +0 -0
  33. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/lambda_cloud.py +0 -0
  34. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/modal_provider.py +0 -0
  35. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/ovhcloud.py +0 -0
  36. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/runpod.py +0 -0
  37. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/providers/vastai.py +0 -0
  38. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/runner.py +0 -0
  39. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/gpu/workspace_sync.py +0 -0
  40. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/guardrails.py +0 -0
  41. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/handover.py +0 -0
  42. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/hooks/patent-lab-post-commit +0 -0
  43. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/__init__.py +0 -0
  44. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/accelerate.py +0 -0
  45. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/anthropic_tracer.py +0 -0
  46. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/catboost.py +0 -0
  47. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/diffusers.py +0 -0
  48. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/fastai.py +0 -0
  49. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/forced_alignment.py +0 -0
  50. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/gladia.py +0 -0
  51. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/gymnasium.py +0 -0
  52. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/huggingface.py +0 -0
  53. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/hydra.py +0 -0
  54. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/ignite.py +0 -0
  55. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/jax.py +0 -0
  56. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/keras.py +0 -0
  57. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/langchain.py +0 -0
  58. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/lightgbm.py +0 -0
  59. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/lightning.py +0 -0
  60. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/llamaindex.py +0 -0
  61. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/openai_finetune.py +0 -0
  62. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/openai_tracer.py +0 -0
  63. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/optuna.py +0 -0
  64. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/pytorch.py +0 -0
  65. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/sb3.py +0 -0
  66. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/sklearn.py +0 -0
  67. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/skypilot.py +0 -0
  68. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/tensorflow.py +0 -0
  69. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/trl.py +0 -0
  70. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/tts.py +0 -0
  71. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/ultralytics.py +0 -0
  72. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/voice_agent.py +0 -0
  73. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/whisper.py +0 -0
  74. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/integration/xgboost.py +0 -0
  75. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/launch.py +0 -0
  76. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/machine.py +0 -0
  77. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/mcp_server.py +0 -0
  78. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/media.py +0 -0
  79. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/migrate.py +0 -0
  80. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/model.py +0 -0
  81. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/model_card.py +0 -0
  82. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/offline.py +0 -0
  83. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/patent_scan.py +0 -0
  84. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/pii.py +0 -0
  85. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/plot.py +0 -0
  86. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/projects.py +0 -0
  87. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/prompt.py +0 -0
  88. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/query_api.py +0 -0
  89. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/redact.py +0 -0
  90. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/reload.py +0 -0
  91. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/research.py +0 -0
  92. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/research_policy.py +0 -0
  93. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/run.py +0 -0
  94. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/scorers.py +0 -0
  95. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/sender.py +0 -0
  96. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/session.py +0 -0
  97. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/settings.py +0 -0
  98. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/summary.py +0 -0
  99. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/sweep.py +0 -0
  100. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/sync.py +0 -0
  101. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/system_metrics.py +0 -0
  102. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/tensorboard.py +0 -0
  103. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/tools/__init__.py +0 -0
  104. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/tools/patent_report.py +0 -0
  105. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/trace.py +0 -0
  106. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/transcript_formatter.py +0 -0
  107. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/wal.py +0 -0
  108. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/wandb_compat/__init__.py +0 -0
  109. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/wandb_compat/_shim.py +0 -0
  110. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/openrunner/wer.py +0 -0
  111. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/scripts/gen_betterleaks_rules.py +0 -0
  112. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/__init__.py +0 -0
  113. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/conftest.py +0 -0
  114. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
  115. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
  116. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
  117. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
  118. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
  119. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
  120. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
  121. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
  122. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
  123. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
  124. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
  125. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
  126. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/integration/__init__.py +0 -0
  127. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/integration/conftest.py +0 -0
  128. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/integration/test_artifact_round_trip.py +0 -0
  129. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_alert.py +0 -0
  130. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_aliases.py +0 -0
  131. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_api_client.py +0 -0
  132. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_artifact.py +0 -0
  133. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_buffer.py +0 -0
  134. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_cache.py +0 -0
  135. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_class_scorers.py +0 -0
  136. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_cli.py +0 -0
  137. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_config.py +0 -0
  138. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_evaluation.py +0 -0
  139. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_finish.py +0 -0
  140. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_git_info.py +0 -0
  141. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/__init__.py +0 -0
  142. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/conftest.py +0 -0
  143. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_cost_guard.py +0 -0
  144. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_gpu_types.py +0 -0
  145. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_lambda.py +0 -0
  146. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_modal.py +0 -0
  147. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_ovhcloud.py +0 -0
  148. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_price_compare.py +0 -0
  149. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_provider_base.py +0 -0
  150. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_runner.py +0 -0
  151. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_runpod.py +0 -0
  152. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
  153. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_vastai.py +0 -0
  154. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_gpu/test_workspace_sync.py +0 -0
  155. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_init.py +0 -0
  156. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_install_commands.py +0 -0
  157. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_fastai.py +0 -0
  158. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_huggingface.py +0 -0
  159. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_keras.py +0 -0
  160. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_langchain.py +0 -0
  161. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_lightning.py +0 -0
  162. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_pytorch.py +0 -0
  163. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_sklearn.py +0 -0
  164. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_integration_xgboost.py +0 -0
  165. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_launch.py +0 -0
  166. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_log.py +0 -0
  167. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_log_code.py +0 -0
  168. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_mcp_decisions.py +0 -0
  169. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_mcp_monitor.py +0 -0
  170. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_mcp_predictions.py +0 -0
  171. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_media.py +0 -0
  172. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_migrate.py +0 -0
  173. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_offline.py +0 -0
  174. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_offline_sync.py +0 -0
  175. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_pii.py +0 -0
  176. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_plot.py +0 -0
  177. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_query_api.py +0 -0
  178. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_resume.py +0 -0
  179. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_sdk_features.py +0 -0
  180. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_sender.py +0 -0
  181. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_session_sync.py +0 -0
  182. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_summary.py +0 -0
  183. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_sweep.py +0 -0
  184. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_system_metrics.py +0 -0
  185. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/tests/test_trace.py +0 -0
  186. {openrunner_sdk-2.37.5 → openrunner_sdk-2.37.6}/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.5
3
+ Version: 2.37.6
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.5"
184
+ __version__ = "2.37.6"
185
185
 
186
186
  logger = logging.getLogger("openrunner")
187
187
 
@@ -2718,6 +2718,134 @@ openrunner drift report events.json --project ORG/NAME --monitor asr-prod
2718
2718
  """
2719
2719
 
2720
2720
 
2721
+ DRIFT_INSTALL_CMD = """---
2722
+ name: {prefix}drift-install
2723
+ description: Actually wire inference-drift monitoring INTO the API in THIS repo -- detect the framework + endpoints, add a non-blocking reporter, insert record_inference() after each prediction, add the dependency, and verify with a live event (vs /openrunner:drift which only explains it)
2724
+ argument-hint: "[project org/name] [--endpoint PATH] [--sample N]"
2725
+ allowed-tools:
2726
+ - Bash
2727
+ - Read
2728
+ - Edit
2729
+ - Write
2730
+ - Grep
2731
+ - Glob
2732
+ - AskUserQuestion
2733
+ ---
2734
+
2735
+ Instrument the inference API in the **current repo** with OpenRunner drift
2736
+ monitoring -- edit the code, don't just describe it (see `/openrunner:drift` for
2737
+ the reference). Do each step; ask only when genuinely ambiguous.
2738
+
2739
+ ## Step 1 -- detect the API + inference endpoint(s)
2740
+ - Identify the framework (grep `fastapi`, `flask`, `django`, `express`,
2741
+ `@app.post`, `APIRouter`, route decorators) and the file(s) with the
2742
+ **inference** endpoint(s) -- the handlers that return model predictions.
2743
+ - If several, ask which to instrument (default: the prediction routes). Honour
2744
+ `--endpoint PATH` when given.
2745
+
2746
+ ## Step 2 -- resolve project + creds
2747
+ - `openrunner login` if needed. Resolve the project id (from the `org/name` arg,
2748
+ else `APIClient.list_projects()`; ask if ambiguous).
2749
+ - Creds are read from the service env at runtime: `OPENRUNNER_API_KEY`
2750
+ (+ `OPENRUNNER_BASE_URL`). Confirm they are set in the deployment env; **never
2751
+ hardcode the key**. Store `PROJECT_ID` as a module constant or env var.
2752
+
2753
+ ## Step 3 -- add the non-blocking reporter module
2754
+ Create `openrunner_drift.py` (match the repo layout) with a background batcher
2755
+ (thread + `queue`, drop on full, 200/flush, 429 backoff via the SDK) exposing
2756
+ `record_inference(inference_id, metadata, metrics)` -- the pattern from
2757
+ `/openrunner:drift`. For an async framework, use an asyncio task + `asyncio.Queue`
2758
+ instead of a thread.
2759
+
2760
+ ## Step 4 -- instrument each endpoint
2761
+ AFTER the response is produced, insert a wrapped `record_inference(...)`:
2762
+ - `inference_id` = the request id / a `uuid4().hex`.
2763
+ - `metadata` = input axes present in the handler: model version, language, route,
2764
+ region, tenant/customer.
2765
+ - `metrics` = outputs + **latency measured around the model call** (wrap the
2766
+ predict call with a monotonic timer), output confidence/score, input length,
2767
+ token count.
2768
+ - Wrap in try/except (or the queue put_nowait) so monitoring **never** breaks or
2769
+ slows the request. Apply `--sample N` (report 1 in N) if given.
2770
+
2771
+ ## Step 5 -- dependency + verify
2772
+ - Add `openrunner-sdk` to `requirements.txt` / `pyproject.toml` if missing.
2773
+ - Import-check the new module; send ONE synthetic event
2774
+ (`post_inference_events(PROJECT_ID, [{{...}}])`) and confirm `ingested: 1`.
2775
+ - Point the user at the **Drift** UI and `openrunner drift check --project ORG/NAME
2776
+ --metric confidence`.
2777
+
2778
+ ## Guardrails
2779
+ - NEVER block or fail the request path for monitoring (drop on queue-full).
2780
+ - NEVER store raw inputs/outputs -- only the chosen metrics + metadata.
2781
+ - NEVER hardcode the API key -- read from env.
2782
+ - Keep the diff minimal + match the repo's style/imports.
2783
+ """
2784
+
2785
+
2786
+ BUILD_API_CMD = """---
2787
+ name: {prefix}build-api
2788
+ description: Scaffold a production inference API for a model in THIS repo -- FastAPI /predict + /health, typed request/response, Dockerfile (pushable via the OpenRunner registry), env config, and optional baked-in drift monitoring; ready to deploy on governed GPUs
2789
+ argument-hint: "[--model PATH_OR_ARTIFACT] [--framework fastapi] [--drift] [--registry NAME/ns]"
2790
+ allowed-tools:
2791
+ - Bash
2792
+ - Read
2793
+ - Edit
2794
+ - Write
2795
+ - Grep
2796
+ - Glob
2797
+ - AskUserQuestion
2798
+ ---
2799
+
2800
+ Scaffold a serving API for a model in the **current repo** -- a real, runnable
2801
+ skeleton, not a description. Ask only what you can't infer.
2802
+
2803
+ ## Step 1 -- understand the model
2804
+ - Find the model: a local checkpoint, an `openrunner.use_model(...)` artifact, a
2805
+ HF id, or a `predict()` the user points at (`--model`). Ask if unclear.
2806
+ - Determine input -> output shape (text/audio/image in; label/score/text out) to
2807
+ type the request/response.
2808
+
2809
+ ## Step 2 -- scaffold the API (default FastAPI)
2810
+ Write a minimal, production-shaped service:
2811
+ - `app/main.py` -- FastAPI app; load the model ONCE at startup (lifespan), a typed
2812
+ `POST /predict` (pydantic request/response), `GET /health` (model-loaded probe),
2813
+ `GET /` version. Batch-friendly handler; no blocking work in the event loop for
2814
+ heavy models (run in a threadpool / worker).
2815
+ - `app/model.py` -- load + `predict()` wrapper (pull weights via
2816
+ `openrunner.use_model` when the model is an OpenRunner artifact).
2817
+ - `requirements.txt` / `pyproject.toml`, `.env.example` (PORT, model ref,
2818
+ `OPENRUNNER_*`), `README.md` (run + curl example).
2819
+ - `Dockerfile` -- slim base, install deps, copy app, `CMD` uvicorn on `$PORT`;
2820
+ GPU base image if the model needs CUDA.
2821
+
2822
+ ## Step 3 -- (optional) bake in drift monitoring
2823
+ If `--drift` (or the user wants it): run the `/openrunner:drift-install` flow on
2824
+ the freshly scaffolded `/predict` -- add the non-blocking reporter + a
2825
+ `record_inference(...)` after the prediction (latency, confidence, input length).
2826
+
2827
+ ## Step 4 -- (optional) container + deploy path
2828
+ - If `--registry NAME/ns`: show the governed push --
2829
+ `docker build -t registry.openrun.gladia.io/<ns>/<name>:v1 . && openrunner
2830
+ registry login && docker push ...` (the OpenRunner broker proxies to the org's
2831
+ upstream; see `/openrunner:registry`).
2832
+ - Note the deploy path: `openrunner gpu run --image <that image> ...` today, and
2833
+ the governed **Deployments** UI (image + GPU + min/max nodes) when available.
2834
+
2835
+ ## Step 5 -- verify it runs
2836
+ - `uvicorn app.main:app` locally (or `python -m app`), `curl /health` -> ok,
2837
+ `curl -X POST /predict` with a sample payload -> a real response.
2838
+ - Report the run command, the curl example, and the build/push/deploy one-liners.
2839
+
2840
+ ## Guardrails
2841
+ - Load the model once (startup), not per request; run heavy inference off the
2842
+ event loop.
2843
+ - Type the API (pydantic) and add `/health` so it's deploy/LB-ready.
2844
+ - Read config (model ref, keys, port) from env -- never hardcode secrets.
2845
+ - Keep it minimal + runnable; match the repo's language/stack if one exists.
2846
+ """
2847
+
2848
+
2721
2849
  def install_claude_code() -> list[str]:
2722
2850
  """Install commands in ~/.claude/commands/openrunner/."""
2723
2851
  cmd_dir = Path.home() / ".claude" / "commands" / "openrunner"
@@ -2753,6 +2881,8 @@ def install_claude_code() -> list[str]:
2753
2881
  "launch-gpu.md": LAUNCH_GPU_CMD,
2754
2882
  "registry.md": REGISTRY_CMD,
2755
2883
  "drift.md": DRIFT_CMD,
2884
+ "drift-install.md": DRIFT_INSTALL_CMD,
2885
+ "build-api.md": BUILD_API_CMD,
2756
2886
  }
2757
2887
 
2758
2888
  files = []
@@ -2956,6 +3086,8 @@ def _install_all_commands_to_dir(cmd_dir: Path, prefix: str = "openrunner:") ->
2956
3086
  "launch-gpu.md": LAUNCH_GPU_CMD,
2957
3087
  "registry.md": REGISTRY_CMD,
2958
3088
  "drift.md": DRIFT_CMD,
3089
+ "drift-install.md": DRIFT_INSTALL_CMD,
3090
+ "build-api.md": BUILD_API_CMD,
2959
3091
  }
2960
3092
 
2961
3093
  files = []
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.37.5"
3
+ version = "2.37.6"
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