synapse-sdk 1.0.0b24__py3-none-any.whl → 2025.9.1__py3-none-any.whl

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 synapse-sdk might be problematic. Click here for more details.

@@ -295,3 +295,53 @@ class RayClientMixin(BaseClient):
295
295
  def delete_serve_application(self, pk):
296
296
  path = f'serve_applications/{pk}/'
297
297
  return self._delete(path)
298
+
299
+ def stop_job(self, pk):
300
+ """Stop a running job gracefully.
301
+
302
+ Uses Ray's stop_job() API to request graceful termination of the job.
303
+ This preserves job state and allows for potential resubmission later.
304
+
305
+ Args:
306
+ pk (str): Job primary key or identifier. Must be alphanumeric with
307
+ optional hyphens/underscores, max 100 characters.
308
+
309
+ Returns:
310
+ dict: Response containing job status and stop details.
311
+
312
+ Raises:
313
+ ClientError:
314
+ - 400: If pk is empty, contains invalid characters, or too long
315
+ - 400: If job is already in terminal state (STOPPED, FAILED, etc.)
316
+ - 404: If job is not found
317
+ - 503: If connection to Ray cluster fails
318
+ - 500: If unexpected error occurs during stop
319
+
320
+ Usage:
321
+ >>> # Stop a running job
322
+ >>> result = client.stop_job('job-12345')
323
+ >>> print(result['status']) # Should show 'STOPPING' or similar
324
+
325
+ >>> # Handle stop errors
326
+ >>> try:
327
+ ... client.stop_job('job-12345')
328
+ ... except ClientError as e:
329
+ ... print(f"Stop failed: {e}")
330
+
331
+ Technical Notes:
332
+ - Uses Ray's stop_job() API for graceful termination
333
+ - Validates job state before attempting stop
334
+ - Maintains consistency with existing SDK patterns
335
+ - Provides detailed error messages for debugging
336
+
337
+ See Also:
338
+ resume_job: Method for restarting stopped jobs
339
+ """
340
+ # Validate inputs using network utilities
341
+ validated_pk = validate_resource_id(pk, 'job')
342
+
343
+ # Build API path for job stop
344
+ path = f'jobs/{validated_pk}/stop/'
345
+
346
+ # Use _post method with empty data to match Ray's API pattern
347
+ return self._post(path)
@@ -14,7 +14,7 @@ The `RayClientMixin` provides comprehensive Ray cluster operations, including jo
14
14
 
15
15
  ## Key Features
16
16
 
17
- - **Job Lifecycle Management**: Create, monitor, and manage Ray jobs
17
+ - **Job Lifecycle Management**: Create, monitor, manage, and stop Ray jobs
18
18
  - **Real-time Log Streaming**: WebSocket and HTTP-based log tailing
19
19
  - **Node & Task Monitoring**: Monitor cluster resources and task execution
20
20
  - **Ray Serve Integration**: Deploy and manage Ray Serve applications
@@ -52,6 +52,11 @@ jobs = client.list_jobs()
52
52
  # Get specific job details
53
53
  job = client.get_job('job-12345')
54
54
 
55
+ # Stop a running job if needed
56
+ if job['status'] == 'RUNNING':
57
+ result = client.stop_job('job-12345')
58
+ print(f"Job stop initiated: {result['status']}")
59
+
55
60
  # Stream logs in real-time
56
61
  for log_line in client.tail_job_logs('job-12345'):
57
62
  print(log_line.strip())
@@ -86,6 +91,22 @@ Get static log entries for a job.
86
91
  logs = client.list_job_logs('job-12345')
