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.
- synapse_sdk/clients/agent/ray.py +50 -0
- synapse_sdk/devtools/docs/docs/api/clients/ray.md +23 -2
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +23 -2
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/METADATA +2 -2
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/RECORD +9 -9
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/WHEEL +0 -0
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-1.0.0b24.dist-info → synapse_sdk-2025.9.1.dist-info}/top_level.txt +0 -0
synapse_sdk/clients/agent/ray.py
CHANGED
|
@@ -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
|
|
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:
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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-
|
|
300
|
-
synapse_sdk-
|
|
301
|
-
synapse_sdk-
|
|
302
|
-
synapse_sdk-
|
|
303
|
-
synapse_sdk-
|
|
304
|
-
synapse_sdk-
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|