synapse-sdk 2025.10.5__py3-none-any.whl → 2025.10.6__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.

@@ -13,6 +13,58 @@ from .io import get_temp_path
13
13
 
14
14
 
15
15
  def download_file(url, path_download, name=None, coerce=None, use_cached=True):
16
+ """Download a file from a URL to a specified directory.
17
+
18
+ This function downloads a file from a URL with support for caching, custom naming,
19
+ and optional path transformation. Downloads are streamed in chunks for memory efficiency.
20
+
21
+ Args:
22
+ url (str): The URL to download from. Query parameters and fragments are cleaned
23
+ before generating the cached filename.
24
+ path_download (str | Path): Directory path where the file will be saved.
25
+ name (str, optional): Custom filename for the downloaded file (without extension).
26
+ If provided, caching is disabled. If None, a hash of the URL is used as the name.
27
+ coerce (callable, optional): A function to transform the downloaded file path.
28
+ Called with the Path object after download completes.
29
+ Example: lambda p: str(p) to convert Path to string
30
+ use_cached (bool): If True (default), skip download if file already exists.
31
+ Automatically set to False when a custom name is provided.
32
+
33
+ Returns:
34
+ Path | Any: Path object pointing to the downloaded file, or the result of
35
+ coerce(path) if a coerce function was provided.
36
+
37
+ Raises:
38
+ requests.HTTPError: If the HTTP request fails (e.g., 404, 500 errors).
39
+ IOError: If file write fails due to permissions or disk space.
40
+
41
+ Examples:
42
+ Basic download with caching:
43
+ >>> path = download_file('https://example.com/image.jpg', '/tmp/downloads')
44
+ >>> print(path) # /tmp/downloads/abc123def456.jpg (hash-based name)
45
+
46
+ Custom filename without caching:
47
+ >>> path = download_file(
48
+ ... 'https://example.com/data.json',
49
+ ... '/tmp/downloads',
50
+ ... name='my_data'
51
+ ... )
52
+ >>> print(path) # /tmp/downloads/my_data.json
53
+
54
+ With path coercion to string:
55
+ >>> path_str = download_file(
56
+ ... 'https://example.com/file.txt',
57
+ ... '/tmp',
58
+ ... coerce=str
59
+ ... )
60
+ >>> print(type(path_str)) # <class 'str'>
61
+
62
+ Note:
63
+ - Downloads are streamed in 50MB chunks for memory efficiency
64
+ - URL is cleaned (query params removed) before generating cached filename
65
+ - File extension is preserved from the cleaned URL
66
+ - Existing files are reused when use_cached=True
67
+ """
16
68
  chunk_size = 1024 * 1024 * 50
17
69
  cleaned_url = clean_url(url) # remove query params and fragment
18
70
 
@@ -40,6 +92,50 @@ def download_file(url, path_download, name=None, coerce=None, use_cached=True):
40
92
 
41
93
 
42
94
  def files_url_to_path(files, coerce=None, file_field=None):
95
+ """Convert file URLs to local file paths by downloading them.
96
+
97
+ This function downloads files from URLs and replaces the URLs with local paths
98
+ in the provided dictionary. Supports both flat dictionaries and nested structures.
99
+
100
+ Args:
101
+ files (dict): Dictionary containing file URLs or file objects.
102
+ - If values are strings: treated as URLs and replaced with local paths
103
+ - If values are dicts with 'url' key: 'url' is replaced with 'path'
104
+ coerce (callable, optional): Function to transform downloaded paths.
105
+ Applied to each downloaded file path.
106
+ file_field (str, optional): Specific field name to process. If provided,
107
+ only this field is processed. If None, all fields are processed.
108
+
109
+ Returns:
110
+ None: Modifies the files dictionary in-place.
111
+
112
+ Examples:
113
+ Simple URL replacement:
114
+ >>> files = {'image': 'https://example.com/img.jpg'}
115
+ >>> files_url_to_path(files)
116
+ >>> print(files['image']) # Path('/tmp/media/abc123.jpg')
117
+
118
+ With nested objects:
119
+ >>> files = {'video': {'url': 'https://example.com/vid.mp4', 'size': 1024}}
120
+ >>> files_url_to_path(files)
121
+ >>> print(files['video']) # {'path': Path('/tmp/media/def456.mp4'), 'size': 1024}
122
+
123
+ Process specific field only:
124
+ >>> files = {'image': 'https://ex.com/a.jpg', 'doc': 'https://ex.com/b.pdf'}
125
+ >>> files_url_to_path(files, file_field='image')
126
+ >>> # Only 'image' is downloaded, 'doc' remains as URL
127
+
128
+ With path coercion:
129
+ >>> files = {'data': 'https://example.com/data.csv'}
130
+ >>> files_url_to_path(files, coerce=str)
131
+ >>> print(type(files['data'])) # <class 'str'>
132
+
133
+ Note:
134
+ - Downloads to temporary media directory: get_temp_path('media')
135
+ - Creates download directory if it doesn't exist
136
+ - Modifies input dictionary in-place
137
+ - Uses caching by default (via download_file)
138
+ """
43
139
  path_download = get_temp_path('media')