87
92
  ```
88
93
 
94
+ ### `stop_job(pk)`
95
+
96
+ Stop a running job gracefully using Ray's stop_job() API.
97
+
98
+ ```python
99
+ # Stop a running job
100
+ result = client.stop_job('job-12345')
101
+ print(f"Stop status: {result['status']}")
102
+
103
+ # Handle stop errors
104
+ try:
105
+ client.stop_job('job-12345')
106
+ except ClientError as e:
107
+ print(f"Stop failed: {e}")
108
+ ```
109
+
89
110
  ## Real-time Log Streaming
90
111
 
91
112
  ### `tail_job_logs(pk, stream_timeout=10, protocol='stream')`
@@ -221,7 +242,7 @@ except ClientError as e:
221
242
 
222
243
  ### Common Error Codes
223
244
 
224
- - **400**: Invalid parameters (job ID, timeout, protocol)
245
+ - **400**: Invalid parameters (job ID, timeout, protocol) or job already in terminal state
225
246
  - **404**: Resource not found (job, node, task, application)
226
247
  - **408**: Connection or read timeout
227
248
  - **429**: Stream limits exceeded
@@ -14,7 +14,7 @@ Apache Ray 클러스터 관리 및 모니터링 기능을 위한 클라이언트
14
14
 
15
15
  ## 주요 기능
16
16
 
17
- - **Job 라이프사이클 관리**: Ray 작업 생성, 모니터링관리
17
+ - **Job 라이프사이클 관리**: Ray 작업 생성, 모니터링, 관리 중지
18
18
  - **실시간 로그 스트리밍**: WebSocket 및 HTTP 기반 로그 테일링
19
19
  - **노드 및 태스크 모니터링**: 클러스터 리소스 및 태스크 실행 모니터링
20
20
  - **Ray Serve 통합**: Ray Serve 애플리케이션 배포 및 관리
@@ -52,6 +52,11 @@ jobs = client.list_jobs()
52
52
  # 특정 작업 세부정보 가져오기
53
53
  job = client.get_job('job-12345')
54
54
 
55
+ # 필요한 경우 실행 중인 작업 중지
56
+ if job['status'] == 'RUNNING':
57
+ result = client.stop_job('job-12345')
58
+ print(f"작업 중지 시작: {result['status']}")
59
+
55
60
  # 실시간으로 로그 스트리밍
56
61
  for log_line in client.tail_job_logs('job-12345'):
57
62
  print(log_line.strip())
@@ -86,6 +91,22 @@ for job in jobs['results']:
86
91
  logs = client.list_job_logs('job-12345')
87
92
  ```
88
93
 
94
+ ### `stop_job(pk)`
95
+
96
+ Ray의 stop_job() API를 사용하여 실행 중인 작업을 정상적으로 중지합니다.
97
+
98
+ ```python
99
+ # 실행 중인 작업 중지
100
+ result = client.stop_job('job-12345')
101
+ print(f"중지 상태: {result['status']}")
102
+
103
+ # 중지 오류 처리
104
+ try:
105
+ client.stop_job('job-12345')
106
+ except ClientError as e:
107
+ print(f"중지 실패: {e}")
108
+ ```
109
+
89
110
  ## 실시간 로그 스트리밍
90
111
 
91
112
  ### `tail_job_logs(pk, stream_timeout=10, protocol='stream')`
@@ -221,7 +242,7 @@ except ClientError as e:
221
242
 
222
243
  ### 일반적인 오류 코드
223
244
 
224
- - **400**: 잘못된 매개변수 (job ID, timeout, protocol)
245
+ - **400**: 잘못된 매개변수 (job ID, timeout, protocol) 또는 이미 종료 상태인 작업
225
246
  - **404**: 리소스를 찾을 수 없음 (job, node, task, application)
226
247
  - **408**: 연결 또는 읽기 timeout
227
248
  - **429**: 스트림 제한 초과
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0b24
3
+ Version: 2025.9.1
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -25,7 +25,7 @@ Requires-Dist: pillow
25
25
  Requires-Dist: websockets
26
26
  Requires-Dist: ffmpeg-python==0.2.0
27
27
  Provides-Extra: all
28
- Requires-Dist: ray[all]==2.44.1; extra == "all"
28
+ Requires-Dist: ray[all]==2.49.1; extra == "all"
29
29
  Requires-Dist: python-nmap; extra == "all"
30
30
  Requires-Dist: hyperopt; extra == "all"
31
31
  Requires-Dist: bayesian-optimization==1.4.3; extra == "all"
@@ -29,7 +29,7 @@ synapse_sdk/clients/exceptions.py,sha256=ylv7x10eOp4aA3a48jwonnvqvkiYwzJYXjkVkRT
29
29
  synapse_sdk/clients/utils.py,sha256=8pPJTdzHiRPSbZMoQYHAgR2BAMO6u_R_jMV6a2p34iQ,392
30
30
  synapse_sdk/clients/agent/__init__.py,sha256=FqYbtzMJdzRfuU2SA-Yxdc0JKmVP1wxH6OlUNmB4lH8,2230
31
31
  synapse_sdk/clients/agent/core.py,sha256=aeMSzf8BF7LjVcmHaL8zC7ofBZUff8kIeqkW1xUJ6Sk,745
32
- synapse_sdk/clients/agent/ray.py,sha256=TfRiFv4QqwvxGAoNY7PmAWa3k6XgZaF1-fmLU-laqeM,12111
32
+ synapse_sdk/clients/agent/ray.py,sha256=xs-X5ObKPbDN23gmDxs2lhI8h6K6iocGk7PAN9hBTjc,13990
33
33
  synapse_sdk/clients/agent/service.py,sha256=s7KuPK_DB1nr2VHrigttV1WyFonaGHNrPvU8loRxHcE,478
