openrunner-sdk 2.4.4__tar.gz → 2.5.0__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 (115) hide show
  1. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/api_client.py +17 -6
  4. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/run.py +9 -1
  5. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/pyproject.toml +1 -1
  6. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/.gitignore +0 -0
  7. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/=6.0 +0 -0
  8. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/=8.1 +0 -0
  9. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/README.md +0 -0
  10. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/artifact.py +0 -0
  11. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/buffer.py +0 -0
  12. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/cache.py +0 -0
  13. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/cli.py +0 -0
  14. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/config.py +0 -0
  15. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/cost.py +0 -0
  16. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/dataset.py +0 -0
  17. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/environment.py +0 -0
  18. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/evaluation.py +0 -0
  19. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/feedback.py +0 -0
  20. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/git_info.py +0 -0
  21. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/guardrails.py +0 -0
  22. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/__init__.py +0 -0
  23. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/accelerate.py +0 -0
  24. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/anthropic_tracer.py +0 -0
  25. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/catboost.py +0 -0
  26. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/diffusers.py +0 -0
  27. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/fastai.py +0 -0
  28. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/forced_alignment.py +0 -0
  29. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/gladia.py +0 -0
  30. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/gymnasium.py +0 -0
  31. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/huggingface.py +0 -0
  32. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/hydra.py +0 -0
  33. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/ignite.py +0 -0
  34. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/jax.py +0 -0
  35. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/keras.py +0 -0
  36. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/langchain.py +0 -0
  37. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/lightgbm.py +0 -0
  38. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/lightning.py +0 -0
  39. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/llamaindex.py +0 -0
  40. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/openai_finetune.py +0 -0
  41. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/openai_tracer.py +0 -0
  42. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/optuna.py +0 -0
  43. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/pytorch.py +0 -0
  44. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/sb3.py +0 -0
  45. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/sklearn.py +0 -0
  46. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/tensorflow.py +0 -0
  47. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/trl.py +0 -0
  48. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/tts.py +0 -0
  49. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/ultralytics.py +0 -0
  50. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/voice_agent.py +0 -0
  51. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/whisper.py +0 -0
  52. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/integration/xgboost.py +0 -0
  53. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/launch.py +0 -0
  54. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/media.py +0 -0
  55. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/migrate.py +0 -0
  56. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/model.py +0 -0
  57. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/offline.py +0 -0
  58. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/pii.py +0 -0
  59. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/plot.py +0 -0
  60. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/prompt.py +0 -0
  61. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/query_api.py +0 -0
  62. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/scorers.py +0 -0
  63. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/sender.py +0 -0
  64. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/settings.py +0 -0
  65. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/summary.py +0 -0
  66. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/sweep.py +0 -0
  67. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/system_metrics.py +0 -0
  68. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/tensorboard.py +0 -0
  69. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/trace.py +0 -0
  70. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/transcript_formatter.py +0 -0
  71. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/wal.py +0 -0
  72. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/wandb_compat/__init__.py +0 -0
  73. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/wandb_compat/_shim.py +0 -0
  74. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/openrunner/wer.py +0 -0
  75. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/__init__.py +0 -0
  76. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/conftest.py +0 -0
  77. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_alert.py +0 -0
  78. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_aliases.py +0 -0
  79. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_api_client.py +0 -0
  80. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_artifact.py +0 -0
  81. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_buffer.py +0 -0
  82. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_cache.py +0 -0
  83. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_class_scorers.py +0 -0
  84. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_cli.py +0 -0
  85. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_config.py +0 -0
  86. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_evaluation.py +0 -0
  87. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_finish.py +0 -0
  88. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_git_info.py +0 -0
  89. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_init.py +0 -0
  90. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_fastai.py +0 -0
  91. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_huggingface.py +0 -0
  92. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_keras.py +0 -0
  93. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_langchain.py +0 -0
  94. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_lightning.py +0 -0
  95. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_pytorch.py +0 -0
  96. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_sklearn.py +0 -0
  97. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_integration_xgboost.py +0 -0
  98. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_launch.py +0 -0
  99. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_log.py +0 -0
  100. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_log_code.py +0 -0
  101. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_media.py +0 -0
  102. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_migrate.py +0 -0
  103. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_offline.py +0 -0
  104. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_offline_sync.py +0 -0
  105. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_pii.py +0 -0
  106. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_plot.py +0 -0
  107. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_query_api.py +0 -0
  108. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_resume.py +0 -0
  109. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_sdk_features.py +0 -0
  110. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_sender.py +0 -0
  111. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_summary.py +0 -0
  112. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_sweep.py +0 -0
  113. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_system_metrics.py +0 -0
  114. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/tests/test_trace.py +0 -0
  115. {openrunner_sdk-2.4.4 → openrunner_sdk-2.5.0}/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.4.4
