synapse-sdk 1.0.0a70__py3-none-any.whl → 1.0.0a71__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/loggers.py CHANGED
@@ -110,7 +110,7 @@ class BaseLogger:
110
110
  if 'categories' not in self.metrics_record:
111
111
  self.metrics_record['categories'] = {}
112
112
 
113
- self.metrics_record['categories'][category] = value
113
+ self.metrics_record['categories'].setdefault(category, {}).update(value)
114
114
 
115
115
  def log(self, action, data, file=None):
116
116
  raise NotImplementedError
@@ -280,7 +280,18 @@ class ExportAction(Action):
280
280
  'proportion': 100,
281
281
  }
282
282
  }
283
- metrics_categories = {'data_file', 'original_file'}
283
+ metrics_categories = {
284
+ 'data_file': {
285
+ 'stand_by': 0,
286
+ 'failed': 0,
287
+ 'success': 0,
288
+ },
289
+ 'original_file': {
290
+ 'stand_by': 0,
291
+ 'failed': 0,
292
+ 'success': 0,
293
+ },
294
+ }
284
295
 
285
296
  def get_filtered_results(self, filters, handler):
286
297
  """Get filtered target results."""
@@ -142,7 +142,13 @@ class ToTaskAction(Action):
142
142
  'proportion': 100,
143
143
  },
144
144
  }
145
- metrics_categories = {'annotate_task_data'}
145
+ metrics_categories = {
146
+ 'annotate_task_data': {
147
+ 'stand_by': 0,
148
+ 'failed': 0,
149
+ 'success': 0,
150
+ }
151
+ }
146
152
 
147
153
  def start(self):
148
154
  """Start to_task action.
@@ -256,7 +262,9 @@ class ToTaskAction(Action):
256
262
  # Process each task
257
263
  for task_id in task_ids:
258
264
  try:
259
- result = self._process_single_task(client, task_id, task_params, target_specification_name)
265
+ result = self._process_single_task(
266
+ client, task_id, task_params, target_specification_name, AnnotationMethod.FILE
267
+ )
260
268
  if result['success']:
261
269
  success_count += 1
262
270
  else:
@@ -279,7 +287,12 @@ class ToTaskAction(Action):
279
287
  self.run.log_message(f'Annotation completed. Success: {success_count}, Failed: {failed_count}')
280
288
 
281
289
  def _process_single_task(
282
- self, client: BackendClient, task_id: int, task_params: Dict[str, Any], target_specification_name: str
290
+ self,
291
+ client: BackendClient,
292
+ task_id: int,
293
+ task_params: Dict[str, Any],
294
+ target_specification_name: Optional[str],
295
+ method: AnnotationMethod,
283
296
  ) -> Dict[str, Any]:
284
297
  """Process a single task for annotation.
285
298
 
@@ -287,7 +300,8 @@ class ToTaskAction(Action):
287
300
  client (BackendClient): The backend client instance.
288
301
  task_id (int): The task ID to process.
289
302
  task_params (Dict[str, Any]): Parameters for getting task data.
290
- target_specification_name (str): The name of the target specification.
303
+ target_specification_name (Optional[str]): The name of the target specification.
304
+ method (AnnotationMethod): The annotation method to use.
291
305
 
292
306
  Returns:
293
307
  Dict[str, Any]: Result dictionary with 'success' boolean and optional 'error' message.
@@ -308,6 +322,41 @@ class ToTaskAction(Action):
308
322
 
309
323
  task: Dict[str, Any] = task_response
310
324
 
