openrunner-sdk 2.37.6__tar.gz → 2.37.7__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.6 → openrunner_sdk-2.37.7}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/api_client.py +33 -0
  4. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cli.py +33 -0
  5. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/install_commands.py +11 -4
  6. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/pyproject.toml +1 -1
  7. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/.gitignore +0 -0
  8. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/=6.0 +0 -0
  9. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/=8.1 +0 -0
  10. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/README.md +0 -0
  11. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/CLAUDE.md +0 -0
  12. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/_safepath.py +0 -0
  13. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/_secret_rules.py +0 -0
  14. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/artifact.py +0 -0
  15. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/autoresearch.py +0 -0
  16. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/buffer.py +0 -0
  17. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cache.py +0 -0
  18. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/config.py +0 -0
  19. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/cost.py +0 -0
  20. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/dataset.py +0 -0
  21. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/datasets.py +0 -0
  22. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/environment.py +0 -0
  23. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/evaluation.py +0 -0
  24. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/feedback.py +0 -0
  25. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/git_info.py +0 -0
  26. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/__init__.py +0 -0
  27. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/api_integration.py +0 -0
  28. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/cost_guard.py +0 -0
  29. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/gpu_types.py +0 -0
  30. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/price_compare.py +0 -0
  31. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/provider_base.py +0 -0
  32. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/__init__.py +0 -0
  33. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/lambda_cloud.py +0 -0
  34. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/modal_provider.py +0 -0
  35. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/ovhcloud.py +0 -0
  36. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/runpod.py +0 -0
  37. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/providers/vastai.py +0 -0
  38. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/runner.py +0 -0
  39. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/gpu/workspace_sync.py +0 -0
  40. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/guardrails.py +0 -0
  41. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/handover.py +0 -0
  42. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/hooks/patent-lab-post-commit +0 -0
  43. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/__init__.py +0 -0
  44. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/accelerate.py +0 -0
  45. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/anthropic_tracer.py +0 -0
  46. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/catboost.py +0 -0
  47. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/diffusers.py +0 -0
  48. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/fastai.py +0 -0
  49. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/forced_alignment.py +0 -0
  50. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/gladia.py +0 -0
  51. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/gymnasium.py +0 -0
  52. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/huggingface.py +0 -0
  53. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/hydra.py +0 -0
  54. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/ignite.py +0 -0
  55. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/jax.py +0 -0
  56. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/keras.py +0 -0
  57. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/langchain.py +0 -0
  58. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/lightgbm.py +0 -0
  59. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/lightning.py +0 -0
  60. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/llamaindex.py +0 -0
  61. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/openai_finetune.py +0 -0
  62. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/openai_tracer.py +0 -0
  63. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/optuna.py +0 -0
  64. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/pytorch.py +0 -0
  65. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/sb3.py +0 -0
  66. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/sklearn.py +0 -0
  67. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/skypilot.py +0 -0
  68. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/tensorflow.py +0 -0
  69. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/trl.py +0 -0
  70. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/tts.py +0 -0
  71. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/ultralytics.py +0 -0
  72. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/voice_agent.py +0 -0
  73. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/whisper.py +0 -0
  74. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/integration/xgboost.py +0 -0
  75. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/launch.py +0 -0
  76. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/machine.py +0 -0
  77. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/mcp_server.py +0 -0
  78. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/media.py +0 -0
  79. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/migrate.py +0 -0
  80. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/model.py +0 -0
  81. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/model_card.py +0 -0
  82. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/offline.py +0 -0
  83. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/patent_scan.py +0 -0
  84. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/pii.py +0 -0
  85. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/plot.py +0 -0
  86. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/projects.py +0 -0
  87. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/prompt.py +0 -0
  88. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/query_api.py +0 -0
  89. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/redact.py +0 -0
  90. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/reload.py +0 -0
  91. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/research.py +0 -0
  92. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/research_policy.py +0 -0
  93. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/run.py +0 -0
  94. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/scorers.py +0 -0
  95. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sender.py +0 -0
  96. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/session.py +0 -0
  97. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/settings.py +0 -0
  98. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/summary.py +0 -0
  99. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sweep.py +0 -0
  100. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/sync.py +0 -0
  101. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/system_metrics.py +0 -0
  102. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tensorboard.py +0 -0
  103. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tools/__init__.py +0 -0
  104. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/tools/patent_report.py +0 -0
  105. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/trace.py +0 -0
  106. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/transcript_formatter.py +0 -0
  107. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wal.py +0 -0
  108. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wandb_compat/__init__.py +0 -0
  109. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wandb_compat/_shim.py +0 -0
  110. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/openrunner/wer.py +0 -0
  111. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/scripts/gen_betterleaks_rules.py +0 -0
  112. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/__init__.py +0 -0
  113. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/conftest.py +0 -0
  114. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
  115. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
  116. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
  117. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
  118. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
  119. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
  120. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
  121. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
  122. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
  123. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
  124. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
  125. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
  126. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/__init__.py +0 -0
  127. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/conftest.py +0 -0
  128. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/integration/test_artifact_round_trip.py +0 -0
  129. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_alert.py +0 -0
  130. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_aliases.py +0 -0
  131. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_api_client.py +0 -0
  132. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_artifact.py +0 -0
  133. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_buffer.py +0 -0
  134. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_cache.py +0 -0
  135. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_class_scorers.py +0 -0
  136. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_cli.py +0 -0
  137. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_config.py +0 -0
  138. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_evaluation.py +0 -0
  139. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_finish.py +0 -0
  140. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_git_info.py +0 -0
  141. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/__init__.py +0 -0
  142. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/conftest.py +0 -0
  143. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_cost_guard.py +0 -0
  144. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_gpu_types.py +0 -0
  145. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_lambda.py +0 -0
  146. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_modal.py +0 -0
  147. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_ovhcloud.py +0 -0
  148. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_price_compare.py +0 -0
  149. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_provider_base.py +0 -0
  150. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_runner.py +0 -0
  151. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_runpod.py +0 -0
  152. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
  153. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_vastai.py +0 -0
  154. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_gpu/test_workspace_sync.py +0 -0
  155. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_init.py +0 -0
  156. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_install_commands.py +0 -0
  157. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_fastai.py +0 -0
  158. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_huggingface.py +0 -0
  159. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_keras.py +0 -0
  160. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_langchain.py +0 -0
  161. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_lightning.py +0 -0
  162. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_pytorch.py +0 -0
  163. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_sklearn.py +0 -0
  164. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_integration_xgboost.py +0 -0
  165. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_launch.py +0 -0
  166. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_log.py +0 -0
  167. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_log_code.py +0 -0
  168. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_decisions.py +0 -0
  169. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_monitor.py +0 -0
  170. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_mcp_predictions.py +0 -0
  171. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_media.py +0 -0
  172. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_migrate.py +0 -0
  173. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_offline.py +0 -0
  174. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_offline_sync.py +0 -0
  175. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_pii.py +0 -0
  176. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_plot.py +0 -0
  177. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_query_api.py +0 -0
  178. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_resume.py +0 -0
  179. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sdk_features.py +0 -0
  180. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sender.py +0 -0
  181. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_session_sync.py +0 -0
  182. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_summary.py +0 -0
  183. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_sweep.py +0 -0
  184. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_system_metrics.py +0 -0
  185. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/tests/test_trace.py +0 -0
  186. {openrunner_sdk-2.37.6 → openrunner_sdk-2.37.7}/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.6
