openrunner-sdk 2.37.32__tar.gz → 2.37.34__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.32 → openrunner_sdk-2.37.34}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cli.py +121 -0
  4. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/install_commands.py +8 -0
  5. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/pyproject.toml +1 -1
  6. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/.gitignore +0 -0
  7. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/=6.0 +0 -0
  8. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/=8.1 +0 -0
  9. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/README.md +0 -0
  10. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/CLAUDE.md +0 -0
  11. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/_safepath.py +0 -0
  12. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/_secret_rules.py +0 -0
  13. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/api_client.py +0 -0
  14. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/artifact.py +0 -0
  15. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/autoresearch.py +0 -0
  16. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/buffer.py +0 -0
  17. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cache.py +0 -0
  18. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/config.py +0 -0
  19. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/cost.py +0 -0
  20. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/dataset.py +0 -0
  21. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/datasets.py +0 -0
  22. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/environment.py +0 -0
  23. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/evaluation.py +0 -0
  24. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/feedback.py +0 -0
  25. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/git_info.py +0 -0
  26. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/__init__.py +0 -0
  27. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/api_integration.py +0 -0
  28. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/cost_guard.py +0 -0
  29. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/gpu_types.py +0 -0
  30. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/price_compare.py +0 -0
  31. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/provider_base.py +0 -0
  32. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/__init__.py +0 -0
  33. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/lambda_cloud.py +0 -0
  34. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/modal_provider.py +0 -0
  35. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/ovhcloud.py +0 -0
  36. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/runpod.py +0 -0
  37. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/providers/vastai.py +0 -0
  38. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/runner.py +0 -0
  39. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/gpu/workspace_sync.py +0 -0
  40. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/guardrails.py +0 -0
  41. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/handover.py +0 -0
  42. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/hooks/patent-lab-post-commit +0 -0
  43. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/__init__.py +0 -0
  44. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/accelerate.py +0 -0
  45. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/anthropic_tracer.py +0 -0
  46. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/catboost.py +0 -0
  47. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/diffusers.py +0 -0
  48. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/fastai.py +0 -0
  49. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/forced_alignment.py +0 -0
  50. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/gladia.py +0 -0
  51. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/gymnasium.py +0 -0
  52. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/huggingface.py +0 -0
  53. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/hydra.py +0 -0
  54. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/ignite.py +0 -0
  55. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/jax.py +0 -0
  56. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/keras.py +0 -0
  57. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/langchain.py +0 -0
  58. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/lightgbm.py +0 -0
  59. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/lightning.py +0 -0
  60. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/llamaindex.py +0 -0
  61. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/openai_finetune.py +0 -0
  62. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/openai_tracer.py +0 -0
  63. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/optuna.py +0 -0
  64. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/pytorch.py +0 -0
  65. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/sb3.py +0 -0
  66. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/sklearn.py +0 -0
  67. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/skypilot.py +0 -0
  68. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/tensorflow.py +0 -0
  69. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/trl.py +0 -0
  70. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/tts.py +0 -0
  71. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/ultralytics.py +0 -0
  72. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/voice_agent.py +0 -0
  73. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/whisper.py +0 -0
  74. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/integration/xgboost.py +0 -0
  75. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/launch.py +0 -0
  76. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/machine.py +0 -0
  77. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/mcp_server.py +0 -0
  78. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/media.py +0 -0
  79. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/migrate.py +0 -0
  80. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/model.py +0 -0
  81. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/model_card.py +0 -0
  82. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/offline.py +0 -0
  83. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/patent_scan.py +0 -0
  84. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/pii.py +0 -0
  85. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/plot.py +0 -0
  86. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/projects.py +0 -0
  87. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/prompt.py +0 -0
  88. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/query_api.py +0 -0
  89. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/redact.py +0 -0
  90. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/reload.py +0 -0
  91. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/research.py +0 -0
  92. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/research_policy.py +0 -0
  93. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/run.py +0 -0
  94. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/scorers.py +0 -0
  95. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sender.py +0 -0
  96. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/session.py +0 -0
  97. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/settings.py +0 -0
  98. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/summary.py +0 -0
  99. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sweep.py +0 -0
  100. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/sync.py +0 -0
  101. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/system_metrics.py +0 -0
  102. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tensorboard.py +0 -0
  103. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tools/__init__.py +0 -0
  104. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/tools/patent_report.py +0 -0
  105. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/trace.py +0 -0
  106. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/transcript_formatter.py +0 -0
  107. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wal.py +0 -0
  108. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wandb_compat/__init__.py +0 -0
  109. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wandb_compat/_shim.py +0 -0
  110. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/openrunner/wer.py +0 -0
  111. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/scripts/gen_betterleaks_rules.py +0 -0
  112. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/__init__.py +0 -0
  113. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/conftest.py +0 -0
  114. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/config.json +0 -0
  115. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/metadata.json +0 -0
  116. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/metrics.jsonl +0 -0
  117. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-aaa/summary.json +0 -0
  118. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/manifest.json +0 -0
  119. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/model-checkpoint/weights.bin +0 -0
  120. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/manifest.json +0 -0
  121. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/artifacts/sample-image/preview.png +0 -0
  122. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/config.json +0 -0
  123. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/metadata.json +0 -0
  124. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/metrics.jsonl +0 -0
  125. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/fixtures/wandb-export-mini/run-bbb/summary.json +0 -0
  126. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/__init__.py +0 -0
  127. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/conftest.py +0 -0
  128. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/integration/test_artifact_round_trip.py +0 -0
  129. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_alert.py +0 -0
  130. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_aliases.py +0 -0
  131. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_api_client.py +0 -0
  132. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_artifact.py +0 -0
  133. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_buffer.py +0 -0
  134. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_cache.py +0 -0
  135. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_class_scorers.py +0 -0
  136. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_cli.py +0 -0
  137. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_config.py +0 -0
  138. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_evaluation.py +0 -0
  139. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_finish.py +0 -0
  140. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_git_info.py +0 -0
  141. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/__init__.py +0 -0
  142. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/conftest.py +0 -0
  143. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_cost_guard.py +0 -0
  144. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_gpu_types.py +0 -0
  145. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_lambda.py +0 -0
  146. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_modal.py +0 -0
  147. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_ovhcloud.py +0 -0
  148. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_price_compare.py +0 -0
  149. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_provider_base.py +0 -0
  150. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_runner.py +0 -0
  151. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_runpod.py +0 -0
  152. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_sdk_gpu_api.py +0 -0
  153. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_vastai.py +0 -0
  154. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_gpu/test_workspace_sync.py +0 -0
  155. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_init.py +0 -0
  156. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_install_commands.py +0 -0
  157. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_fastai.py +0 -0
  158. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_huggingface.py +0 -0
  159. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_keras.py +0 -0
  160. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_langchain.py +0 -0
  161. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_lightning.py +0 -0
  162. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_pytorch.py +0 -0
  163. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_sklearn.py +0 -0
  164. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_integration_xgboost.py +0 -0
  165. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_launch.py +0 -0
  166. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_log.py +0 -0
  167. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_log_code.py +0 -0
  168. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_decisions.py +0 -0
  169. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_monitor.py +0 -0
  170. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_mcp_predictions.py +0 -0
  171. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_media.py +0 -0
  172. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_migrate.py +0 -0
  173. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_offline.py +0 -0
  174. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_offline_sync.py +0 -0
  175. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_pii.py +0 -0
  176. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_plot.py +0 -0
  177. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_query_api.py +0 -0
  178. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_resume.py +0 -0
  179. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sdk_features.py +0 -0
  180. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sender.py +0 -0
  181. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_session_sync.py +0 -0
  182. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_summary.py +0 -0
  183. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_sweep.py +0 -0
  184. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_system_metrics.py +0 -0
  185. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/tests/test_trace.py +0 -0
  186. {openrunner_sdk-2.37.32 → openrunner_sdk-2.37.34}/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.32
