openrunner-sdk 2.14.2__tar.gz → 2.14.4__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 (118) hide show
  1. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/install_commands.py +41 -52
  4. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/pyproject.toml +1 -1
  5. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/.gitignore +0 -0
  6. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/=6.0 +0 -0
  7. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/=8.1 +0 -0
  8. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/README.md +0 -0
  9. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/api_client.py +0 -0
  10. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/artifact.py +0 -0
  11. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/buffer.py +0 -0
  12. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cache.py +0 -0
  13. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cli.py +0 -0
  14. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/config.py +0 -0
  15. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/cost.py +0 -0
  16. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/dataset.py +0 -0
  17. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/environment.py +0 -0
  18. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/evaluation.py +0 -0
  19. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/feedback.py +0 -0
  20. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/git_info.py +0 -0
  21. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/guardrails.py +0 -0
  22. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/__init__.py +0 -0
  23. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/accelerate.py +0 -0
  24. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/anthropic_tracer.py +0 -0
  25. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/catboost.py +0 -0
  26. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/diffusers.py +0 -0
  27. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/fastai.py +0 -0
  28. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/forced_alignment.py +0 -0
  29. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/gladia.py +0 -0
  30. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/gymnasium.py +0 -0
  31. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/huggingface.py +0 -0
  32. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/hydra.py +0 -0
  33. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/ignite.py +0 -0
  34. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/jax.py +0 -0
  35. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/keras.py +0 -0
  36. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/langchain.py +0 -0
  37. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/lightgbm.py +0 -0
  38. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/lightning.py +0 -0
  39. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/llamaindex.py +0 -0
  40. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/openai_finetune.py +0 -0
  41. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/openai_tracer.py +0 -0
  42. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/optuna.py +0 -0
  43. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/pytorch.py +0 -0
  44. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/sb3.py +0 -0
  45. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/sklearn.py +0 -0
  46. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/tensorflow.py +0 -0
  47. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/trl.py +0 -0
  48. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/tts.py +0 -0
  49. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/ultralytics.py +0 -0
  50. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/voice_agent.py +0 -0
  51. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/whisper.py +0 -0
  52. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/integration/xgboost.py +0 -0
  53. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/launch.py +0 -0
  54. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/media.py +0 -0
  55. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/migrate.py +0 -0
  56. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/model.py +0 -0
  57. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/offline.py +0 -0
  58. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/pii.py +0 -0
  59. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/plot.py +0 -0
  60. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/prompt.py +0 -0
  61. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/query_api.py +0 -0
  62. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/redact.py +0 -0
  63. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/run.py +0 -0
  64. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/scorers.py +0 -0
  65. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/sender.py +0 -0
  66. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/session.py +0 -0
  67. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/settings.py +0 -0
  68. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/summary.py +0 -0
  69. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/sweep.py +0 -0
  70. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/system_metrics.py +0 -0
  71. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/tensorboard.py +0 -0
  72. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/trace.py +0 -0
  73. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/transcript_formatter.py +0 -0
  74. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wal.py +0 -0
  75. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wandb_compat/__init__.py +0 -0
  76. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wandb_compat/_shim.py +0 -0
  77. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/openrunner/wer.py +0 -0
  78. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/__init__.py +0 -0
  79. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/conftest.py +0 -0
  80. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_alert.py +0 -0
  81. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_aliases.py +0 -0
  82. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_api_client.py +0 -0
  83. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_artifact.py +0 -0
  84. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_buffer.py +0 -0
  85. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_cache.py +0 -0
  86. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_class_scorers.py +0 -0
  87. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_cli.py +0 -0
  88. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_config.py +0 -0
  89. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_evaluation.py +0 -0
  90. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_finish.py +0 -0
  91. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_git_info.py +0 -0
  92. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_init.py +0 -0
  93. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_fastai.py +0 -0
  94. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_huggingface.py +0 -0
  95. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_keras.py +0 -0
  96. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_langchain.py +0 -0
  97. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_lightning.py +0 -0
  98. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_pytorch.py +0 -0
  99. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_sklearn.py +0 -0
  100. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_integration_xgboost.py +0 -0
  101. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_launch.py +0 -0
  102. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_log.py +0 -0
  103. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_log_code.py +0 -0
  104. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_media.py +0 -0
  105. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_migrate.py +0 -0
  106. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_offline.py +0 -0
  107. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_offline_sync.py +0 -0
  108. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_pii.py +0 -0
  109. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_plot.py +0 -0
  110. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_query_api.py +0 -0
  111. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_resume.py +0 -0
  112. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sdk_features.py +0 -0
  113. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sender.py +0 -0
  114. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_summary.py +0 -0
  115. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_sweep.py +0 -0
  116. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_system_metrics.py +0 -0
  117. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/tests/test_trace.py +0 -0
  118. {openrunner_sdk-2.14.2 → openrunner_sdk-2.14.4}/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.14.2
