konduktor-nightly 0.1.0.dev20250806105405__tar.gz → 0.1.0.dev20250807224131__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.

Potentially problematic release.


This version of konduktor-nightly might be problematic. Click here for more details.

Files changed (103) hide show
  1. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/PKG-INFO +1 -1
  2. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/__init__.py +2 -2
  3. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/cli.py +20 -2
  4. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/log_utils.py +14 -5
  5. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/pyproject.toml +1 -1
  6. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/LICENSE +0 -0
  7. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/README.md +0 -0
  8. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/adaptors/__init__.py +0 -0
  9. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/adaptors/aws.py +0 -0
  10. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/adaptors/common.py +0 -0
  11. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/adaptors/gcp.py +0 -0
  12. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/authentication.py +0 -0
  13. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/__init__.py +0 -0
  14. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/backend.py +0 -0
  15. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/constants.py +0 -0
  16. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/deployment.py +0 -0
  17. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/deployment_utils.py +0 -0
  18. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/jobset.py +0 -0
  19. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/jobset_utils.py +0 -0
  20. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/backends/pod_utils.py +0 -0
  21. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/check.py +0 -0
  22. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/config.py +0 -0
  23. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/constants.py +0 -0
  24. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/controller/__init__.py +0 -0
  25. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/controller/constants.py +0 -0
  26. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/controller/launch.py +0 -0
  27. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/controller/node.py +0 -0
  28. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/controller/parse.py +0 -0
  29. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/README.md +0 -0
  30. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/backend/main.py +0 -0
  31. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/backend/sockets.py +0 -0
  32. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/.eslintrc.json +0 -0
  33. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/.gitignore +0 -0
  34. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/api/jobs/route.js +0 -0
  35. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/api/namespaces/route.js +0 -0
  36. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/Grafana.jsx +0 -0
  37. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/JobsData.jsx +0 -0
  38. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/LogsData.jsx +0 -0
  39. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/NavMenu.jsx +0 -0
  40. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/NavTabs.jsx +0 -0
  41. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/NavTabs2.jsx +0 -0
  42. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/SelectBtn.jsx +0 -0
  43. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/lib/utils.js +0 -0
  44. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/ui/chip-select.jsx +0 -0
  45. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/ui/input.jsx +0 -0
  46. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/ui/navigation-menu.jsx +0 -0
  47. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/components/ui/select.jsx +0 -0
  48. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/favicon.ico +0 -0
  49. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/globals.css +0 -0
  50. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/jobs/page.js +0 -0
  51. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/layout.js +0 -0
  52. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/logs/page.js +0 -0
  53. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/app/page.js +0 -0
  54. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/jsconfig.json +0 -0
  55. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/next.config.mjs +0 -0
  56. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/package-lock.json +0 -0
  57. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/package.json +0 -0
  58. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/postcss.config.mjs +0 -0
  59. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/server.js +0 -0
  60. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/dashboard/frontend/tailwind.config.js +0 -0
  61. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/__init__.py +0 -0
  62. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/aws/__init__.py +0 -0
  63. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/aws/s3.py +0 -0
  64. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/constants.py +0 -0
  65. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/data_utils.py +0 -0
  66. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/gcp/__init__.py +0 -0
  67. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/gcp/constants.py +0 -0
  68. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/gcp/gcs.py +0 -0
  69. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/gcp/utils.py +0 -0
  70. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/registry.py +0 -0
  71. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/storage.py +0 -0
  72. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/data/storage_utils.py +0 -0
  73. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/execution.py +0 -0
  74. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/kube_client.py +0 -0
  75. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/logging.py +0 -0
  76. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/manifests/controller_deployment.yaml +0 -0
  77. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/manifests/dashboard_deployment.yaml +0 -0
  78. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/manifests/dmesg_daemonset.yaml +0 -0
  79. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/manifests/pod_cleanup_controller.yaml +0 -0
  80. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/resource.py +0 -0
  81. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/serving.py +0 -0
  82. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/task.py +0 -0
  83. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/templates/deployment.yaml.j2 +0 -0
  84. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/templates/jobset.yaml.j2 +0 -0
  85. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/templates/pod.yaml.j2 +0 -0
  86. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/usage/__init__.py +0 -0
  87. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/usage/constants.py +0 -0
  88. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/__init__.py +0 -0
  89. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/accelerator_registry.py +0 -0
  90. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/annotations.py +0 -0
  91. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/base64_utils.py +0 -0
  92. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/common_utils.py +0 -0
  93. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/constants.py +0 -0
  94. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/env_options.py +0 -0
  95. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/exceptions.py +0 -0
  96. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/kubernetes_enums.py +0 -0
  97. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/kubernetes_utils.py +0 -0
  98. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/loki_utils.py +0 -0
  99. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/rich_utils.py +0 -0
  100. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/schemas.py +0 -0
  101. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/subprocess_utils.py +0 -0
  102. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/ux_utils.py +0 -0
  103. {konduktor_nightly-0.1.0.dev20250806105405 → konduktor_nightly-0.1.0.dev20250807224131}/konduktor/utils/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: konduktor-nightly
3
- Version: 0.1.0.dev20250806105405
3
+ Version: 0.1.0.dev20250807224131
4
4
  Summary: GPU Cluster Health Management
5
5
  Author: Andrew Aikawa
6
6
  Author-email: asai@berkeley.edu