325
+ if method == AnnotationMethod.FILE:
326
+ if not target_specification_name:
327
+ error_msg = 'Target specification name is required for file annotation method'
328
+ self.run.log_message(f'{error_msg} for task {task_id}')
329
+ self.run.log_annotate_task_data({'task_id': task_id, 'error': error_msg}, AnnotateTaskDataStatus.FAILED)
330
+ return {'success': False, 'error': error_msg}
331
+ return self._process_single_task_with_file(client, task_id, task, target_specification_name)
332
+ elif method == AnnotationMethod.INFERENCE:
333
+ return self._process_single_task_with_inference(client, task_id, task)
334
+ else:
335
+ error_msg = f'Unsupported annotation method: {method}'
336
+ self.run.log_message(f'{error_msg} for task {task_id}')
337
+ self.run.log_annotate_task_data({'task_id': task_id, 'error': error_msg}, AnnotateTaskDataStatus.FAILED)
338
+ return {'success': False, 'error': error_msg}
339
+
340
+ def _process_single_task_with_file(
341
+ self, client: BackendClient, task_id: int, task: Dict[str, Any], target_specification_name: str
342
+ ) -> Dict[str, Any]:
343
+ """Process a single task for file-based annotation.
344
+
345
+ Args:
346
+ client (BackendClient): The backend client instance.
347
+ task_id (int): The task ID to process.
348
+ task (Dict[str, Any]): The task data.
349
+ target_specification_name (str): The name of the target specification.
350
+
351
+ Returns:
352
+ Dict[str, Any]: Result dictionary with 'success' boolean and optional 'error' message.
353
+ """
354
+ if not self.run:
355
+ raise ValueError('Run instance not properly initialized')
356
+
357
+ # Type assertion to help the linter
358
+ assert isinstance(self.run, ToTaskRun)
359
+
311
360
  # Extract data file information
312
361
  data_unit = task.get('data_unit', {})
313
362
  files = data_unit.get('files', {})
@@ -332,8 +381,12 @@ class ToTaskAction(Action):
332
381
  response.raise_for_status()
333
382
  data = json.loads(response.content)
334
383
 
384
+ # Convert data to task object
385
+ annotation_to_task = self.entrypoint(self.run)
386
+ converted_data = annotation_to_task.convert_data_from_file(data)
387
+
335
388
  # Submit annotation data
336
- client.annotate_task_data(task_id, data={'action': 'submit', 'data': data})
389
+ client.annotate_task_data(task_id, data={'action': 'submit', 'data': converted_data})
337
390
 
338
391
  # Log success
339
392
  self.run.log_annotate_task_data({'task_id': task_id, 'url': url}, AnnotateTaskDataStatus.SUCCESS)
@@ -350,6 +403,84 @@ class ToTaskAction(Action):
350
403
  self.run.log_annotate_task_data({'task_id': task_id, 'error': error_msg}, AnnotateTaskDataStatus.FAILED)
351
404
  return {'success': False, 'error': error_msg}
352
405
 