3
+ Version: 2.37.7
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.6"
184
+ __version__ = "2.37.7"
185
185
 
186
186
  logger = logging.getLogger("openrunner")
187
187
 
@@ -147,6 +147,39 @@ class APIClient:
147
147
  logger.warning("post_metrics failed: %s", e)
148
148
  return 0
149
149
 
150
+ def create_api_key(
151
+ self,
152
+ name: str,
153
+ scopes: list[str] | None = None,
154
+ scope_project_id: str | None = None,
155
+ scope_org_id: str | None = None,
156
+ ) -> dict[str, Any] | None:
157
+ """POST /users/me/api-keys -- mint a scoped API key.
158
+
159
+ ``scopes`` are fine-grained capability scopes, e.g.
160
+ ``["drift:read", "drift:write"]``; None/empty means full access.
161
+ ``scope_project_id`` / ``scope_org_id`` further restrict the key to a
162
+ single project/org. The plaintext key is returned ONCE, in the ``key``
163
+ field of the response dict -- it is never retrievable again.
164
+
165
+ Returns the created-key dict (incl. plaintext ``key``), or None on
166
+ failure.
167
+ """
168
+ try:
169
+ body: dict[str, Any] = {"name": name}
170
+ if scopes:
171
+ body["scopes"] = scopes
172
+ if scope_project_id:
173
+ body["scope_project_id"] = scope_project_id
174
+ if scope_org_id:
175
+ body["scope_org_id"] = scope_org_id
176
+ response = self._request("post", "/users/me/api-keys", json=body)
177
+ response.raise_for_status()
178
+ return response.json()
179
+ except Exception as e:
180
+ logger.warning("create_api_key failed: %s", e)
181
+ return None
182
+
150
183
  def post_inference_events(
151
184
  self,
152
185
  project_id: str,
@@ -4339,6 +4339,39 @@ def drift_group() -> None:
4339
4339
  pass
4340
4340
 
4341
4341
 
4342
+ @drift_group.command("key")
4343
+ @click.option("--project", "-p", default=None, help="Project org/name or UUID to scope the key to")
4344
+ @click.option("--name", "-n", default=None, help="Key name (default: drift-<project>)")
4345
+ @click.option("--read-only", is_flag=True, help="Mint a drift:read-only key (no ingest)")
4346
+ @click.option("--json", "as_json", is_flag=True, help="Print the key record as JSON")
4347
+ def drift_key(project, name, read_only, as_json) -> None:
4348
+ """Mint an API key scoped to inference-drift only (read+write by default).
4349
+
4350
+ The key carries ONLY ``drift:read``+``drift:write`` (or ``drift:read`` with
4351
+ --read-only) and is bound to the project — it cannot touch runs, datasets,
4352
+ artifacts, weights, or any other domain. Give this to a container/service
4353
+ that reports drift events instead of a full-access key. The plaintext key is
4354
+ shown ONCE; store it as the container's ``OPENRUNNER_API_KEY``.
4355
+ """
4356
+ import json as _json
4357
+
4358
+ client, pid = _drift_client_project(project)
4359
+ scopes = ["drift:read"] if read_only else ["drift:read", "drift:write"]
4360
+ key_name = name or f"drift-{(project or _load_settings().get('project') or pid)}".replace("/", "-")
4361
+ rec = client.create_api_key(key_name, scopes=scopes, scope_project_id=pid)
4362
+ client.close()
4363
+ if not rec or not rec.get("key"):
4364
+ click.echo("Error: failed to mint drift key (check login / project membership).", err=True)
4365
+ raise SystemExit(1)
4366
+ if as_json:
4367
+ click.echo(_json.dumps(rec))
4368
+ return
4369
+ click.echo(f"name: {rec.get('name')}")
4370
+ click.echo(f"scopes: {','.join(rec.get('scopes') or scopes)}")
4371
+ click.echo(f"key: {rec['key']}")
4372
+ click.echo("\nStore as the container env OPENRUNNER_API_KEY — shown only once.")
4373
+
4374
+
4342
4375
  @drift_group.command("report")
4343
4376
  @click.argument("events_json", type=click.Path(exists=True))
4344
4377
  @click.option("--project", "-p", default=None, help="Project org/name or UUID")
@@ -2743,12 +2743,19 @@ the reference). Do each step; ask only when genuinely ambiguous.
2743
2743
  - If several, ask which to instrument (default: the prediction routes). Honour
