openrunner-sdk 2.1.0__tar.gz → 2.2.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.1.0 → openrunner_sdk-2.2.0}/PKG-INFO +1 -1
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/media.py +91 -1
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/pyproject.toml +1 -1
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/.gitignore +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/=6.0 +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/=8.1 +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/README.md +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/__init__.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/api_client.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/artifact.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/buffer.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/cache.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/cli.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/config.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/cost.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/dataset.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/environment.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/evaluation.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/feedback.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/git_info.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/guardrails.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/__init__.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/accelerate.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/anthropic_tracer.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/catboost.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/diffusers.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/fastai.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/forced_alignment.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/gladia.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/gymnasium.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/huggingface.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/hydra.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/ignite.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/jax.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/keras.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/langchain.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/lightgbm.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/lightning.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/llamaindex.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/openai_finetune.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/openai_tracer.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/optuna.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/pytorch.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/sb3.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/sklearn.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/tensorflow.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/trl.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/tts.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/ultralytics.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/voice_agent.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/whisper.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/integration/xgboost.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/launch.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/migrate.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/model.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/offline.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/pii.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/plot.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/prompt.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/query_api.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/run.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/scorers.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/sender.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/settings.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/summary.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/sweep.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/system_metrics.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/tensorboard.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/trace.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/transcript_formatter.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/wal.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/wandb_compat/__init__.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/openrunner/wandb_compat/_shim.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/__init__.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/conftest.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_alert.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_aliases.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_api_client.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_artifact.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_buffer.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_cache.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_class_scorers.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_cli.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_config.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_evaluation.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_finish.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_git_info.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_init.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_fastai.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_huggingface.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_keras.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_langchain.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_lightning.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_pytorch.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_sklearn.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_integration_xgboost.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_launch.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_log.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_log_code.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_media.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_migrate.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_offline.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_offline_sync.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_pii.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_plot.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_query_api.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_resume.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_sdk_features.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_sender.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_summary.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_sweep.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_system_metrics.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.0}/tests/test_trace.py +0 -0
- {openrunner_sdk-2.1.0 → openrunner_sdk-2.2.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.2.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
|
|
@@ -310,9 +310,99 @@ class Table:
|
|
|
310
310
|
data = df.values.tolist()
|
|
311
311
|
return cls(columns=columns, data=data)
|
|
312
312
|
|
|
313
|
+
def set_reference_column(self, column: str = "sample_id") -> None:
|
|
314
|
+
"""Mark a column as the dataset reference/sample ID.
|
|
315
|
+
|
|
316
|
+
This tells the UI to treat this column as a link back to the
|
|
317
|
+
original dataset, enabling sample traceability.
|
|
318
|
+
|
|
319
|
+
Args:
|
|
320
|
+
column: Name of the column containing sample IDs/references.
|
|
321
|
+
Must already exist in the table.
|
|
322
|
+
"""
|
|
323
|
+
if column not in self.columns:
|
|
324
|
+
raise ValueError(f"Column '{column}' not in table. Columns: {self.columns}")
|
|
325
|
+
self._reference_column = column
|
|
326
|
+
|
|
327
|
+
@classmethod
|
|
328
|
+
def from_predictions(
|
|
329
|
+
cls,
|
|
330
|
+
*,
|
|
331
|
+
sample_ids: list[str],
|
|
332
|
+
references: list[str],
|
|
333
|
+
hypotheses: list[str],
|
|
334
|
+
audio_paths: list[str] | None = None,
|
|
335
|
+
metadata: dict[str, list] | None = None,
|
|
336
|
+
extra_columns: dict[str, list] | None = None,
|
|
337
|
+
) -> "Table":
|
|
338
|
+
"""Create a predictions table with sample traceability.
|
|
339
|
+
|
|
340
|
+
Convenience constructor for evaluation results. Ensures consistent
|
|
341
|
+
column naming (sample_id, ref, hyp, audio) that the UI recognizes
|
|
342
|
+
for diff highlighting and audio playback.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
sample_ids: Unique IDs linking each row to the source dataset
|
|
346
|
+
references: Ground truth transcriptions
|
|
347
|
+
hypotheses: Model predictions
|
|
348
|
+
audio_paths: Optional audio file paths for inline playback
|
|
349
|
+
metadata: Optional per-sample metadata dict (e.g. {"speaker": [...], "duration": [...], "language": [...]})
|
|
350
|
+
extra_columns: Alias for metadata (deprecated, use metadata)
|
|
351
|
+
|
|
352
|
+
Example:
|
|
353
|
+
table = Table.from_predictions(
|
|
354
|
+
sample_ids=["file_001", "file_002"],
|
|
355
|
+
references=["hello world", "press one"],
|
|
356
|
+
hypotheses=["hello word", "press 1"],
|
|
357
|
+
audio_paths=["audio/001.wav", "audio/002.wav"],
|
|
358
|
+
metadata={
|
|
359
|
+
"duration_s": [3.2, 1.8],
|
|
360
|
+
"speaker": ["agent", "ivr"],
|
|
361
|
+
"language": ["en", "es"],
|
|
362
|
+
"source_file": ["call_123.wav", "call_456.wav"],
|
|
363
|
+
},
|
|
364
|
+
)
|
|
365
|
+
openrunner.log({"predictions": table})
|
|
366
|
+
"""
|
|
367
|
+
columns = ["sample_id"]
|
|
368
|
+
n = len(sample_ids)
|
|
369
|
+
data: list[list[Any]] = [[sid] for sid in sample_ids]
|
|
370
|
+
|
|
371
|
+
if audio_paths:
|
|
372
|
+
columns.append("audio")
|
|
373
|
+
for i, p in enumerate(audio_paths):
|
|
374
|
+
data[i].append(p)
|
|
375
|
+
|
|
376
|
+
columns.append("hyp")
|
|
377
|
+
for i, h in enumerate(hypotheses):
|
|
378
|
+
data[i].append(h)
|
|
379
|
+
|
|
380
|
+
columns.append("ref")
|
|
381
|
+
for i, r in enumerate(references):
|
|
382
|
+
data[i].append(r)
|
|
383
|
+
|
|
384
|
+
# Merge metadata and extra_columns
|
|
385
|
+
all_extra = {}
|
|
386
|
+
if metadata:
|
|
387
|
+
all_extra.update(metadata)
|
|
388
|
+
if extra_columns:
|
|
389
|
+
all_extra.update(extra_columns)
|
|
390
|
+
|
|
391
|
+
for col_name, col_data in all_extra.items():
|
|
392
|
+
columns.append(col_name)
|
|
393
|
+
for i, v in enumerate(col_data[:n]):
|
|
394
|
+
data[i].append(v)
|
|
395
|
+
|
|
396
|
+
t = cls(columns=columns, data=data)
|
|
397
|
+
t._reference_column = "sample_id"
|
|
398
|
+
return t
|
|
399
|
+
|
|
313
400
|
def _serialize(self) -> dict[str, Any]:
|
|
314
401
|
"""Serialize to a dict for JSON transmission."""
|
|
315
|
-
|
|
402
|
+
result: dict[str, Any] = {"columns": self.columns, "data": self._data}
|
|
403
|
+
if hasattr(self, "_reference_column"):
|
|
404
|
+
result["reference_column"] = self._reference_column
|
|
405
|
+
return result
|
|
316
406
|
|
|
317
407
|
|
|
318
408
|
class Audio:
|
|
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
|
|
File without changes
|