406
+ def _process_single_task_with_inference(
407
+ self, client: BackendClient, task_id: int, task: Dict[str, Any]
408
+ ) -> Dict[str, Any]:
409
+ """Process a single task for inference-based annotation.
410
+
411
+ Args:
412
+ client (BackendClient): The backend client instance.
413
+ task_id (int): The task ID to process.
414
+ task (Dict[str, Any]): The task data.
415
+
416
+ Returns:
417
+ Dict[str, Any]: Result dictionary with 'success' boolean and optional 'error' message.
418
+ """
419
+ if not self.run or not self.params:
420
+ raise ValueError('Run instance or parameters not properly initialized')
421
+
422
+ # Type assertion to help the linter
423
+ assert isinstance(self.run, ToTaskRun)
424
+
425
+ try:
426
+ # Get pre-processor information
427
+ pre_processor_id = self.params.get('pre_processor')
428
+
429
+ if not pre_processor_id:
430
+ error_msg = 'Pre-processor ID is required for inference annotation method'
431
+ self.run.log_message(f'{error_msg} for task {task_id}')
432
+ self.run.log_annotate_task_data({'task_id': task_id, 'error': error_msg}, AnnotateTaskDataStatus.FAILED)
433
+ return {'success': False, 'error': error_msg}
434
+
435
+ # Call inference pre processor if specified.
436
+ pre_processor = client.get_plugin_release(pre_processor_id)
437
+ pre_processor_code = pre_processor['config']['code']
438
+ pre_processor_version = pre_processor['version']
439
+
440
+ # Extract task data for inference
441
+ data_unit = task.get('data_unit', {})
442
+ files = data_unit.get('files', {})
443
+
444
+ # Find primary image URL from files
445
+ primary_file_url = ''
446
+ for file_info in files.values():
447
+ if file_info.get('is_primary') and file_info.get('url'):
448
+ primary_file_url = file_info['url']
449
+ break
450
+
451
+ pre_processor_params = self.params.get('pre_processor_params', {})
452
+ pre_processor_params['image_path'] = primary_file_url
453
+ inference_payload = {
454
+ 'agent': 1,
455
+ 'action': 'inference',
456
+ 'version': pre_processor_version,
457
+ 'params': {
458
+ 'model': self.params.get('model'),
459
+ 'method': 'post',
460
+ 'json': pre_processor_params,
461
+ },
462
+ }
463
+ inference_data = client.run_plugin(pre_processor_code, inference_payload)
464
+
465
+ # Convert data to task object
466
+ annotation_to_task = self.entrypoint(self.run)
467
+ converted_result = annotation_to_task.convert_data_from_inference(inference_data)
468
+
469
+ # Submit inference annotation data
470
+ client.annotate_task_data(task_id, data={'action': 'submit', 'data': converted_result})
471
+
472
+ # Log success
473
+ self.run.log_annotate_task_data(
474
+ {'task_id': task_id, 'pre_processor_id': pre_processor_id}, AnnotateTaskDataStatus.SUCCESS
475
+ )
476
+ return {'success': True}
477
+
478
+ except Exception as e:
479
+ error_msg = f'Failed to process inference for task {task_id}: {str(e)}'
480
+ self.run.log_message(error_msg)
481
+ self.run.log_annotate_task_data({'task_id': task_id, 'error': error_msg}, AnnotateTaskDataStatus.FAILED)
482
+ return {'success': False, 'error': error_msg}
483
+
353
484
  def _update_metrics(self, total_tasks: int, success_count: int, failed_count: int):
354
485
  """Update metrics for task annotation progress.
355
486
 
@@ -375,8 +506,53 @@ class ToTaskAction(Action):
375
506
  Args:
376
507
  task_ids (List[int]): List of task IDs to annotate data to.
377
508
  """
378
- if not self.run:
379
- raise ValueError('Run instance not properly initialized')
509
+ if not self.run or not self.params:
510
+ raise ValueError('Run instance or parameters not properly initialized')
380
511
 
381
- self.run.log_message('Pre annotation with inference is not supported.')
382
- self.run.end_log()
512
+ if not self.params.get('model'):
513
+ raise ValueError('Model is required for inference annotation method')
514
+
515
+ # Type assertion to help the linter
516
+ assert isinstance(self.run, ToTaskRun)
517
+ assert isinstance(self.run.client, BackendClient)
518
+
519
+ client: BackendClient = self.run.client
520
+ task_params = {
521
+ 'fields': 'id,data,data_unit',
522
+ 'expand': 'data_unit',
523
+ }
524
+
525
+ total_tasks = len(task_ids)
526
+ success_count = 0
527
+ failed_count = 0
528
+ current_progress = 0
529
+
530
+ # Initialize metrics and progress
531
+ self._update_metrics(total_tasks, success_count, failed_count)
532
+ self.run.set_progress(0, total_tasks, category='annotate_task_data')
533
+ self.run.log_message('Annotating data to tasks using inference...')
534
+
535
+ # Process each task
536
+ for task_id in task_ids:
537
+ try:
538
+ result = self._process_single_task(client, task_id, task_params, None, AnnotationMethod.INFERENCE)
539
+ if result['success']:
540
+ success_count += 1
541
+ else:
542
+ failed_count += 1
543
+
544
+ current_progress += 1
545
+ self._update_metrics(total_tasks, success_count, failed_count)
546
+ self.run.set_progress(current_progress, total_tasks, category='annotate_task_data')
547
+
548
+ except Exception as e:
549
+ self.run.log_message(f'Failed to process task {task_id}: {str(e)}')
550
+ self.run.log_annotate_task_data({'task_id': task_id, 'error': str(e)}, AnnotateTaskDataStatus.FAILED)
551
+ failed_count += 1
552
+ current_progress += 1
553
+ self._update_metrics(total_tasks, success_count, failed_count)
554
+ self.run.set_progress(current_progress, total_tasks, category='annotate_task_data')
555
+
556
+ # Finalize progress
557
+ self.run.set_progress(total_tasks, total_tasks, category='annotate_task_data')
558
+ self.run.log_message(f'Inference annotation completed. Success: {success_count}, Failed: {failed_count}')
@@ -6,3 +6,19 @@ class AnnotationToTask:
6
6
  run: Plugin run object.