44
140
  path_download.mkdir(parents=True, exist_ok=True)
45
141
  if file_field:
@@ -53,6 +149,66 @@ def files_url_to_path(files, coerce=None, file_field=None):
53
149
 
54
150
 
55
151
  def files_url_to_path_from_objs(objs, files_fields, coerce=None, is_list=False, is_async=False):
152
+ """Convert file URLs to paths for multiple objects with nested field support.
153
+
154
+ This function processes one or more objects, extracting file URLs from specified
155
+ nested fields and replacing them with local file paths. Supports both synchronous
156
+ and asynchronous operation.
157
+
158
+ Args:
159
+ objs (dict | list): Single object or list of objects to process.
160
+ If is_list=False, can be a single dict.
161
+ If is_list=True, should be a list of dicts.
162
+ files_fields (list[str]): List of field paths to process.
163
+ Supports dot notation for nested fields (e.g., 'data.files', 'meta.image').
164
+ coerce (callable, optional): Function to transform downloaded paths.
165
+ is_list (bool): If True, objs is treated as a list. If False, objs is wrapped
166
+ in a list for processing. Default False.
167
+ is_async (bool): If True, uses async download (afiles_url_to_path_from_objs).
168
+ If False, uses synchronous download. Default False.
169
+
170
+ Returns:
171
+ None: Modifies objects in-place, replacing URLs with local paths.
172
+
173
+ Examples:
174
+ Single object with simple field:
175
+ >>> obj = {'files': {'image': 'https://example.com/img.jpg'}}
176
+ >>> files_url_to_path_from_objs(obj, files_fields=['files'])
177
+ >>> print(obj['files']['image']) # Path('/tmp/media/abc123.jpg')
178
+
179
+ Multiple objects with nested fields:
180
+ >>> objs = [
181
+ ... {'data': {'files': {'img': 'https://ex.com/1.jpg'}}},
182
+ ... {'data': {'files': {'img': 'https://ex.com/2.jpg'}}}
183
+ ... ]
184
+ >>> files_url_to_path_from_objs(objs, files_fields=['data.files'], is_list=True)
185
+ >>> # Both images are downloaded and URLs replaced with paths
186
+
187
+ Async download for better performance:
188
+ >>> objs = [{'files': {'a': 'url1', 'b': 'url2'}} for _ in range(10)]
189
+ >>> files_url_to_path_from_objs(
190
+ ... objs,
191
+ ... files_fields=['files'],
192
+ ... is_list=True,
193
+ ... is_async=True
194
+ ... )
195
+ >>> # All files downloaded concurrently
196
+
197
+ Multiple field paths:
198
+ >>> obj = {
199
+ ... 'images': {'photo': 'https://ex.com/photo.jpg'},
200
+ ... 'videos': {'clip': 'https://ex.com/video.mp4'}
201
+ ... }
202
+ >>> files_url_to_path_from_objs(obj, files_fields=['images', 'videos'])
203
+ >>> # Both images and videos fields are processed
204
+
205
+ Note:
206
+ - Silently skips missing fields (KeyError is caught and ignored)
207
+ - Supports dot notation for nested field access
208
+ - Async mode (is_async=True) provides better performance for multiple files
209
+ - Commonly used with API responses containing file URLs
210
+ - Used by BaseClient._list() with url_conversion parameter
211
+ """
56
212
  if is_async:
57
213
  asyncio.run(afiles_url_to_path_from_objs(objs, files_fields, coerce=coerce, is_list=is_list))
58
214
  else:
@@ -72,6 +228,36 @@ def files_url_to_path_from_objs(objs, files_fields, coerce=None, is_list=False,
72
228
 
73
229
 
74
230
  async def adownload_file(url, path_download, name=None, coerce=None, use_cached=True):
231
+ """Asynchronously download a file from a URL to a specified directory.
232
+
233
+ Async version of download_file() using aiohttp for concurrent downloads.
234
+ All parameters and behavior are identical to download_file().
235
+
236
+ Args:
237
+ url (str): The URL to download from.
238
+ path_download (str | Path): Directory path where the file will be saved.
239
+ name (str, optional): Custom filename (without extension).
240
+ coerce (callable, optional): Function to transform the downloaded file path.
241
+ use_cached (bool): If True (default), skip download if file exists.
242
+
243
+ Returns:
244
+ Path | Any: Path to downloaded file, or coerce(path) if provided.
245
+
246
+ Examples:
247
+ Basic async download:
248
+ >>> path = await adownload_file('https://example.com/large.zip', '/tmp')
249
+
250
+ Multiple concurrent downloads:
251
+ >>> urls = ['https://ex.com/1.jpg', 'https://ex.com/2.jpg']
252
+ >>> paths = await asyncio.gather(*[
253
+ ... adownload_file(url, '/tmp') for url in urls
254
+ ... ])
255
+
256
+ Note:
257
+ - Uses aiohttp.ClientSession for async HTTP requests
258
+ - Downloads in 50MB chunks for memory efficiency
259
+ - Recommended for downloading multiple files concurrently
260
+ """
75
261
  chunk_size = 1024 * 1024 * 50
76
262
  cleaned_url = clean_url(url) # remove query params and fragment
77
263
 
@@ -98,6 +284,41 @@ async def adownload_file(url, path_download, name=None, coerce=None, use_cached=
98
284
 
99
285
 
100
286
  async def afiles_url_to_path(files, coerce=None):
287
+ """Asynchronously convert file URLs to local paths by downloading them.
288
+
289
+ Async version of files_url_to_path() for concurrent file downloads.
290
+ Processes all files in the dictionary concurrently for better performance.
291
+
292
+ Args:
293
+ files (dict): Dictionary containing file URLs or file objects.
294
+ coerce (callable, optional): Function to transform downloaded paths.
295
+
296
+ Returns:
297
+ None: Modifies the files dictionary in-place.
298
+
299
+ Examples:
300
+ Download multiple files concurrently:
301
+ >>> files = {
302
+ ... 'image1': 'https://ex.com/1.jpg',
303
+ ... 'image2': 'https://ex.com/2.jpg',
304
+ ... 'image3': 'https://ex.com/3.jpg'
305
+ ... }
306
+ >>> await afiles_url_to_path(files)
307
+ >>> # All 3 files downloaded concurrently
308
+
309
+ With nested file objects:
310
+ >>> files = {
311
+ ... 'thumb': {'url': 'https://ex.com/thumb.jpg'},
312
+ ... 'full': {'url': 'https://ex.com/full.jpg'}
313
+ ... }
314
+ >>> await afiles_url_to_path(files)
315
+ >>> print(files['thumb']['path']) # Path object
316
+
317
+ Note:
318
+ - All files are downloaded concurrently using asyncio
319
+ - More efficient than synchronous version for multiple files
320
+ - Does not support file_field parameter (processes all fields)
321
+ """
101
322
  path_download = get_temp_path('media')
102
323
  path_download.mkdir(parents=True, exist_ok=True)
103
324
  for file_name in files:
@@ -108,6 +329,46 @@ async def afiles_url_to_path(files, coerce=None):
108
329
 
109
330
 
110
331
  async def afiles_url_to_path_from_objs(objs, files_fields, coerce=None, is_list=False):
332
+ """Asynchronously convert file URLs to paths for multiple objects.
333
+
334
+ Async version of files_url_to_path_from_objs() that downloads all files
335
+ concurrently using asyncio.gather() for maximum performance.
336
+
337
+ Args:
338
+ objs (dict | list): Single object or list of objects to process.
339
+ files_fields (list[str]): List of field paths to process (supports dot notation).
340
+ coerce (callable, optional): Function to transform downloaded paths.
341
+ is_list (bool): If True, objs is treated as a list. Default False.
342
+
343
+ Returns:
344
+ None: Modifies objects in-place, replacing URLs with local paths.
345
+
346
+ Examples:
347
+ Download files from multiple objects concurrently:
348
+ >>> objs = [
349
+ ... {'files': {'img': 'https://ex.com/1.jpg'}},
350
+ ... {'files': {'img': 'https://ex.com/2.jpg'}},
351
+ ... {'files': {'img': 'https://ex.com/3.jpg'}}
352
+ ... ]
353
+ >>> await afiles_url_to_path_from_objs(objs, ['files'], is_list=True)
354
+ >>> # All 3 images downloaded concurrently
355
+
356
+ Process large dataset efficiently:
357
+ >>> # 100 objects with multiple files each
358
+ >>> objs = [{'data': {'files': {...}}} for _ in range(100)]
359
+ >>> await afiles_url_to_path_from_objs(
360
+ ... objs,
361
+ ... files_fields=['data.files'],
362
+ ... is_list=True
363
+ ... )
364
+ >>> # All files downloaded in parallel, much faster than sync version
365
+
366
+ Note:
367
+ - All file downloads happen concurrently using asyncio.gather()
368
+ - Significantly faster than synchronous version for large datasets
369
+ - Ideal for processing API responses with many file URLs
370
+ - Used internally when is_async=True in files_url_to_path_from_objs()
371
+ """
111
372
  if not is_list:
112
373
  objs = [objs]
113
374
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 2025.10.5
3
+ Version: 2025.10.6
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -24,7 +24,7 @@ synapse_sdk/cli/plugin/create.py,sha256=HpYTpohV1NbSrULaVUlc4jWLWznPrx7glgydTM3s
24
24
  synapse_sdk/cli/plugin/publish.py,sha256=wok85WnfXzb4j6Aix7gRWM3kXW3E2eC31Q3bsDrn-vw,1547
25
25
  synapse_sdk/cli/plugin/run.py,sha256=xz5LRm3zh8Y9DMjw5FFRFVRWSCWtYfZJskfCmrPikaQ,2598
26
26
  synapse_sdk/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- synapse_sdk/clients/base.py,sha256=U14AN6MwAzYd1HR8PfIlXad1OtmqWy8O-NmO984v5DY,13355
27
+ synapse_sdk/clients/base.py,sha256=10A3LRfZ_ZN_arQjOR-qj_PJPEwYDnuP3ZxX21AuREU,19162
28
28
  synapse_sdk/clients/exceptions.py,sha256=ylv7x10eOp4aA3a48jwonnvqvkiYwzJYXjkVkRTAjwk,220
29
29
  synapse_sdk/clients/utils.py,sha256=8pPJTdzHiRPSbZMoQYHAgR2BAMO6u_R_jMV6a2p34iQ,392
30
30
  synapse_sdk/clients/agent/__init__.py,sha256=FqYbtzMJdzRfuU2SA-Yxdc0JKmVP1wxH6OlUNmB4lH8,2230
@@ -53,7 +53,7 @@ synapse_sdk/devtools/docs/README.md,sha256=yBzWf0K1ef4oymFXDaHo0nYWEgMQJqsOyrkNh
53
53
  synapse_sdk/devtools/docs/docusaurus.config.ts,sha256=K1b002RS0x0tsOyib_6CSgUlASEULC9vAX8YDpbsRN4,3229
54
54
  synapse_sdk/devtools/docs/package-lock.json,sha256=dtepgbPC8gq5uz-hdcac4hIU-Cs209tX0sfBuB7RfEQ,705694
55
55
  synapse_sdk/devtools/docs/package.json,sha256=8veqayA4U3OLpdQaz6AzB59RQwTU-5soeYlYYWIxq28,1187
56
- synapse_sdk/devtools/docs/sidebars.ts,sha256=A0LdvAgIBOfZTfcGcc7QI4pvEEYoC--7N1g2KZPkG8k,3031
56
+ synapse_sdk/devtools/docs/sidebars.ts,sha256=gAicvdVmym1PZnR9tZH3SDb6PgOGLuX8U-nAOC4eaOQ,3365
57
57
  synapse_sdk/devtools/docs/tsconfig.json,sha256=O9BNlRPjPiaVHW2_boShMbmTnh0Z2k0KQO6Alf9FMVY,215
58
58
  synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md,sha256=iP7gl_FPqo-qX13lkSRcRoT6ayJNmCkXoyvlm7GH248,312
59
59
  synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md,sha256=cM-dhhTeurEWMcdn0Kx-NpNts2YUUraSI_XFk_gVHEE,3122
@@ -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/annotation-mixin.md,sha256=bGbeUG8HjyOslTPAv1iBFkXlWny197Ys58ZQCYmuw5E,8512
77
77
  synapse_sdk/devtools/docs/docs/api/clients/backend.md,sha256=DXAxa82FIJiEThCdXu0t_7GeIomHXD-85Y3aZtNCICs,8906
78
- synapse_sdk/devtools/docs/docs/api/clients/base.md,sha256=IxRGjYFI9KjZU3TFkjdWVdw9sgH40WAtOgIPJjORysc,720
78
+ synapse_sdk/devtools/docs/docs/api/clients/base.md,sha256=mO2X_Tn7ajPNAJpPQmBsuBM3m5lmzgz92FGPJTtHfz4,8636
79
79
  synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md,sha256=AmUKBCU64BHaMkWOfAFIhNBCRe9ZCUx-gwAQGQOgA30,14442
80
80
  synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md,sha256=WTz4GsgEnY5jpv54YjNCt31zYWE-E_L9-JVZKW_V4v4,12294
81
81
  synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md,sha256=8jrAn6DjAcqdbTnUq5btpaJNu67aUZiqhS9oPX7iurQ,16745
@@ -96,6 +96,7 @@ synapse_sdk/devtools/docs/docs/features/utils/storage.md,sha256=uIpc37trKUm4XHe1
96
96
  synapse_sdk/devtools/docs/docs/features/utils/types.md,sha256=l84J1Ooa40xBYdvK1YpeKBT9kaqaWQUMNIFPUiC2e_U,1046
97
97
  synapse_sdk/devtools/docs/docs/plugins/export-plugins.md,sha256=Wajf3CZRQiytRx6SS1lIBlGO5o4F2vOw-xog51JiHJU,37074
98
98
  synapse_sdk/devtools/docs/docs/plugins/plugins.md,sha256=G6y3XZZHuC65ApfKE0fYHCAC5TOFnZqzE7VR-KOExVk,25074
99
+ synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md,sha256=lEo7EILXwFan3L5zyqeQKqtEpWbHbN-xn7JmLyHVmNc,17123
99
100
  synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md,sha256=Dhnlqd7okB3SoOZ5RYRYqeBBZnGfctZrlCYo1A7GWyA,6832
100
101
  synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md,sha256=itkXVOV-pZNsqX0PIA9YhCJNp8iNgxVdQvM0sVahHJ4,47810
101
102
  synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md,sha256=J-z2KkLt5WWTgbJGRxvqrZQxfHvur_QtCGA6iT5a0Og,17134
@@ -130,7 +131,7 @@ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/ind
130
131
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md,sha256=UVllVNexQYmiHAk6dVVvd0MPQt6S9vBcK5Ur-BeLP2M,827
131
132
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md,sha256=YnF9Ww5_rT89Sps6FP1val3ygd0CqJCISokg1ObgNA4,7237
132
133
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md,sha256=uRXPub52H-BAPsnHFerowQHrLpFomFykzgn1zqZOpj8,9722
133
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md,sha256=cn8B5Py1TQjQc3a1B8wT_UuOGmb9eCk2IrKWSZnPlmA,804
134
+ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md,sha256=9NfpRI_5d1CqNtZUYk37jyP3-ZLtys5sy14t6yhg1z4,9644
134
135
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md,sha256=y9Jxzw_AstCnQzNlinEod-xJAkLBXapp7hcz9pebgt8,13346
135
136
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md,sha256=EH-rD25EzmhUYfWfJSvb-16fgmbsJzVnOGIlPLwdh7E,10806
136
137
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md,sha256=IEWchj4OhSLPrwC4K7rwAJxAS9fLmrzUGz5x_G4AkZg,5533
@@ -149,6 +150,7 @@ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/feature
149
150
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md,sha256=JdDMC2FKovAU55pPEBoIUPPniU5mKAvA5w1Zb36u9AE,1207
150
151
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md,sha256=XcvZuio6NUDuDSe_XhYq1ACDaAJThmekP3anEzOCRks,38804
151
152
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md,sha256=wUuuOmQQY1dURZzJ0HSpiABaJWqKbxQn31Xfn-wUf8E,4947
153
+ synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md,sha256=4xu_pThx4ctWRnrL7bYuBsnsYv9fvZKls0S83vVutc4,18112
152
154
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md,sha256=JlPxHFzeyXx0xi2vpGXc-GTkFeg9R-Smpap0OjCyE7g,7592
153
155
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md,sha256=UowD_fqWFVD81ubJKguX-O9fSf7L07i6Pft8DFdfVn0,48803
154
156
  synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md,sha256=InL4EI0BkVXgjs-j7cPRYaRXDVxxMgBYYLs_9FdyKxk,18408
@@ -225,8 +227,8 @@ synapse_sdk/plugins/categories/neural_net/actions/deployment.py,sha256=njhDp05KX
225
227
  synapse_sdk/plugins/categories/neural_net/actions/gradio.py,sha256=jBkonh0JHRIKFPxv-XBBFM8Da3dSJs-vyJu_KGT73DQ,4508
226
228
  synapse_sdk/plugins/categories/neural_net/actions/inference.py,sha256=0a655ELqNVjPFZTJDiw4EUdcMCPGveUEKyoYqpwMFBU,1019
227
229
  synapse_sdk/plugins/categories/neural_net/actions/test.py,sha256=JY25eg-Fo6WbgtMkGoo_qNqoaZkp3AQNEypJmeGzEog,320
228
- synapse_sdk/plugins/categories/neural_net/actions/train.py,sha256=Vwr8Lbv6LWvuYpF3JX8Oh4Nu2rh8lJXiLjQSto8-xGM,5449
229
- synapse_sdk/plugins/categories/neural_net/actions/tune.py,sha256=C2zv3o0S-5Hjjsms8ULDGD-ad_DdNTqCPOcDqXa0v1Y,13494
230
+ synapse_sdk/plugins/categories/neural_net/actions/train.py,sha256=D0LN-eMIv3SEeYPBn-4k60kyHlJP3SMQ1LidJYeOk38,26503
231
+ synapse_sdk/plugins/categories/neural_net/actions/tune.py,sha256=l95PeA-m4ypkgSDVGZUck1XUz6bX30pQPnR6DCLS3Hk,18390
230
232
  synapse_sdk/plugins/categories/neural_net/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
231
233
  synapse_sdk/plugins/categories/neural_net/base/inference.py,sha256=R5DASI6-5vzsjDOYxqeGGMBjnav5qHF4hNJT8zNUR3I,1097
232
234
  synapse_sdk/plugins/categories/neural_net/templates/config.yaml,sha256=TMdvthf0zQYYTHf0IibKJ6InziRCWM4100C1DKkJVqU,1094
@@ -310,7 +312,7 @@ synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/async_upl
310
312
  synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py,sha256=IkRpy561HMHE1Ji0l2Nv21CfH9ZiCrm4qBCADeZFTXs,1875
311
313
  synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py,sha256=aq-sI8tScvc0rX21qlLeBgJyKaVpC0hziMB5vcg5K3Y,38
312
314
  synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py,sha256=3_jLBqw2snnBAtDuKKwVS6ImMwDZHeOSnqph_jCq2nE,2515
313
- synapse_sdk/plugins/categories/upload/templates/README.md,sha256=30BC3CpHrPmjPeLExFtjnYi6qZrBcDdn4fOc5F-uMmc,8995
315
+ synapse_sdk/plugins/categories/upload/templates/README.md,sha256=D0U6lay1qrUY7WwOi9_GOVD6aCtJ9yK9aKfn7-CZFmo,9532
314
316
  synapse_sdk/plugins/categories/upload/templates/config.yaml,sha256=xrLMhK6QTvxnqep7ulrEuq8DxVPS7TOI2cogCaBxK2g,1127
315
317
  synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py,sha256=G8xv24PGWmL84Y77tElaEJhbjyjxklkqqdmxmZ834L0,11239
316
318
  synapse_sdk/plugins/categories/upload/templates/plugin/upload.py,sha256=ylEbp2KFiLQosVr-Jl5SDeMNSgr9mwb4eNzuEq73BJA,3588
@@ -359,7 +361,7 @@ synapse_sdk/utils/file/__init__.py,sha256=1FFrQVddZ8GgjcXkpWh4YcKLdzzCIB0p8bGmE3
359
361
  synapse_sdk/utils/file/archive.py,sha256=Wdn4f7vkqePNCE2JPMzZnyIfLrQ33LuPRvEGwB4Ieg4,1107
360
362
  synapse_sdk/utils/file/checksum.py,sha256=9TArSECBHVwb0-NmtlJyNjZXXXMMOtwGxXW1p350B1g,1570
361
363
  synapse_sdk/utils/file/chunking.py,sha256=IC1FPMqRwtuDFTZOZDvhCuUfo2LBMIC4Tf-LeLB0A1Q,1088
362
- synapse_sdk/utils/file/download.py,sha256=Zsd0ik7ajRexwcRoQvx7AlZbe4uD9hhurZYs3eGw_1s,3931
364
+ synapse_sdk/utils/file/download.py,sha256=5lKfrmbnm7qFDnvWLOxHj7F-DGxZ-5TN953JfsB_Y4g,15323
363
365
  synapse_sdk/utils/file/encoding.py,sha256=wcmWJuqhOnO94Umz03z_7znhtKwgpKIK9CsEagNdIwc,1124
364
366
  synapse_sdk/utils/file/io.py,sha256=fl_PvRrdnAkGMmxcDth6nshudv94nalibkPOaI7KIOk,447
365
367
  synapse_sdk/utils/file/video/__init__.py,sha256=mlmTtmx22-XZmrf5acPTOo2Ra2MMtVxUkxkDdQht4UE,614
@@ -376,9 +378,9 @@ synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_n
376
378
  synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
377
379
  synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
378
380
  synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
379
- synapse_sdk-2025.10.5.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
380
- synapse_sdk-2025.10.5.dist-info/METADATA,sha256=N1gJlSwg8kEhRTkXxmHMAJntzig0DtxmmV_t1Z5uPkE,4186
381
- synapse_sdk-2025.10.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
382
- synapse_sdk-2025.10.5.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
383
- synapse_sdk-2025.10.5.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
384
- synapse_sdk-2025.10.5.dist-info/RECORD,,
381
+ synapse_sdk-2025.10.6.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
382
+ synapse_sdk-2025.10.6.dist-info/METADATA,sha256=jkNAyTDluLpDX8MiGonLV6aL5tdWAFCAJqkmUMjX1p8,4186
383
+ synapse_sdk-2025.10.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
384
+ synapse_sdk-2025.10.6.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
385
+ synapse_sdk-2025.10.6.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
386
+ synapse_sdk-2025.10.6.dist-info/RECORD,,