3
+ Version: 2.5.0
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
@@ -120,7 +120,7 @@ launch.from_run = _launch_from_run # type: ignore[attr-defined]
120
120
  # openrunner.trace.patch_openai() syntax
121
121
  trace.patch_openai = _patch_openai # type: ignore[attr-defined]
122
122
 
123
- __version__ = "2.4.4"
123
+ __version__ = "2.5.0"
124
124
 
125
125
  logger = logging.getLogger("openrunner")
126
126
 
@@ -693,27 +693,38 @@ class APIClient:
693
693
  2. Absolute URL — try direct PUT, fall back to proxy on ConnectError
694
694
  3. ConnectError fallback — PUT via /runs/{run_id}/files/{name}
695
695
  """
696
+ import os
697
+
696
698
  try:
697
- with open(file_path, "rb") as f:
698
- data = f.read()
699
+ file_size = os.path.getsize(file_path)
700
+ # Use streaming for large files, read into memory for small ones
701
+ if file_size > 50 * 1024 * 1024: # 50 MB
702
+ data = open(file_path, "rb") # noqa: SIM115
703
+ else:
704
+ with open(file_path, "rb") as f:
705
+ data = f.read()
706
+
707
+ # Scale timeout by file size (minimum 60s, ~30s per 100MB)
708
+ upload_timeout = max(60.0, file_size / (3 * 1024 * 1024))
699
709
 
700
710
  # Case 1: relative proxy URL from server
701
711
  if presigned_url.startswith("/"):
702
712
  api_path = presigned_url.replace("/api/v1/", "/", 1) if presigned_url.startswith("/api/v1/") else presigned_url
703
- resp = self._request("put", api_path, content=data)
713
+ resp = self._client.put(api_path, content=data, timeout=upload_timeout)
704
714
  return resp.status_code == 200
705
715
 
706
716
  # Case 2: absolute presigned URL (direct to S3)
707
717
  try:
708
- resp = httpx.put(presigned_url, content=data, timeout=300.0)
718
+ resp = httpx.put(presigned_url, content=data, timeout=upload_timeout)
709
719
  resp.raise_for_status()
710
720
  return True
711
721
  except (httpx.ConnectError, httpx.ConnectTimeout):
712
722
  # Case 3: fallback to API proxy
713
723
  if run_id:
714
- import os
715
724
  fname = os.path.basename(file_path)
716
- proxy_resp = self._request("put", f"/runs/{run_id}/files/{fname}", content=data)
725
+ proxy_resp = self._client.put(
726
+ f"/runs/{run_id}/files/{fname}", content=data, timeout=upload_timeout
727
+ )
717
728
  return proxy_resp.status_code == 200
718
729
  return False
719
730
  except Exception as e:
@@ -825,13 +825,21 @@ class Run:
825
825
 
826
826
  # Upload files that need uploading (dedup may skip some)
827
827
  # Reference files and reused files never have upload URLs.
828
+ all_uploaded = True
828
829
  for url_entry in result.get("upload_urls", []):
829
830
  local = next(
830
831
  f for f in artifact._files if f["name"] == url_entry["name"]
831
832
  )
832
- self._client.upload_file_to_presigned_url(
833
+ ok = self._client.upload_file_to_presigned_url(
833
834
  url_entry["presigned_url"], local["local_path"]
834
835
  )
836
+ if not ok:
837
+ logger.warning("upload failed for %s", url_entry["name"])
838
+ all_uploaded = False
839
+
840
+ if not all_uploaded:
841
+ logger.error("artifact upload incomplete — not confirming version")
842
+ return None
835
843
 
836
844
  # Confirm the version
837
845
  self._client.confirm_artifact_version(result["version_id"])
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.4.4"
3
+ version = "2.5.0"
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
File without changes