3
+ Version: 2.14.4
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.14.2"
123
+ __version__ = "2.14.4"
124
124
 
125
125
  logger = logging.getLogger("openrunner")
126
126
 
@@ -103,7 +103,8 @@ run_id = sync_session_to_openrunner(parsed, project=project_override)
103
103
  if run_id:
104
104
  config = get_session_config()
105
105
  base = config.get('base_url', '')
106
- print(f'Synced -> {{base}}/runs/{{run_id}}')
106
+ project = project_override or config.get('project', '')
107
+ print(f'Synced -> {{base}}/{{project}}/ai-sessions/{{run_id}}')
107
108
  else:
108
109
  print('Sync failed. Run: openrunner session setup')
109
110
  "
@@ -288,79 +289,67 @@ allowed-tools:
288
289
  - Bash
289
290
  - AskUserQuestion
290
291
  ---
291
-
292
- ## Process
293
-
294
- ### Step 1: Check if already logged in
295
-
292
+ <objective>
293
+ Authenticate the user with their OpenRunner instance. Get their server URL and API key configured in ~/.openrunner/settings.json.
294
+ </objective>
295
+
296
+ <process>
297
+ 1. Check current auth state by reading ~/.openrunner/settings.json
298
+ 2. If no base_url configured, ask the user: "What is your OpenRunner server URL? (e.g. https://openrun.example.com)"
299
+ 3. Once you have the base_url, initiate the browser login flow by running the script below (replace BASE_URL with actual URL)
300
+ 4. If browser flow succeeds (prints SUCCESS), confirm to user they're logged in
301
+ 5. If it times out or fails, ask user to paste their API key manually (from their OpenRunner Settings page)
302
+ 6. Save the final config to ~/.openrunner/settings.json
303
+
304
+ IMPORTANT: You MUST ask the user for their server URL before proceeding. Do NOT assume or hardcode any URL.
305
+ </process>
306
+
307
+ Check auth state:
296
308
  ```bash
297
309
  python3 -c "
298
- import json
299
- from pathlib import Path
310
+ import json; from pathlib import Path
300
311
  f = Path.home() / '.openrunner' / 'settings.json'
301
312
  if f.exists():
302
313
  s = json.loads(f.read_text())
303
- if s.get('api_key') and s.get('base_url'):
304
- print(f'LOGGED_IN base_url={{s[\"base_url\"]}}')
305
- elif s.get('base_url'):
306
- print(f'NEED_KEY base_url={{s[\"base_url\"]}}')
307
- else:
308
- print('NEED_SETUP')
314
+ print(f'base_url={{s.get(\"base_url\",\"\")}} api_key={{\"set\" if s.get(\"api_key\") else \"missing\"}}')
309
315
  else:
310
- print('NEED_SETUP')
316
+ print('base_url= api_key=missing')
311
317
  "
312
318
  ```
313
319
 