3
+ Version: 2.37.34
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.32"
184
+ __version__ = "2.37.34"
185
185
 
186
186
  logger = logging.getLogger("openrunner")
187
187
 
@@ -4825,6 +4825,57 @@ def deploy_rm(deployment_id, project) -> None:
4825
4825
  click.echo(f"Deployment {d['name']} deleted (replicas terminating).")
4826
4826
 
4827
4827
 
4828
+ @deploy_group.command("call")
4829
+ @click.argument("deployment_id")
4830
+ @click.argument("path", default="")
4831
+ @click.option("--project", "-p", default=None, help="Project org/name or UUID")
4832
+ @click.option("--method", "-X", default="POST", help="HTTP method (default POST)")
4833
+ @click.option("--data", "-d", default=None, help="Request body (string). '@file' reads a file.")
4834
+ @click.option("--header", "-H", "headers", multiple=True, help="Extra header 'K: V' (repeatable)")
4835
+ def deploy_call(deployment_id, path, project, method, data, headers) -> None:
4836
+ """Call a deployment's HTTP endpoint via the governed router (LB across live
4837
+ replicas). PATH is appended to the deployment's proxy base, e.g. 'predict'.
4838
+
4839
+ Example:
4840
+ openrunner deploy call <id> predict -p ORG/NAME -d '{"text":"hi"}'
4841
+ """
4842
+ settings = _load_settings()
4843
+ api_key = settings.get("api_key")
4844
+ base_url = settings.get("base_url", "http://localhost:8000").rstrip("/")
4845
+ if not api_key:
4846
+ click.echo("Error: Not logged in.", err=True); raise SystemExit(1)
4847
+ _c = APIClient(base_url=base_url, api_key=api_key)
4848
+ proj = project or settings.get("project")
4849
+ pid = proj
4850
+ if proj and ("/" in proj or "-" not in proj):
4851
+ want = proj.split("/")[-1].lower()
4852
+ m = next((p for p in _c.list_projects()
4853
+ if str(p.get("slug", "")).lower() == want or str(p.get("name", "")).lower() == want), None)
4854
+ if m:
4855
+ pid = m["id"]
4856
+ _c.close()
4857
+ if data and data.startswith("@"):
4858
+ data = Path(data[1:]).read_text()
4859
+ hdrs = {"Authorization": f"Bearer {api_key}"}
4860
+ for h in headers:
4861
+ if ":" in h:
4862
+ k, v = h.split(":", 1)
4863
+ hdrs[k.strip()] = v.strip()
4864
+ if data and not any(k.lower() == "content-type" for k in hdrs):
4865
+ hdrs["Content-Type"] = "application/json"
4866
+ url = f"{base_url}/api/v1/projects/{pid}/deployments/{deployment_id}/proxy/{path.lstrip('/')}"
4867
+ import httpx
4868
+ try:
4869
+ r = httpx.request(method.upper(), url, headers=hdrs, content=data, timeout=300.0)
4870
+ except Exception as e:
4871
+ click.echo(f"call failed: {e}", err=True); raise SystemExit(1)
4872
+ if r.status_code == 503:
4873
+ click.echo("503 — no live replica yet (still starting or scaled to zero).", err=True)
4874
+ raise SystemExit(1)
4875
+ click.echo(r.text)
4876
+ raise SystemExit(0 if r.status_code < 400 else 1)
4877
+
4878
+
4828
4879
  # ---------------------------------------------------------------------------
