synapse-sdk 1.0.0b5__py3-none-any.whl → 2025.12.3__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.
Files changed (167) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/code_server.py +305 -33
  3. synapse_sdk/clients/agent/__init__.py +2 -1
  4. synapse_sdk/clients/agent/container.py +143 -0
  5. synapse_sdk/clients/agent/ray.py +296 -38
  6. synapse_sdk/clients/backend/annotation.py +1 -1
  7. synapse_sdk/clients/backend/core.py +31 -4
  8. synapse_sdk/clients/backend/data_collection.py +82 -7
  9. synapse_sdk/clients/backend/hitl.py +1 -1
  10. synapse_sdk/clients/backend/ml.py +1 -1
  11. synapse_sdk/clients/base.py +211 -61
  12. synapse_sdk/loggers.py +46 -0
  13. synapse_sdk/plugins/README.md +1340 -0
  14. synapse_sdk/plugins/categories/base.py +59 -9
  15. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  16. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  17. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  18. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  19. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  20. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  21. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  22. synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
  23. synapse_sdk/plugins/categories/export/templates/config.yaml +19 -1
  24. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  25. synapse_sdk/plugins/categories/export/templates/plugin/export.py +153 -177
  26. synapse_sdk/plugins/categories/neural_net/actions/train.py +1130 -32
  27. synapse_sdk/plugins/categories/neural_net/actions/tune.py +157 -4
  28. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +7 -4
  29. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  30. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  31. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
  32. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  33. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +148 -0
  34. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  35. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  36. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  37. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +100 -0
  38. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +248 -0
  39. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  40. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  41. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +265 -0
  42. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  43. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  44. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +92 -0
  45. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +243 -0
  46. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  47. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  48. synapse_sdk/plugins/categories/upload/actions/upload/action.py +236 -0
  49. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  50. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +493 -0
  51. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  52. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  53. synapse_sdk/plugins/categories/upload/actions/upload/models.py +214 -0
  54. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  55. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  56. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  57. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  58. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  59. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  60. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  61. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +91 -0
  62. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  63. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  64. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +201 -0
  65. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +104 -0
  66. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  67. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  68. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  69. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  70. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  71. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  72. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  73. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +300 -0
  74. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +287 -0
  75. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  76. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  77. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  78. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  79. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  80. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  81. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  82. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  83. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  84. synapse_sdk/plugins/categories/upload/templates/config.yaml +28 -2
  85. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +310 -0
  86. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +82 -20
  87. synapse_sdk/plugins/models.py +111 -9
  88. synapse_sdk/plugins/templates/plugin-config-schema.json +7 -0
  89. synapse_sdk/plugins/templates/schema.json +7 -0
  90. synapse_sdk/plugins/utils/__init__.py +3 -0
  91. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  92. synapse_sdk/shared/__init__.py +25 -0
  93. synapse_sdk/utils/converters/dm/__init__.py +42 -41
  94. synapse_sdk/utils/converters/dm/base.py +137 -0
  95. synapse_sdk/utils/converters/dm/from_v1.py +208 -562
  96. synapse_sdk/utils/converters/dm/to_v1.py +258 -304
  97. synapse_sdk/utils/converters/dm/tools/__init__.py +214 -0
  98. synapse_sdk/utils/converters/dm/tools/answer.py +95 -0
  99. synapse_sdk/utils/converters/dm/tools/bounding_box.py +132 -0
  100. synapse_sdk/utils/converters/dm/tools/bounding_box_3d.py +121 -0
  101. synapse_sdk/utils/converters/dm/tools/classification.py +75 -0
  102. synapse_sdk/utils/converters/dm/tools/keypoint.py +117 -0
  103. synapse_sdk/utils/converters/dm/tools/named_entity.py +111 -0
  104. synapse_sdk/utils/converters/dm/tools/polygon.py +122 -0
  105. synapse_sdk/utils/converters/dm/tools/polyline.py +124 -0
  106. synapse_sdk/utils/converters/dm/tools/prompt.py +94 -0
  107. synapse_sdk/utils/converters/dm/tools/relation.py +86 -0
  108. synapse_sdk/utils/converters/dm/tools/segmentation.py +141 -0
  109. synapse_sdk/utils/converters/dm/tools/segmentation_3d.py +83 -0
  110. synapse_sdk/utils/converters/dm/types.py +168 -0
  111. synapse_sdk/utils/converters/dm/utils.py +162 -0
  112. synapse_sdk/utils/converters/dm_legacy/__init__.py +56 -0
  113. synapse_sdk/utils/converters/dm_legacy/from_v1.py +627 -0
  114. synapse_sdk/utils/converters/dm_legacy/to_v1.py +367 -0
  115. synapse_sdk/utils/file/__init__.py +58 -0
  116. synapse_sdk/utils/file/archive.py +32 -0
  117. synapse_sdk/utils/file/checksum.py +56 -0
  118. synapse_sdk/utils/file/chunking.py +31 -0
  119. synapse_sdk/utils/file/download.py +385 -0
  120. synapse_sdk/utils/file/encoding.py +40 -0
  121. synapse_sdk/utils/file/io.py +22 -0
  122. synapse_sdk/utils/file/upload.py +165 -0
  123. synapse_sdk/utils/file/video/__init__.py +29 -0
  124. synapse_sdk/utils/file/video/transcode.py +307 -0
  125. synapse_sdk/utils/{file.py → file.py.backup} +77 -0
  126. synapse_sdk/utils/network.py +272 -0
  127. synapse_sdk/utils/storage/__init__.py +6 -2
  128. synapse_sdk/utils/storage/providers/file_system.py +6 -0
  129. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/METADATA +19 -2
  130. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/RECORD +134 -74
  131. synapse_sdk/devtools/docs/.gitignore +0 -20
  132. synapse_sdk/devtools/docs/README.md +0 -41
  133. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +0 -12
  134. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +0 -44
  135. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +0 -24
  136. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  137. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +0 -29
  138. synapse_sdk/devtools/docs/blog/authors.yml +0 -25
  139. synapse_sdk/devtools/docs/blog/tags.yml +0 -19
  140. synapse_sdk/devtools/docs/docusaurus.config.ts +0 -138
  141. synapse_sdk/devtools/docs/package-lock.json +0 -17455
  142. synapse_sdk/devtools/docs/package.json +0 -47
  143. synapse_sdk/devtools/docs/sidebars.ts +0 -44
  144. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +0 -71
  145. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +0 -11
  146. synapse_sdk/devtools/docs/src/css/custom.css +0 -30
  147. synapse_sdk/devtools/docs/src/pages/index.module.css +0 -23
  148. synapse_sdk/devtools/docs/src/pages/index.tsx +0 -21
  149. synapse_sdk/devtools/docs/src/pages/markdown-page.md +0 -7
  150. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  151. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  152. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  153. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  154. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  155. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +0 -171
  156. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +0 -170
  157. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +0 -40
  158. synapse_sdk/devtools/docs/tsconfig.json +0 -8
  159. synapse_sdk/plugins/categories/export/actions/export.py +0 -346
  160. synapse_sdk/plugins/categories/export/enums.py +0 -7
  161. synapse_sdk/plugins/categories/neural_net/actions/gradio.py +0 -151
  162. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +0 -943
  163. synapse_sdk/plugins/categories/upload/actions/upload.py +0 -954
  164. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/WHEEL +0 -0
  165. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/entry_points.txt +0 -0
  166. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/licenses/LICENSE +0 -0
  167. {synapse_sdk-1.0.0b5.dist-info → synapse_sdk-2025.12.3.dist-info}/top_level.txt +0 -0