314
- ### Step 2: If NEED_SETUP, ask user for their OpenRunner server URL
315
-
316
- Use AskUserQuestion: "What is your OpenRunner server URL?" (e.g. https://your-instance.example.com)
317
-
318
- ### Step 3: Initiate browser login
319
-
320
- Replace BASE_URL below with the user's answer (or saved base_url from step 1):
321
-
320
+ After getting BASE_URL from user, run browser login:
322
321
  ```bash
323
322
  python3 -c "
324
- import sys, os, json, time
325
- from pathlib import Path
323
+ import sys, os, json, time; from pathlib import Path
326
324
  for p in [os.path.expanduser(f'~/.local/lib/python3.{{v}}/site-packages') for v in (12,11,10)]:
327
325
  if os.path.isdir(p): sys.path.insert(0, p)
328
326
  import httpx
329
-
330
327
  base_url = 'BASE_URL'
331
328
  resp = httpx.post(f'{{base_url}}/api/v1/auth/cli/initiate', json={{'expiry_days': 90}}, timeout=10)
332
- data = resp.json()
333
- code = data['code']
334
- auth_url = data['url']
335
- print(f'Open this URL to approve: {{auth_url}}')
336
-
337
- import webbrowser
338
- webbrowser.open(auth_url)
339
-
340
- print('Waiting for browser approval...')
329
+ data = resp.json(); code = data['code']; auth_url = data['url']
330
+ print(f'APPROVE_URL={{auth_url}}')
331
+ import webbrowser; webbrowser.open(auth_url)
341
332
  for i in range(60):
342
333
  time.sleep(2)
343
- poll = httpx.get(f'{{base_url}}/api/v1/auth/cli/poll/{{code}}', timeout=10)
344
- pd = poll.json()
334
+ pd = httpx.get(f'{{base_url}}/api/v1/auth/cli/poll/{{code}}', timeout=10).json()
345
335
  if pd['status'] == 'approved':
346
- api_key = pd['api_key']
347
- email = pd.get('email', '')
348
- sf = Path.home() / '.openrunner' / 'settings.json'
349
- sf.parent.mkdir(parents=True, exist_ok=True)
350
- sf.write_text(json.dumps({{'api_key': api_key, 'base_url': base_url}}, indent=2))
351
- print(f'SUCCESS: Logged in as {{email}}')
352
- sys.exit(0)
353
- elif pd['status'] == 'expired':
354
- print('EXPIRED')
355
- sys.exit(1)
356
- print('TIMEOUT')
357
- sys.exit(1)
336
+ sf = Path.home() / '.openrunner' / 'settings.json'; sf.parent.mkdir(parents=True, exist_ok=True)
337
+ sf.write_text(json.dumps({{'api_key': pd['api_key'], 'base_url': base_url}}, indent=2))
338
+ print(f'SUCCESS email={{pd.get(\"email\",\"\")}}'); sys.exit(0)
339
+ elif pd['status'] == 'expired': print('EXPIRED'); sys.exit(1)
340
+ print('TIMEOUT'); sys.exit(1)
358
341
  "
359
342
  ```
360
343
 
361
- ### Step 4: If TIMEOUT or browser didn't work
362
-
363
- Ask user to either open the URL manually OR paste an API key from Settings page. Save it.
344
+ If browser flow fails, save manual key:
345
+ ```bash
346
+ python3 -c "
347
+ import json; from pathlib import Path
348
+ sf = Path.home() / '.openrunner' / 'settings.json'; sf.parent.mkdir(parents=True, exist_ok=True)
349
+ sf.write_text(json.dumps({{'api_key': 'USER_API_KEY', 'base_url': 'BASE_URL'}}, indent=2))
350
+ print('Saved.')
351
+ "
352
+ ```
364
353
  """
365
354
 
366
355
  CODE_UPLOAD_CMD = """---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.14.2"
3
+ version = "2.14.4"
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