4829
4880
  # register / hosts — self-hosted (BYO) GPU compute hosts
4830
4881
  # ---------------------------------------------------------------------------
@@ -5578,3 +5629,73 @@ def session_close(name, org, runner_id) -> None:
5578
5629
  client = _plain_client(); org_id = _resolve_org_id(client, org)
5579
5630
  st, out = _run_on_runner(client, org_id, runner_id, f"tmux kill-session -t {name} && echo 'closed {name}'"); client.close()
5580
5631
  click.echo(out.rstrip() if out else st)
5632
+
5633
+
5634
+ @session_group.command("watch")
5635
+ @click.argument("name")
5636
+ @_sess_common
5637
+ @click.option("--interval", default=1.0, type=float, help="Seconds between pane captures")
5638
+ def session_watch(name, org, runner_id, interval) -> None:
5639
+ """Live-tail a session's pane (repeated capture, redraw). Ctrl-C to stop.
5640
+
5641
+ Near-real-time view without a persistent connection — polls the pane at
5642
+ --interval. For a true real-time TTY use the pod's --web browser terminal.
5643
+ """
5644
+ import time as _time
5645
+
5646
+ if not _SESSION_RE.match(name):
5647
+ click.echo("Invalid session name.", err=True); raise SystemExit(1)
5648
+ client = _plain_client(); org_id = _resolve_org_id(client, org)
5649
+ click.echo(f"Watching session '{name}' (every {interval}s) — Ctrl-C to stop.")
5650
+ last = None
5651
+ try:
5652
+ while True:
5653
+ st, out = _run_on_runner(client, org_id, runner_id, f"tmux capture-pane -t {name} -p")
5654
+ if out != last:
5655
+ click.clear()
5656
+ click.echo(f"[{name} @ runner {runner_id[:8]}]")
5657
+ click.echo(out.rstrip() if out else st)
5658
+ last = out
5659
+ _time.sleep(max(0.3, interval))
5660
+ except KeyboardInterrupt:
5661
+ click.echo("\nStopped watching.")
5662
+ finally:
5663
+ client.close()
5664
+
5665
+
5666
+ @session_group.command("shell")
5667
+ @click.argument("name")
5668
+ @_sess_common
5669
+ @click.option("--wait", default=0.6, type=float, help="Seconds to wait before capturing after each command")
5670
+ def session_shell(name, org, runner_id, wait) -> None:
5671
+ """Interactive REPL against a session: type a command, see the pane, repeat.
5672
+
5673
+ A human-friendly loop over send+read (no persistent connection). Latency is
5674
+ roughly the runner poll interval per command. Type 'exit' or Ctrl-D to leave
5675
+ (the tmux session keeps running — use `session close` to kill it).
5676
+ """
5677
+ import time as _time
5678
+
5679
+ if not _SESSION_RE.match(name):
5680
+ click.echo("Invalid session name.", err=True); raise SystemExit(1)
5681
+ client = _plain_client(); org_id = _resolve_org_id(client, org)
5682
+ # Ensure the session exists.
5683
+ _run_on_runner(client, org_id, runner_id,
5684
+ f"tmux has-session -t {name} 2>/dev/null || tmux new-session -d -s {name}")
5685
+ click.echo(f"Interactive shell on session '{name}' (runner {runner_id[:8]}). "
5686
+ "'exit' or Ctrl-D to leave (session stays alive).")
5687
+ try:
5688
+ while True:
5689
+ try:
5690
+ line = click.prompt(f"{name}", prompt_suffix="$ ")
5691
+ except (EOFError, click.exceptions.Abort):
5692
+ break
5693
+ if line.strip() in ("exit", "quit"):
5694
+ break
5695
+ cmd = (f"T=$(printf %s {_b64(line)} | base64 -d); tmux send-keys -t {name} \"$T\" Enter; "
5696
+ f"sleep {max(0.0, wait)}; tmux capture-pane -t {name} -p")
5697
+ st, out = _run_on_runner(client, org_id, runner_id, cmd)
5698
+ click.echo(out.rstrip() if out else st)
5699
+ finally:
5700
+ client.close()
5701
+ click.echo("Left shell (session still running).")
@@ -2936,8 +2936,12 @@ Target ONE pod with `--runner RID` (from `runner ls` / `runner launch`):
2936
2936
  openrunner session send s1 'python train.py' --org ORG --runner RID