2744
2744
  `--endpoint PATH` when given.
2745
2745
 
2746
- ## Step 2 -- resolve project + creds
2746
+ ## Step 2 -- resolve project + mint a DRIFT-ONLY key for the container
2747
2747
  - `openrunner login` if needed. Resolve the project id (from the `org/name` arg,
2748
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.
2749
+ - **Mint a scoped key for this container** -- do NOT reuse the user's full key.
2750
+ Run `openrunner drift key --project ORG/NAME --name drift-<service>` (add
2751
+ `--json` to capture it). It returns a key carrying ONLY `drift:read` +
2752
+ `drift:write`, bound to that project: it can report/read drift and nothing else
2753
+ (no runs, datasets, artifacts, weights). Shown once.
2754
+ - Inject it as the container's `OPENRUNNER_API_KEY` (+ optional
2755
+ `OPENRUNNER_BASE_URL`) via `.env.example` / deploy secret -- **never hardcode
2756
+ the key** in source. Store `PROJECT_ID` as a module constant or env var.
2757
+ - If key minting fails (e.g. the user lacks membership), fall back to the
2758
+ existing `OPENRUNNER_API_KEY` from env and note it is broader than needed.
2752
2759
 
2753
2760
  ## Step 3 -- add the non-blocking reporter module
2754
2761
  Create `openrunner_drift.py` (match the repo layout) with a background batcher
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.37.6"
3
+ version = "2.37.7"
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