@@ -1,184 +1,160 @@
1
- import json
2
1
  from pathlib import Path
2
+ from typing import Generator
3
3
 
4
- import requests
4
+ from . import BaseExporter
5
5
 
6
- from synapse_sdk.plugins.categories.export.enums import ExportStatus
7
6
 
7
+ class Exporter(BaseExporter):
8
+ """Plugin export action interface for organizing files.
8
9
 
9
- def export(run, export_items, path_root, **params):
10
- """Executes the export task.
11
-
12
- Args:
13
- run : Execution object
14
- export_items (generator):
15
- - data (dict): dm_schema_data information.
16
- - files (dict): File information. Includes file URL, original file path, metadata, etc.
17
- - id (int): ground_truth ID
18
- path_root : pathlib object, the path to export
19
- **params: Additional parameters
20
-
21
- Returns:
22
- dict: Result
10
+ This class provides a minimal interface for plugin developers to implement
11
+ their own export logic.
23
12
  """
24
13
 
25
- export_path = path_root / params['name']
26
- unique_export_path = export_path
27
- counter = 1
28
- while unique_export_path.exists():
29
- unique_export_path = export_path.with_name(f'{export_path.name}({counter})')
30
- counter += 1
31
- unique_export_path.mkdir(parents=True)
32
-
33
- run.log_message('Starting export process.')
34
-
35
- # results contains all information fetched through the list API.
36
- # example:
37
- # params.get('results', [])
38
-
39
- save_original_file_flag = params.get('save_original_file')
40
- errors_json_file_list = []
41
- errors_original_file_list = []
42
-
43
- # Path to save JSON files
44
- json_output_path = unique_export_path / 'json'
45
- json_output_path.mkdir(parents=True, exist_ok=True)
46
-
47
- # Path to save original files
48
- if save_original_file_flag:
49
- origin_files_output_path = unique_export_path / 'origin_files'
50
- origin_files_output_path.mkdir(parents=True, exist_ok=True)
51
-
52
- total = params['count']
53
- original_file_metrics_record = run.MetricsRecord(stand_by=total, success=0, failed=0)
54
- data_file_metrics_record = run.MetricsRecord(stand_by=total, success=0, failed=0)
55
- # progress init
56
- run.set_progress(0, total, category='dataset_conversion')
57
- for no, export_item in enumerate(export_items, start=1):
58
- run.set_progress(no, total, category='dataset_conversion')
59
- if no == 1:
60
- run.log_message('Converting dataset.')
61
- preprocessed_data = before_convert(export_item)
62
- converted_data = convert_data(preprocessed_data)
63
- final_data = after_convert(converted_data)
64
-
65
- # Call if original file extraction is needed
66
- if save_original_file_flag:
67
- if no == 1:
68
- run.log_message('Saving original file.')
69
- original_status = save_original_file(run, final_data, origin_files_output_path, errors_original_file_list)
70
-
71
- original_file_metrics_record.stand_by -= 1
72
- if original_status == ExportStatus.FAILED:
73
- original_file_metrics_record.failed += 1
74
- continue
75
- else:
76
- original_file_metrics_record.success += 1
77
-
78
- run.log_metrics(record=original_file_metrics_record, category='original_file')
79
-
80
- # Extract data as JSON files
81
- if no == 1:
82
- run.log_message('Saving json file.')
83
- data_status = save_as_json(run, final_data, json_output_path, errors_json_file_list)
84
-
85
- data_file_metrics_record.stand_by -= 1
86
- if data_status == ExportStatus.FAILED:
87
- data_file_metrics_record.failed += 1
88
- continue
89
- else:
90
- data_file_metrics_record.success += 1
91
-
92
- run.log_metrics(record=data_file_metrics_record, category='data_file')
93
-
94
- run.end_log()
95
-
96
- # Save error list files
97
- if len(errors_json_file_list) > 0 or len(errors_original_file_list) > 0:
98
- export_error_file = {'json_file_name': errors_json_file_list, 'origin_file_name': errors_original_file_list}
99
- with (unique_export_path / 'error_file_list.json').open('w', encoding='utf-8') as f:
100
- json.dump(export_error_file, f, indent=4, ensure_ascii=False)
101
-
102
- return {'export_path': str(path_root)}
103
-
104
-
105
- def convert_data(data):
106
- """Converts the data."""
107
- return data
108
-
109
-
110
- def before_convert(data):
111
- """Preprocesses the data before conversion."""
112
- return data
113
-
114
-
115
- def after_convert(data):
116
- """Post-processes the data after conversion."""
117
- return data
118
-
119
-
120
- def get_original_file_name(files):
121
- """Retrieve the original file path from the given file information.
122
-
123
- Args:
124
- files (dict): A dictionary containing file information, including file URL,
125
- original file path, metadata, etc.
126
-
127
- Returns:
128
- file_name (str): The original file name extracted from the file information.
129
- """
130
- return files['file_name_original']
131
-
132
-
133
- def save_original_file(run, result, base_path, error_file_list):
134
- """Saves the original file.
135
-
136
- Args:
137
- run : Execution object
138
- result (dict): API response data containing file information.
139
- base_path (Path): The directory where the file will be saved.
140
- error_file_list (list): A list to store error files.
141
- """
142
- file_url = result['files']['url']
143
- file_name = get_original_file_name(result['files'])
144
- response = requests.get(file_url)
145
- file_info = {'file_name': file_name}
146
- error_msg = ''
147
- try:
148
- with (base_path / file_name).open('wb') as file:
149
- file.write(response.content)
150
- status = ExportStatus.SUCCESS
151
- except Exception as e:
152
- error_msg = str(e)
153
- error_file_list.append([file_name, error_msg])
154
- status = ExportStatus.FAILED
155
-
156
- run.export_log_original_file(result['id'], file_info, status, error_msg)
157
- return status
158
-
159
-
160
- def save_as_json(run, result, base_path, error_file_list):
161
- """Saves the data as a JSON file.
162
-
163
- Args:
164
- run : Execution object
165
- result (dict): API response data containing file information.
166
- base_path (Path): The directory where the file will be saved.
167
- error_file_list (list): A list to store error files.
168
- """
169
- # Default save file name: original file name
170
- file_name = Path(get_original_file_name(result['files'])).stem
171
- json_data = result['data']
172
- file_info = {'file_name': f'{file_name}.json'}
173
- error_msg = ''
174
- try:
175
- with (base_path / f'{file_name}.json').open('w', encoding='utf-8') as f:
176
- json.dump(json_data, f, indent=4, ensure_ascii=False)
177
- status = ExportStatus.SUCCESS
178
- except Exception as e:
179
- error_msg = str(e)
180
- error_file_list.append([f'{file_name}.json', str(e)])
181
- status = ExportStatus.FAILED
182
-
183
- run.export_log_json_file(result['id'], file_info, status, error_msg)
184
- return status
14
+ def __init__(self, run, export_items: Generator, path_root: Path, **params):
15
+ """Initialize the plugin export action class.
16
+ Args:
17
+ run: Plugin run object with logging capabilities.
18
+ export_items (generator):
19
+ - data (dict): dm_schema_data information.
20
+ - files (dict): File information. Includes file URL, original file path, metadata, etc.
21
+ - id (int): target ID (ex. assignment id, task id, ground_truth_event id)
22
+ path_root: pathlib object, the path to export
23
+ **params: Additional parameters
24
+ - name (str): The name of the action.
25
+ - description (str | None): The description of the action.
26
+ - storage (int): The storage ID to save the exported data.
27
+ - save_original_file (bool): Whether to save the original file.
28
+ - path (str): The path to save the exported data.
29
+ - target (str): The target source to export data from. (ex. ground_truth, assignment, task)
30
+ - filter (dict): The filter criteria to apply.
31
+ - extra_params (dict | None): Additional parameters for export customization.
32
+ Example: {"include_metadata": True, "compression": "gzip"}
33
+ - count (int): Total number of results.
34
+ - results (list): List of results fetched through the list API.
35
+ - project_id (int): Project ID.
36
+ - configuration (dict): Project configuration.
37
+ """
38
+ super().__init__(run, export_items, path_root, **params)
39
+
40
+ def export(self, export_items=None, results=None, **kwargs) -> dict:
41
+ """Executes the export task using the base class implementation.
42
+
43
+ Args:
44
+ export_items: Optional export items to process. If not provided, uses self.export_items.
45
+ results: Optional results data to process alongside export_items.
46
+ **kwargs: Additional parameters for export customization.
47
+
48
+ Returns:
49
+ dict: Result
50
+ """
51
+ return super().export(export_items, results, **kwargs)
52
+
53
+ def convert_data(self, data):
54
+ """Converts the data."""
55
+ return data
56
+
57
+ def before_convert(self, data):
58
+ """Preprocesses the data before conversion."""
59
+ return data
60
+
61
+ def after_convert(self, data):
62
+ """Post-processes the data after conversion."""
63
+ return data
64
+
65
+ def sample_dev_log(self):
66
+ """Sample development logging examples for plugin developers.
67
+
68
+ This method demonstrates various ways to use log_dev_event() for debugging,
69
+ monitoring, and tracking plugin execution. The event_type is automatically
70
+ generated as 'export_dev_log' for export actions and cannot be modified.
71
+
72
+ Use Cases:
73
+ 1. Process Tracking: Log when important processes start/complete
74
+ 2. Error Handling: Capture detailed error information with appropriate severity
75
+ 3. Performance Monitoring: Record timing and resource usage
76
+ 4. Data Validation: Log validation results and data quality metrics
77
+ 5. Debug Information: Track variable states and execution flow
78
+
79
+ Examples show different scenarios where development logging is beneficial:
80
+ - Basic process logging with structured data
81
+ - Error logging with exception details and danger level
82
+ - Performance tracking with timing information
83
+ - Validation logging with success/failure status
84
+ """
85
+ # Example 1: Basic Process Tracking
86
+ # Use when: Starting important processes that you want to monitor
87
+ # Benefits: Helps track execution flow and identify bottlenecks
88
+ self.run.log_dev_event(
89
+ 'Starting data conversion process',
90
+ {'data_type': 'img', 'data_size': 'unknown', 'conversion_method': 'custom_format'},
91
+ )
92
+
93
+ # Example 2: Error Handling with Detailed Information
94
+ # Use when: Catching exceptions that you want to analyze later
95
+ # Benefits: Provides structured error data for debugging and monitoring
96
+ from synapse_sdk.shared.enums import Context
97
+
98
+ try:
99
+ # Simulated operation that might fail
100
+ pass
101
+ except Exception as e:
102
+ self.run.log_dev_event(
103
+ f'Data conversion failed: {str(e)}',
104
+ {
105
+ 'error_type': type(e).__name__,
106
+ 'error_details': str(e),
107
+ 'operation': 'data_conversion',
108
+ 'recovery_attempted': False,
109
+ },
110
+ level=Context.DANGER,
111
+ )
112
+
113
+ # Example 3: Performance Monitoring
114
+ # Use when: Tracking processing time for optimization
115
+ # Benefits: Identifies performance bottlenecks and optimization opportunities
116
+ import time
117
+
118
+ start_time = time.time()
119
+ # Simulated processing work
120
+ time.sleep(0.001)
121
+ processing_time = time.time() - start_time
122
+
123
+ self.run.log_dev_event(
124
+ 'File processing completed',
125
+ {
126
+ 'processing_time_ms': round(processing_time * 1000, 2),
127
+ 'files_processed': 1,
128
+ 'performance_rating': 'excellent' if processing_time < 0.1 else 'normal',
129
+ },
130
+ )
131
+
132
+ # Example 4: Data Validation Logging
133
+ # Use when: Validating data quality or structure
134
+ # Benefits: Helps identify data issues and track validation metrics
135
+ validation_passed = True # Simulated validation result
136
+ self.run.log_dev_event(
137
+ 'Data validation completed',
138
+ {
139
+ 'validation_passed': validation_passed,
140
+ 'validation_rules': ['format_check', 'required_fields', 'data_types'],
141
+ 'data_quality_score': 95.5,
142
+ },
143
+ level=Context.SUCCESS if validation_passed else Context.WARNING,
144
+ )
145
+
146
+ # Example 5: Debug Information with Variable States
147
+ # Use when: Debugging complex logic or tracking variable changes
148
+ # Benefits: Provides insight into execution state at specific points
149
+ current_batch_size = 100
150
+ memory_usage = 45.2 # Simulated memory usage in MB
151
+
152
+ self.run.log_dev_event(
153
+ 'Processing checkpoint reached',
154
+ {
155
+ 'current_batch_size': current_batch_size,
156
+ 'memory_usage_mb': memory_usage,
157
+ 'checkpoint_location': 'after_data_preprocessing',
158
+ 'next_operation': 'file_saving',
159
+ },
160
+ )