2937
2937
  openrunner session read s1 --org ORG --runner RID # current pane
2938
2938
  openrunner session ls --org ORG --runner RID # list sessions in the pod
2939
+ openrunner session watch s1 --org ORG --runner RID # live-tail the pane (redraw)
2940
+ openrunner session shell s1 --org ORG --runner RID # interactive REPL loop
2939
2941
  openrunner session close s1 --org ORG --runner RID
2940
2942
 
2943
+ - `session shell` = a human-friendly interactive loop (type -> pane -> repeat);
2944
+ `session watch` live-tails the pane. Both poll, so latency ~ the poll interval.
2941
2945
  - Open several names (`s1`, `s2`, ...) for **parallel** shells in the same pod.
2942
2946
  - Sessions **persist** (tmux) between commands -- cwd, env, running processes stay.
2943
2947
  - `session send` runs the line then returns the pane; add `--wait N` if the
@@ -3230,6 +3234,10 @@ Then ask replica bounds + autoscale:
3230
3234
  - Poll `openrunner deploy ls -p ORG/NAME` + `openrunner deploy replicas <id>
3231
3235
  -p ORG/NAME` until replicas are running; report status + the endpoint URL when
3232
3236
  the router assigns one. Scale later with `openrunner deploy scale <id> --to N`.
3237
+ - Once >=1 replica is live, call it through the governed router (LB across
3238
+ replicas): `openrunner deploy call <id> predict -p ORG/NAME -d '{{"text":"hi"}}'`
3239
+ (503 = still starting / scaled to zero). Give the user this command + the
3240
+ endpoint_url to integrate.
3233
3241
 
3234
3242
  ## Guardrails
3235
3243
  - Ground every sizing number in the card/run; label anything estimated. Never
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.37.32"
3
+ version = "2.37.34"
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