@@ -11,7 +11,7 @@ from konduktor.task import Task
11
11
  __all__ = ['launch', 'Resources', 'Task', 'Serving']
12
12
 
13
13
  # Replaced with the current commit when building the wheels.
14
- _KONDUKTOR_COMMIT_SHA = '75e0a60af7c427a1419fda58e1ccc6dff519b4ba'
14
+ _KONDUKTOR_COMMIT_SHA = '45add2e516f1b7bb1f16ed063e5af87b8e5609cf'
15
15
  os.makedirs(os.path.expanduser('~/.konduktor'), exist_ok=True)
16
16
 
17
17
 
@@ -45,5 +45,5 @@ def _get_git_commit():
45
45
 
46
46
 
47
47
  __commit__ = _get_git_commit()
48
- __version__ = '1.0.0.dev0.1.0.dev20250806105405'
48
+ __version__ = '1.0.0.dev0.1.0.dev20250807224131'
49
49
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
@@ -653,6 +653,14 @@ def status(all_users: bool):
653
653
  'Default is 1000.'
654
654
  ),
655
655
  )
656
+ @click.option(
657
+ '--node-rank',
658
+ '--node_rank',
659
+ '-N',
660
+ default=0,
661
+ type=int,
662
+ help='The node rank to tail logs from.',
663
+ )
656
664
  @click.argument('job_id', type=str, nargs=1)
657
665
  # TODO(zhwu): support logs by job name
658
666
  def logs(
@@ -660,6 +668,7 @@ def logs(
660
668
  job_id: str,
661
669
  follow: bool,
662
670
  num_lines: int,
671
+ node_rank: int,
663
672
  ):
664
673
  # NOTE(dev): Keep the docstring consistent between the Python API and CLI.
665
674
  """Retrieve/tail the log of a job."""
@@ -689,7 +698,12 @@ def logs(
689
698
  'Logs are tailed from 1 hour ago, ' 'to see more logs, check Grafana.',
690
699
  fg='yellow',
691
700
  )
692
- log_utils.tail_logs(job_id, follow=follow, num_logs=num_lines)
701
+ log_utils.tail_logs(
702
+ job_id,
703
+ worker_id=node_rank,
704
+ follow=follow,
705
+ num_logs=num_lines,
706
+ )
693
707
 
694
708
 
695
709
  @cli.command(cls=_DocumentedCodeCommand)
@@ -1483,7 +1497,11 @@ def serve_status(all_users: bool):
1483
1497
 
1484
1498
 
1485
1499
  def main():
1486
- return cli()
1500
+ try:
1501
+ return cli(standalone_mode=False)
1502
+ except click.exceptions.Abort:
1503
+ click.secho('Detaching...', fg='yellow', bold=True)
1504
+ return
1487
1505
 
1488
1506
 
1489
1507
  if __name__ == '__main__':
@@ -30,7 +30,7 @@ import requests
30
30
  import websockets
31
31
 
32
32
  from konduktor import config, logging
33
- from konduktor.utils import subprocess_utils
33
+ from konduktor.utils import kubernetes_utils, subprocess_utils
34
34
 
35
35
  logger = logging.get_logger(__name__)
36
36
 
@@ -337,8 +337,13 @@ def tail_loki_logs_ws(
337
337
 
338
338
 
339
339
  def tail_vicky_logs(
340
- job_name: str, worker_id: int = 0, num_logs: int = 1000, follow: bool = True
340
+ job_name: str,
341
+ worker_id: int = 0,
342
+ num_logs: int = 1000,
343
+ follow: bool = True,
341
344
  ):
345
+ context = kubernetes_utils.get_current_kube_config_context_name()
346
+ namespace = kubernetes_utils.get_kube_config_context_namespace(context)
342
347
  query: Dict[str, Any] = {}
343
348
  if num_logs > 5000:
344
349
  # TODO(asaiacai): we should not have a limit on the number of logs, but rather
@@ -365,8 +370,9 @@ def tail_vicky_logs(
365
370
  logger.debug(f'Vicky URL: {vicky_url}')
366
371
 
367
372
  query['query'] = (
368
- 'k8s.namespace.name: "default" AND '
369
- f'batch.kubernetes.io/job-name: "{job_name}-workers-{worker_id}"'
373
+ f'k8s.namespace.name: "{namespace}" AND '
374
+ f'batch.kubernetes.io/job-name: "{job_name}-workers-0" AND '
375
+ f'batch.kubernetes.io/job-completion-index: "{worker_id}"'
370
376
  )
371
377
  query['start_offset'] = '1h'
372
378
 
@@ -406,7 +412,10 @@ def tail_vicky_logs(
406
412
 
407
413
 
408
414
  def tail_logs(
409
- job_name: str, worker_id: int = 0, num_logs: int = 1000, follow: bool = True
415
+ job_name: str,
416
+ worker_id: int = 0,
417
+ num_logs: int = 1000,
418
+ follow: bool = True,
410
419
  ):
411
420
  logs_backend = config.get_nested(('logs', 'backend'), None)
412
421
  if logs_backend == LogBackend.VICTORIA:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "konduktor-nightly"
3
- version = "0.1.0.dev20250806105405"
3
+ version = "0.1.0.dev20250807224131"
4
4
  description = "GPU Cluster Health Management"
5
5
  packages = [
6
6
  {include = "konduktor"}