openrunner-sdk 2.2.0__tar.gz → 2.3.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.
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/PKG-INFO +1 -1
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/api_client.py +26 -10
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/sender.py +8 -4
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/pyproject.toml +1 -1
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/.gitignore +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/=6.0 +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/=8.1 +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/README.md +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/__init__.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/config.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/media.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/model.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/run.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/__init__.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/conftest.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_config.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_init.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_log.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_media.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.0}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.2.0 → openrunner_sdk-2.3.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.
|
|
3
|
+
Version: 2.3.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
|
|
@@ -684,21 +684,37 @@ class APIClient:
|
|
|
684
684
|
presigned_url: str,
|
|
685
685
|
data_bytes: bytes,
|
|
686
686
|
content_type: str = "image/png",
|
|
687
|
+
run_id: str = "",
|
|
688
|
+
key: str = "",
|
|
687
689
|
) -> bool:
|
|
688
690
|
"""PUT bytes to a presigned URL with Content-Type header.
|
|
689
691
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
+
Falls back to API proxy upload if presigned URL is unreachable
|
|
693
|
+
(e.g., MinIO not exposed publicly).
|
|
692
694
|
"""
|
|
693
695
|
try:
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
696
|
+
try:
|
|
697
|
+
resp = httpx.put(
|
|
698
|
+
presigned_url,
|
|
699
|
+
content=data_bytes,
|
|
700
|
+
headers={"Content-Type": content_type},
|
|
701
|
+
timeout=300.0,
|
|
702
|
+
)
|
|
703
|
+
resp.raise_for_status()
|
|
704
|
+
return True
|
|
705
|
+
except (httpx.ConnectError, httpx.ConnectTimeout):
|
|
706
|
+
# Presigned URL unreachable — use API proxy
|
|
707
|
+
if run_id and key:
|
|
708
|
+
import os
|
|
709
|
+
fname = os.path.basename(key) or key.replace("/", "_")
|
|
710
|
+
proxy_resp = self._request(
|
|
711
|
+
"PUT",
|
|
712
|
+
f"/runs/{run_id}/files/media/{fname}",
|
|
713
|
+
content=data_bytes,
|
|
714
|
+
headers={"Content-Type": content_type},
|
|
715
|
+
)
|
|
716
|
+
return proxy_resp.status_code == 200
|
|
717
|
+
return False
|
|
702
718
|
except Exception as e:
|
|
703
719
|
logger.warning("upload_media_bytes failed: %s", e)
|
|
704
720
|
return False
|
|
@@ -265,7 +265,8 @@ class Sender:
|
|
|
265
265
|
if result and result.get("presigned_url"):
|
|
266
266
|
# Upload the bytes to the presigned URL
|
|
267
267
|
self._client.upload_media_bytes(
|
|
268
|
-
result["presigned_url"], img_bytes, content_type
|
|
268
|
+
result["presigned_url"], img_bytes, content_type,
|
|
269
|
+
run_id=self._run_id, key=item["key"],
|
|
269
270
|
)
|
|
270
271
|
|
|
271
272
|
elif media_type == "table":
|
|
@@ -293,7 +294,8 @@ class Sender:
|
|
|
293
294
|
)
|
|
294
295
|
if result and result.get("presigned_url"):
|
|
295
296
|
self._client.upload_media_bytes(
|
|
296
|
-
result["presigned_url"], audio_bytes, content_type
|
|
297
|
+
result["presigned_url"], audio_bytes, content_type,
|
|
298
|
+
run_id=self._run_id, key=item["key"],
|
|
297
299
|
)
|
|
298
300
|
|
|
299
301
|
elif media_type == "video":
|
|
@@ -311,7 +313,8 @@ class Sender:
|
|
|
311
313
|
)
|
|
312
314
|
if result and result.get("presigned_url"):
|
|
313
315
|
self._client.upload_media_bytes(
|
|
314
|
-
result["presigned_url"], video_bytes, content_type
|
|
316
|
+
result["presigned_url"], video_bytes, content_type,
|
|
317
|
+
run_id=self._run_id, key=item["key"],
|
|
315
318
|
)
|
|
316
319
|
|
|
317
320
|
elif media_type == "histogram":
|
|
@@ -408,7 +411,8 @@ class Sender:
|
|
|
408
411
|
)
|
|
409
412
|
if result and result.get("presigned_url"):
|
|
410
413
|
self._client.upload_media_bytes(
|
|
411
|
-
result["presigned_url"], img_bytes, content_type
|
|
414
|
+
result["presigned_url"], img_bytes, content_type,
|
|
415
|
+
run_id=self._run_id, key=item["key"],
|
|
412
416
|
)
|
|
413
417
|
|
|
414
418
|
elif media_type == "molecule":
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|