openrunner-sdk 2.19.1__tar.gz → 2.19.2__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 (120) hide show
  1. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/install_commands.py +42 -10
  4. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/pyproject.toml +1 -1
  5. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/.gitignore +0 -0
  6. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/=6.0 +0 -0
  7. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/=8.1 +0 -0
  8. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/README.md +0 -0
  9. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/CLAUDE.md +0 -0
  10. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/api_client.py +0 -0
  11. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/artifact.py +0 -0
  12. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/buffer.py +0 -0
  13. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/cache.py +0 -0
  14. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/cli.py +0 -0
  15. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/config.py +0 -0
  16. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/cost.py +0 -0
  17. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/dataset.py +0 -0
  18. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/environment.py +0 -0
  19. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/evaluation.py +0 -0
  20. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/feedback.py +0 -0
  21. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/git_info.py +0 -0
  22. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/guardrails.py +0 -0
  23. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/__init__.py +0 -0
  24. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/accelerate.py +0 -0
  25. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/anthropic_tracer.py +0 -0
  26. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/catboost.py +0 -0
  27. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/diffusers.py +0 -0
  28. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/fastai.py +0 -0
  29. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/forced_alignment.py +0 -0
  30. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/gladia.py +0 -0
  31. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/gymnasium.py +0 -0
  32. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/huggingface.py +0 -0
  33. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/hydra.py +0 -0
  34. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/ignite.py +0 -0
  35. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/jax.py +0 -0
  36. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/keras.py +0 -0
  37. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/langchain.py +0 -0
  38. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/lightgbm.py +0 -0
  39. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/lightning.py +0 -0
  40. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/llamaindex.py +0 -0
  41. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/openai_finetune.py +0 -0
  42. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/openai_tracer.py +0 -0
  43. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/optuna.py +0 -0
  44. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/pytorch.py +0 -0
  45. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/sb3.py +0 -0
  46. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/sklearn.py +0 -0
  47. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/tensorflow.py +0 -0
  48. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/trl.py +0 -0
  49. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/tts.py +0 -0
  50. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/ultralytics.py +0 -0
  51. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/voice_agent.py +0 -0
  52. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/whisper.py +0 -0
  53. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/integration/xgboost.py +0 -0
  54. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/launch.py +0 -0
  55. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/mcp_server.py +0 -0
  56. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/media.py +0 -0
  57. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/migrate.py +0 -0
  58. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/model.py +0 -0
  59. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/offline.py +0 -0
  60. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/pii.py +0 -0
  61. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/plot.py +0 -0
  62. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/prompt.py +0 -0
  63. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/query_api.py +0 -0
  64. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/redact.py +0 -0
  65. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/run.py +0 -0
  66. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/scorers.py +0 -0
  67. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/sender.py +0 -0
  68. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/session.py +0 -0
  69. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/settings.py +0 -0
  70. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/summary.py +0 -0
  71. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/sweep.py +0 -0
  72. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/system_metrics.py +0 -0
  73. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/tensorboard.py +0 -0
  74. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/trace.py +0 -0
  75. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/transcript_formatter.py +0 -0
  76. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/wal.py +0 -0
  77. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/wandb_compat/__init__.py +0 -0
  78. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/wandb_compat/_shim.py +0 -0
  79. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/openrunner/wer.py +0 -0
  80. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/__init__.py +0 -0
  81. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/conftest.py +0 -0
  82. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_alert.py +0 -0
  83. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_aliases.py +0 -0
  84. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_api_client.py +0 -0
  85. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_artifact.py +0 -0
  86. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_buffer.py +0 -0
  87. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_cache.py +0 -0
  88. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_class_scorers.py +0 -0
  89. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_cli.py +0 -0
  90. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_config.py +0 -0
  91. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_evaluation.py +0 -0
  92. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_finish.py +0 -0
  93. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_git_info.py +0 -0
  94. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_init.py +0 -0
  95. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_fastai.py +0 -0
  96. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_huggingface.py +0 -0
  97. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_keras.py +0 -0
  98. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_langchain.py +0 -0
  99. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_lightning.py +0 -0
  100. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_pytorch.py +0 -0
  101. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_sklearn.py +0 -0
  102. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_integration_xgboost.py +0 -0
  103. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_launch.py +0 -0
  104. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_log.py +0 -0
  105. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_log_code.py +0 -0
  106. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_media.py +0 -0
  107. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_migrate.py +0 -0
  108. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_offline.py +0 -0
  109. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_offline_sync.py +0 -0
  110. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_pii.py +0 -0
  111. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_plot.py +0 -0
  112. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_query_api.py +0 -0
  113. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_resume.py +0 -0
  114. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_sdk_features.py +0 -0
  115. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_sender.py +0 -0
  116. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_summary.py +0 -0
  117. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_sweep.py +0 -0
  118. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_system_metrics.py +0 -0
  119. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/tests/test_trace.py +0 -0
  120. {openrunner_sdk-2.19.1 → openrunner_sdk-2.19.2}/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.19.1