34
34
  synapse_sdk/clients/backend/__init__.py,sha256=9FzjQn0ljRhtdaoG3n38Mdgte7GFwIh4OtEmoqVg2_E,2098
35
35
  synapse_sdk/clients/backend/annotation.py,sha256=t9KnSdCJ7NvDRkAOKn4lm5hgoawbLCwIHMeo45QiIlQ,1249
@@ -75,7 +75,7 @@ synapse_sdk/devtools/docs/docs/api/index.md,sha256=l5EA65asRKZpPLKp1agn8jIQjzURz
75
75
  synapse_sdk/devtools/docs/docs/api/clients/agent.md,sha256=QbtdFQA-7rZhtnOh9tGSE9tKQQFeYGE7Z7RmxjVJzuw,786
76
76
  synapse_sdk/devtools/docs/docs/api/clients/backend.md,sha256=j0NYx82rEiydlMtNQvqkWIXLVHjxckRaZOh-JiVr4LM,1453
77
77
  synapse_sdk/devtools/docs/docs/api/clients/base.md,sha256=IxRGjYFI9KjZU3TFkjdWVdw9sgH40WAtOgIPJjORysc,720
78
- synapse_sdk/devtools/docs/docs/api/clients/ray.md,sha256=mmK694nU10W7c_Z_2PBY_4qvqiL7ADZTP1Ew2CxWVA4,7581
78
+ synapse_sdk/devtools/docs/docs/api/clients/ray.md,sha256=dnrqIT3MeCUnCH-9yUH59RSm46ZUtdRuncpfjFoPMXY,8089
79
79
  synapse_sdk/devtools/docs/docs/api/plugins/categories.md,sha256=8zRHyyl3JQ2p0zKU86-nE-NDeWZLMwp0bh8ZF-PSx9M,839
80
80
  synapse_sdk/devtools/docs/docs/api/plugins/models.md,sha256=XRMTD2DBilZwmO6AmPhLgdzNfBpcFkAdrBg9mgOMTUs,1060
81
81
  synapse_sdk/devtools/docs/docs/api/plugins/utils.md,sha256=39soJ1JLROm_mygR9UWG6XqZ1i5ESmTeZGijrAfUh-o,8389
@@ -117,7 +117,7 @@ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/ind
117
117
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md,sha256=UVllVNexQYmiHAk6dVVvd0MPQt6S9vBcK5Ur-BeLP2M,827
118
118
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md,sha256=3XUZv_LYBuFfmY60t-0ZNeH4U61EzHrmI9ggfs7vS_8,1505
119
119
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md,sha256=cn8B5Py1TQjQc3a1B8wT_UuOGmb9eCk2IrKWSZnPlmA,804
120
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md,sha256=sVdBRg4g7x0O9bJ0JP1fzzDc74Z9swGl8jDlbpBbCeA,8346
120
+ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md,sha256=m7yxYeDMnRdYPrzTPuSk9EHuDRjEMZRY6q-ty4-HmGs,8931
121
121
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md,sha256=6o-8H7khfiMhQSXBAvkYpf6jzOEndPje1QAGdlGfskw,843
122
122
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md,sha256=pMAc1VLUXnHCv2xvvx-GBqVQ1Uh4h-u4nrco5UZ2z-Y,613
123
123
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md,sha256=X0haPkqUY89K5R3LiGLQX9Boh_BpLxUsHA13skTTAp8,1015
@@ -296,9 +296,9 @@ synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_n
296
296
  synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
297
297
  synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
298
298
  synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
299
- synapse_sdk-1.0.0b24.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
300
- synapse_sdk-1.0.0b24.dist-info/METADATA,sha256=tZXjgzMFe1phEDqypqt3HjsxjvYfKS7lm_MfRgcKHNc,3781
301
- synapse_sdk-1.0.0b24.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
302
- synapse_sdk-1.0.0b24.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
303
- synapse_sdk-1.0.0b24.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
304
- synapse_sdk-1.0.0b24.dist-info/RECORD,,
299
+ synapse_sdk-2025.9.1.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
300
+ synapse_sdk-2025.9.1.dist-info/METADATA,sha256=ZIeAof3DTKvJG72NhD8WlTJXhHpkXAZexGaH0i5lFrM,3781
301
+ synapse_sdk-2025.9.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
302
+ synapse_sdk-2025.9.1.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
303
+ synapse_sdk-2025.9.1.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
304
+ synapse_sdk-2025.9.1.dist-info/RECORD,,