7
7
  """
8
8
  self.run = run
9
+
10
+ def convert_data_from_file(self, data: dict):
11
+ """Convert the data from a file to a task object.
12
+
13
+ Args:
14
+ data: Converted data.
15
+ """
16
+ return data
17
+
18
+ def convert_data_from_inference(self, data: dict):
19
+ """Convert the data from inference result to a task object.
20
+
21
+ Args:
22
+ data: Converted data.
23
+ """
24
+ return data
@@ -203,7 +203,18 @@ class UploadAction(Action):
203
203
  'proportion': 40,
204
204
  },
205
205
  }
206
- metrics_categories = {'data_file', 'data_unit'}
206
+ metrics_categories = {
207
+ 'data_file': {
208
+ 'stand_by': 0,
209
+ 'failed': 0,
210
+ 'success': 0,
211
+ },
212
+ 'data_unit': {
213
+ 'stand_by': 0,
214
+ 'failed': 0,
215
+ 'success': 0,
216
+ },
217
+ }
207
218
 
208
219
  def get_uploader(self, path, file_specification, organized_files):
209
220
  """Get uploader from entrypoint."""
@@ -128,7 +128,10 @@ class Run:
128
128
  self.set_logger()
129
129
 
130
130
  def set_logger(self):
131
- kwargs = {'progress_categories': self.context['progress_categories']}
131
+ kwargs = {
132
+ 'progress_categories': self.context['progress_categories'],
133
+ 'metrics_categories': self.context['metrics_categories'],
134
+ }
132
135
 
133
136
  if self.job_id:
134
137
  self.logger = BackendLogger(self.client, self.job_id, **kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse-sdk
3
- Version: 1.0.0a70
3
+ Version: 1.0.0a71
4
4
  Summary: synapse sdk
5
5
  Author-email: datamaker <developer@datamaker.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ locale/ko/LC_MESSAGES/messages.mo,sha256=7HJEJA0wKlN14xQ5VF4FCNet54tjw6mfWYj3IaB
4
4
  locale/ko/LC_MESSAGES/messages.po,sha256=TFii_RbURDH-Du_9ZQf3wNh-2briGk1IqY33-9GKrMU,1126
5
5
  synapse_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  synapse_sdk/i18n.py,sha256=VXMR-Zm_1hTAg9iPk3YZNNq-T1Bhx1J2fEtRT6kyYbg,766
7
- synapse_sdk/loggers.py,sha256=hi-m5y4x0OcR2Esf7o849fWpdKrzCGOR4AxazbB7ShE,6528
7
+ synapse_sdk/loggers.py,sha256=xK48h3ZaDDZLaF-qsdnv1-6-4vw_cYlgpSCKHYUQw1g,6549
8
8
  synapse_sdk/types.py,sha256=khzn8KpgxFdn1SrpbcuX84m_Md1Mz_HIoUoPq8uok40,698
9
9
  synapse_sdk/cli/__init__.py,sha256=RLZwqbtoC90-tw_2ErakY8-GxSNf6Ms2lNePBd_y-9U,9694
10
10
  synapse_sdk/cli/config.py,sha256=ooIHI7ZDA1yLtisxk_Xn1ptz4sM5j7TDivxaPvBUONE,11886
@@ -108,7 +108,7 @@ synapse_sdk/devtools/web/src/views/PluginView.jsx,sha256=_-V8elSiEtsvKECeROtQopS
108
108
  synapse_sdk/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  synapse_sdk/plugins/enums.py,sha256=ibixwqA3sCNSriG1jAtL54JQc_Zwo3MufwYUqGhVncc,523
110
110
  synapse_sdk/plugins/exceptions.py,sha256=Qs7qODp_RRLO9y2otU2T4ryj5LFwIZODvSIXkAh91u0,691
111
- synapse_sdk/plugins/models.py,sha256=dte0Thx4O8KS5WKrtERbtOmyZ85MG_TFqE6FUCplkjk,4645
111
+ synapse_sdk/plugins/models.py,sha256=AKZfVT6hsVEklcEDnHwoVAwvLxydMibfeJetug3Qk0U,4738
112
112
  synapse_sdk/plugins/upload.py,sha256=VJOotYMayylOH0lNoAGeGHRkLdhP7jnC_A0rFQMvQpQ,3228
113
113
  synapse_sdk/plugins/utils.py,sha256=4_K6jIl0WrsXOEhFp94faMOriSsddOhIiaXcawYYUUA,3300
114
114
  synapse_sdk/plugins/categories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -125,7 +125,7 @@ synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py,sh
125
125
  synapse_sdk/plugins/categories/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  synapse_sdk/plugins/categories/export/enums.py,sha256=gtyngvQ1DKkos9iKGcbecwTVQQ6sDwbrBPSGPNb5Am0,127
127
127
  synapse_sdk/plugins/categories/export/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
- synapse_sdk/plugins/categories/export/actions/export.py,sha256=2lIjur8EiwTB9sc16FV8ZaPXFxUtGRPx9hreG_DKLQA,10483
128
+ synapse_sdk/plugins/categories/export/actions/export.py,sha256=buCpjRPZ-QPfEANKrSopKjCPHadjF1_A0eAkoezaAFA,10688
129
129
  synapse_sdk/plugins/categories/export/templates/config.yaml,sha256=N7YmnFROb3s3M35SA9nmabyzoSb5O2t2TRPicwFNN2o,56
130
130
  synapse_sdk/plugins/categories/export/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
131
  synapse_sdk/plugins/categories/export/templates/plugin/export.py,sha256=zG8mSn7ZGIj8cttWmb7GEPcGgQRbZ97brJCzkuK7RP8,6106
@@ -153,11 +153,11 @@ synapse_sdk/plugins/categories/post_annotation/templates/plugin/post_annotation.
153
153
  synapse_sdk/plugins/categories/pre_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation.py,sha256=6ib3RmnGrjpsQ0e_G-mRH1lfFunQ3gh2M831vuDn7HU,344
156
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py,sha256=lJ9okNG8oFOXsPnng4gzl_U-bKL-hanCWv8bW3EBna0,15454
156
+ synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py,sha256=JlFO2vydZ_rgLq_6lZc7-TvmVHGGZLEXkTrVR_TfQXM,23214
157
157
  synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml,sha256=4SKJe2gF8UCi3oD0kV8B4M2MkYcosz5GZzzAjAg3slc,508
158
158
  synapse_sdk/plugins/categories/pre_annotation/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
159
159
  synapse_sdk/plugins/categories/pre_annotation/templates/plugin/pre_annotation.py,sha256=HBHxHuv2gMBzDB2alFfrzI_SZ1Ztk6mo7eFbR5GqHKw,106
160
- synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py,sha256=fgmTNaPgk8MnElEds4A6LiSmktNTVTNR7jO7dM7FwbI,223
160
+ synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py,sha256=0j01vFZYkaAw8mtf6HYfun3IUDlryTexqvss_JZtc-Y,618
161
161
  synapse_sdk/plugins/categories/smart_tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  synapse_sdk/plugins/categories/smart_tool/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  synapse_sdk/plugins/categories/smart_tool/actions/auto_label.py,sha256=fHiqA8ntmzjs2GMVMuByR7Clh2zhLie8OPF9B8OmwxM,1279
@@ -166,7 +166,7 @@ synapse_sdk/plugins/categories/smart_tool/templates/plugin/__init__.py,sha256=47
166
166
  synapse_sdk/plugins/categories/smart_tool/templates/plugin/auto_label.py,sha256=eevNg0nOcYFR4z_L_R-sCvVOYoLWSAH1jwDkAf3YCjY,320
167
167
  synapse_sdk/plugins/categories/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
168
  synapse_sdk/plugins/categories/upload/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
- synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=YozR4WHDnoFQBth9hZoOYLLrMVtjrA9EFwLwQKqUK-M,18516
169
+ synapse_sdk/plugins/categories/upload/actions/upload.py,sha256=cO0Hl6CyQm3MLVxmy_3LN-X58flCJUh_fJjJmh7Qg3U,18721
170
170
  synapse_sdk/plugins/categories/upload/templates/config.yaml,sha256=kwHNWHFYbzDi1mEh40KozatPZbZGH44dlP0t0J7ejJw,483
171
171
  synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
172
  synapse_sdk/plugins/categories/upload/templates/plugin/upload.py,sha256=IZU4sdSMSLKPCtlNqF7DP2howTdYR6hr74HCUZsGdPk,1559
@@ -207,9 +207,9 @@ synapse_sdk/utils/storage/providers/gcp.py,sha256=i2BQCu1Kej1If9SuNr2_lEyTcr5M_n
207
207
  synapse_sdk/utils/storage/providers/http.py,sha256=2DhIulND47JOnS5ZY7MZUex7Su3peAPksGo1Wwg07L4,5828
208
208
  synapse_sdk/utils/storage/providers/s3.py,sha256=ZmqekAvIgcQBdRU-QVJYv1Rlp6VHfXwtbtjTSphua94,2573
209
209
  synapse_sdk/utils/storage/providers/sftp.py,sha256=_8s9hf0JXIO21gvm-JVS00FbLsbtvly4c-ETLRax68A,1426
210
- synapse_sdk-1.0.0a70.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
211
- synapse_sdk-1.0.0a70.dist-info/METADATA,sha256=3Q2nmsvMEo9MgyHoxZMPFWQics_W5fx4VE16z-Nuq14,1130
212
- synapse_sdk-1.0.0a70.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
213
- synapse_sdk-1.0.0a70.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
214
- synapse_sdk-1.0.0a70.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
215
- synapse_sdk-1.0.0a70.dist-info/RECORD,,
210
+ synapse_sdk-1.0.0a71.dist-info/licenses/LICENSE,sha256=bKzmC5YAg4V1Fhl8OO_tqY8j62hgdncAkN7VrdjmrGk,1101
211
+ synapse_sdk-1.0.0a71.dist-info/METADATA,sha256=Evpxgx7r7pGE_VEOeBHGktT7mNqWbnj9kGuWgNVKilc,1130
212
+ synapse_sdk-1.0.0a71.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
213
+ synapse_sdk-1.0.0a71.dist-info/entry_points.txt,sha256=VNptJoGoNJI8yLXfBmhgUefMsmGI0m3-0YoMvrOgbxo,48
214
+ synapse_sdk-1.0.0a71.dist-info/top_level.txt,sha256=ytgJMRK1slVOKUpgcw3LEyHHP7S34J6n_gJzdkcSsw8,12
215
+ synapse_sdk-1.0.0a71.dist-info/RECORD,,