3
+ Version: 2.19.2
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.19.1"
123
+ __version__ = "2.19.2"
124
124
 
125
125
  logger = logging.getLogger("openrunner")
126
126
 
@@ -875,15 +875,40 @@ for run in runs[:3]:
875
875
  m = {}
876
876
  elif 'metrics' in m:
877
877
  m = m['metrics']
878
+ # Read user-configured metrics from ~/.openrunner/statusline.json
879
+ # Format: {"metrics": ["train/loss", "wer"], "sparkline": "train/loss"}
880
+ # If not configured, auto-detect: sparkline first loss-like key, show first 2 metrics
881
+ import json as _j
882
+ sl_cfg_path = os.path.expanduser('~/.openrunner/statusline.json')
883
+ sl_cfg = {}
884
+ if os.path.isfile(sl_cfg_path):
885
+ try: sl_cfg = _j.loads(open(sl_cfg_path).read())
886
+ except: pass
887
+ show_metrics = sl_cfg.get('metrics', [])
888
+ spark_key = sl_cfg.get('sparkline', '')
889
+ # Auto-detect if not configured
890
+ if not show_metrics:
891
+ all_keys = list(m.keys())
892
+ # Pick loss-like for sparkline, then next interesting metric
893
+ for k in all_keys:
894
+ if 'loss' in k.lower() and not spark_key:
895
+ spark_key = k
896
+ elif k not in ('epoch', 'lr', 'learning_rate') and len(show_metrics) < 2:
897
+ if 'system' not in k.lower():
898
+ show_metrics.append(k)
899
+ if spark_key and spark_key not in show_metrics:
900
+ show_metrics.insert(0, spark_key)
901
+ if not spark_key and show_metrics:
902
+ spark_key = show_metrics[0]
878
903
  bits = [f"{name}{icon}"]
879
- loss = m.get('train/loss', m.get('loss', []))
880
- if loss:
881
- last = loss[-1]
904
+ # Sparkline for primary metric
905
+ spark_data = m.get(spark_key, [])
906
+ if spark_data:
907
+ last = spark_data[-1]
882
908
  v = last.get('value', last) if isinstance(last, dict) else last
883
909
  s = last.get('step', '?') if isinstance(last, dict) else '?'
884
- # Compact sparkline (last 10 points)
885
- bars = '▁▂▃▄▅▆▇█'
886
- vals = [pt.get('value', pt) if isinstance(pt, dict) else pt for pt in loss[-10:]]
910
+ bars = '\\u2581\\u2582\\u2583\\u2584\\u2585\\u2586\\u2587\\u2588'
911
+ vals = [pt.get('value', pt) if isinstance(pt, dict) else pt for pt in spark_data[-10:]]
887
912
  vals = [x for x in vals if isinstance(x, (int, float))]
888
913
  spark = ''
889
914
  if len(vals) > 1:
@@ -891,11 +916,18 @@ for run in runs[:3]:
891
916
  rng = mx - mn or 1
892
917
  spark = ''.join(bars[int((x - mn) / rng * 7)] for x in vals)
893
918
  bits.append(f"s{s} {spark} {v:.2f}")
894
- wer = m.get('wer', m.get('eval/wer', []))
895
- if wer:
896
- last = wer[-1]
919
+ # Additional configured metrics
920
+ for mk in show_metrics:
921
+ if mk == spark_key: continue
922
+ pts = m.get(mk, [])
923
+ if not pts: continue
924
+ last = pts[-1]
897
925
  v = last.get('value', last) if isinstance(last, dict) else last
898
- bits.append(f"wer={v:.3f}")
926
+ label = mk.split('/')[-1][:6]
927
+ if isinstance(v, float):
928
+ bits.append(f"{label}={v:.3f}" if v < 1 else f"{label}={v:.1f}")
929
+ else:
930
+ bits.append(f"{label}={v}")
899
931
  parts.append(' '.join(bits))
900
932
  print(' | '.join(parts) if parts else 'no runs')
901
933
  client.close()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.19.1"
3
+ version = "2.19.2"
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