openrunner-sdk 2.14.0__tar.gz → 2.14.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 (118) hide show
  1. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/PKG-INFO +1 -1
  2. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/__init__.py +1 -1
  3. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/cli.py +9 -3
  4. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/install_commands.py +69 -9
  5. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/session.py +1 -1
  6. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/pyproject.toml +1 -1
  7. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/.gitignore +0 -0
  8. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/=6.0 +0 -0
  9. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/=8.1 +0 -0
  10. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/README.md +0 -0
  11. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/api_client.py +0 -0
  12. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/artifact.py +0 -0
  13. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/buffer.py +0 -0
  14. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/cache.py +0 -0
  15. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/config.py +0 -0
  16. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/cost.py +0 -0
  17. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/dataset.py +0 -0
  18. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/environment.py +0 -0
  19. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/evaluation.py +0 -0
  20. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/feedback.py +0 -0
  21. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/git_info.py +0 -0
  22. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/guardrails.py +0 -0
  23. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/__init__.py +0 -0
  24. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/accelerate.py +0 -0
  25. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/anthropic_tracer.py +0 -0
  26. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/catboost.py +0 -0
  27. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/diffusers.py +0 -0
  28. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/fastai.py +0 -0
  29. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/forced_alignment.py +0 -0
  30. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/gladia.py +0 -0
  31. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/gymnasium.py +0 -0
  32. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/huggingface.py +0 -0
  33. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/hydra.py +0 -0
  34. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/ignite.py +0 -0
  35. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/jax.py +0 -0
  36. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/keras.py +0 -0
  37. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/langchain.py +0 -0
  38. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/lightgbm.py +0 -0
  39. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/lightning.py +0 -0
  40. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/llamaindex.py +0 -0
  41. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/openai_finetune.py +0 -0
  42. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/openai_tracer.py +0 -0
  43. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/optuna.py +0 -0
  44. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/pytorch.py +0 -0
  45. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/sb3.py +0 -0
  46. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/sklearn.py +0 -0
  47. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/tensorflow.py +0 -0
  48. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/trl.py +0 -0
  49. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/tts.py +0 -0
  50. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/ultralytics.py +0 -0
  51. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/voice_agent.py +0 -0
  52. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/whisper.py +0 -0
  53. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/integration/xgboost.py +0 -0
  54. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/launch.py +0 -0
  55. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/media.py +0 -0
  56. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/migrate.py +0 -0
  57. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/model.py +0 -0
  58. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/offline.py +0 -0
  59. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/pii.py +0 -0
  60. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/plot.py +0 -0
  61. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/prompt.py +0 -0
  62. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/query_api.py +0 -0
  63. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/redact.py +0 -0
  64. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/run.py +0 -0
  65. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/scorers.py +0 -0
  66. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/sender.py +0 -0
  67. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/settings.py +0 -0
  68. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/summary.py +0 -0
  69. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/sweep.py +0 -0
  70. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/system_metrics.py +0 -0
  71. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/tensorboard.py +0 -0
  72. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/trace.py +0 -0
  73. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/transcript_formatter.py +0 -0
  74. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/wal.py +0 -0
  75. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/wandb_compat/__init__.py +0 -0
  76. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/wandb_compat/_shim.py +0 -0
  77. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/openrunner/wer.py +0 -0
  78. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/__init__.py +0 -0
  79. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/conftest.py +0 -0
  80. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_alert.py +0 -0
  81. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_aliases.py +0 -0
  82. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_api_client.py +0 -0
  83. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_artifact.py +0 -0
  84. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_buffer.py +0 -0
  85. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_cache.py +0 -0
  86. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_class_scorers.py +0 -0
  87. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_cli.py +0 -0
  88. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_config.py +0 -0
  89. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_evaluation.py +0 -0
  90. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_finish.py +0 -0
  91. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_git_info.py +0 -0
  92. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_init.py +0 -0
  93. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_fastai.py +0 -0
  94. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_huggingface.py +0 -0
  95. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_keras.py +0 -0
  96. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_langchain.py +0 -0
  97. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_lightning.py +0 -0
  98. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_pytorch.py +0 -0
  99. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_sklearn.py +0 -0
  100. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_integration_xgboost.py +0 -0
  101. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_launch.py +0 -0
  102. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_log.py +0 -0
  103. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_log_code.py +0 -0
  104. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_media.py +0 -0
  105. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_migrate.py +0 -0
  106. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_offline.py +0 -0
  107. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_offline_sync.py +0 -0
  108. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_pii.py +0 -0
  109. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_plot.py +0 -0
  110. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_query_api.py +0 -0
  111. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_resume.py +0 -0
  112. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_sdk_features.py +0 -0
  113. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_sender.py +0 -0
  114. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_summary.py +0 -0
  115. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_sweep.py +0 -0
  116. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_system_metrics.py +0 -0
  117. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.2}/tests/test_trace.py +0 -0
  118. {openrunner_sdk-2.14.0 → openrunner_sdk-2.14.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.14.0
3
+ Version: 2.14.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.14.0"
123
+ __version__ = "2.14.2"
124
124
 
125
125
  logger = logging.getLogger("openrunner")
126
126
 
@@ -119,9 +119,15 @@ def login(host: str | None, expiry: int, manual: bool) -> None:
119
119
  Use --manual to skip the browser flow and paste an API key directly.
120
120
  """
121
121
  settings = _load_settings()
122
- base_url = host or settings.get("base_url") or click.prompt(
123
- "Server URL", default="https://openrun.gladia.io"
124
- )
122
+ if host:
123
+ base_url = host
124
+ elif settings.get("base_url"):
125
+ base_url = settings["base_url"]
126
+ elif sys.stdin.isatty():
127
+ base_url = click.prompt("Server URL")
128
+ else:
129
+ click.echo("Error: No server URL configured. Run with --host or set base_url in ~/.openrunner/settings.json")
130
+ return
125
131
 
126
132
  if manual:
127
133
  # Legacy manual flow
@@ -102,7 +102,7 @@ project_override = '$ARGUMENTS'.strip() or None
102
102
  run_id = sync_session_to_openrunner(parsed, project=project_override)
103
103
  if run_id:
104
104
  config = get_session_config()
105
- base = config.get('base_url', 'https://openrun.gladia.io')
105
+ base = config.get('base_url', '')
106
106
  print(f'Synced -> {{base}}/runs/{{run_id}}')
107
107
  else:
108
108
  print('Sync failed. Run: openrunner session setup')
@@ -134,7 +134,7 @@ from openrunner.api_client import APIClient
134
134
  settings_file = Path.home() / '.openrunner' / 'settings.json'
135
135
  settings = json.loads(settings_file.read_text()) if settings_file.exists() else {{}}
136
136
  api_key = os.environ.get('OPENRUNNER_API_KEY') or settings.get('api_key')
137
- base_url = os.environ.get('OPENRUNNER_BASE_URL') or settings.get('base_url', 'https://openrun.gladia.io')
137
+ base_url = os.environ.get('OPENRUNNER_BASE_URL') or settings.get('base_url', config.get('base_url', ''))
138
138
  project = os.environ.get('OPENRUNNER_SESSION_PROJECT', 'research-sessions')
139
139
 
140
140
  note = '''$ARGUMENTS'''
@@ -286,21 +286,81 @@ name: {prefix}login
286
286
  description: Authenticate OpenRunner CLI via browser
287
287
  allowed-tools:
288
288
  - Bash
289
+ - AskUserQuestion
289
290
  ---
290
291
 
291
- Run the OpenRunner browser-based login:
292
+ ## Process
293
+
294
+ ### Step 1: Check if already logged in
292
295
 
293
296
  ```bash
294
297
  python3 -c "
295
- import sys, os, subprocess
298
+ import json
299
+ from pathlib import Path
300
+ f = Path.home() / '.openrunner' / 'settings.json'
301
+ if f.exists():
302
+ 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')
309
+ else:
310
+ print('NEED_SETUP')
311
+ "
312
+ ```
313
+
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
+
322
+ ```bash
323
+ python3 -c "
324
+ import sys, os, json, time
325
+ from pathlib import Path
296
326
  for p in [os.path.expanduser(f'~/.local/lib/python3.{{v}}/site-packages') for v in (12,11,10)]:
297
327
  if os.path.isdir(p): sys.path.insert(0, p)
298
- subprocess.run([sys.executable, '-m', 'openrunner.cli', 'login'])
299
- " || echo 'Run: pip install openrunner-sdk && openrunner login'
328
+ import httpx
329
+
330
+ base_url = 'BASE_URL'
331
+ 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...')
341
+ for i in range(60):
342
+ time.sleep(2)
343
+ poll = httpx.get(f'{{base_url}}/api/v1/auth/cli/poll/{{code}}', timeout=10)
344
+ pd = poll.json()
345
+ 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)
358
+ "
300
359
  ```
301
360
 
302
- If browser doesn't open, copy the URL shown and open it manually.
303
- After approval, the CLI gets its token automatically.
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.
304
364
  """
305
365
 
306
366
  CODE_UPLOAD_CMD = """---
@@ -365,7 +425,7 @@ if redacted_count > 0:
365
425
 
366
426
  import openrunner
367
427
  os.environ['OPENRUNNER_API_KEY'] = config['api_key']
368
- os.environ['OPENRUNNER_BASE_URL'] = config.get('base_url', 'https://openrun.gladia.io')
428
+ os.environ['OPENRUNNER_BASE_URL'] = config.get('base_url', '')
369
429
  run = openrunner.init(project=project_name, name='code-upload', save_code=False)
370
430
  artifact = openrunner.Artifact('source-code', type='code')
371
431
  artifact.add_dir(str(tmp_dir))
@@ -394,7 +394,7 @@ def interactive_setup() -> dict:
394
394
 
395
395
  # Step 1: API key
396
396
  api_key = config.get("api_key")
397
- base_url = config.get("base_url", "https://openrun.gladia.io")
397
+ base_url = config.get("base_url", "")
398
398
 
399
399
  if not api_key:
400
400
  print("OpenRunner session sync — first-time setup")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openrunner-sdk"
3
- version = "2.14.0"
3
+ version = "2.14.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