synapse-sdk 2025.9.1__py3-none-any.whl → 2025.9.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.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +368 -1
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/plugins/developing-upload-template.md +1463 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +161 -34
- synapse_sdk/devtools/docs/docs/plugins/upload-plugins.md +1497 -213
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +378 -11
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/developing-upload-template.md +1463 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +161 -34
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/upload-plugins.md +1752 -572
- synapse_sdk/devtools/docs/sidebars.ts +7 -0
- synapse_sdk/plugins/README.md +1 -2
- synapse_sdk/plugins/categories/base.py +23 -0
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +160 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +1 -1
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +1 -2
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +154 -531
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +143 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +66 -29
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +182 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +106 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +80 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +66 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +101 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +89 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +96 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +61 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +86 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +34 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +233 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +238 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/async_upload.py +109 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +43 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +45 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +194 -83
- synapse_sdk/plugins/categories/upload/templates/config.yaml +4 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +269 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +71 -27
- synapse_sdk/plugins/models.py +5 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/METADATA +2 -1
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/RECORD +78 -27
- synapse_sdk/plugins/categories/export/actions/export.py +0 -385
- synapse_sdk/plugins/categories/export/enums.py +0 -7
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/WHEEL +0 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-2025.9.1.dist-info → synapse_sdk-2025.9.3.dist-info}/top_level.txt +0 -0
|
@@ -10,7 +10,14 @@ Main client for interacting with the Synapse backend API.
|
|
|
10
10
|
|
|
11
11
|
## Overview
|
|
12
12
|
|
|
13
|
-
The `BackendClient` provides comprehensive access to all backend operations including data management, plugin execution, annotations, and machine learning workflows. It aggregates functionality from multiple specialized mixins
|
|
13
|
+
The `BackendClient` provides comprehensive access to all backend operations including data management, plugin execution, annotations, and machine learning workflows. It aggregates functionality from multiple specialized mixins:
|
|
14
|
+
|
|
15
|
+
- **AnnotationClientMixin**: Task and annotation management
|
|
16
|
+
- **CoreClientMixin**: File upload and core operations
|
|
17
|
+
- **DataCollectionClientMixin**: Data collection and file management
|
|
18
|
+
- **HITLClientMixin**: Human-in-the-loop assignment operations
|
|
19
|
+
- **IntegrationClientMixin**: Plugin and job management
|
|
20
|
+
- **MLClientMixin**: Machine learning models and ground truth operations
|
|
14
21
|
|
|
15
22
|
## Constructor
|
|
16
23
|
|
|
@@ -47,6 +54,366 @@ os.environ['SYNAPSE_API_TOKEN'] = "your-api-token"
|
|
|
47
54
|
client = BackendClient(base_url="https://api.synapse.sh")
|
|
48
55
|
```
|
|
49
56
|
|
|
57
|
+
## API Methods
|
|
58
|
+
|
|
59
|
+
### Annotation Operations
|
|
60
|
+
|
|
61
|
+
#### `get_project(pk)`
|
|
62
|
+
|
|
63
|
+
Get project details by ID.
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
project = client.get_project(123)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### `get_task(pk, params)`
|
|
70
|
+
|
|
71
|
+
Get task details with optional parameters.
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
task = client.get_task(456, params={'expand': 'data_unit'})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### `annotate_task_data(pk, data)`
|
|
78
|
+
|
|
79
|
+
Submit annotation data for a task.
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
result = client.annotate_task_data(456, {
|
|
83
|
+
'annotations': [
|
|
84
|
+
{'type': 'bbox', 'coordinates': [10, 10, 100, 100]}
|
|
85
|
+
]
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### `list_tasks(params=None, url_conversion=None, list_all=False)`
|
|
90
|
+
|
|
91
|
+
List tasks with filtering and pagination.
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
# Get tasks for a project
|
|
95
|
+
tasks = client.list_tasks(params={'project': 123})
|
|
96
|
+
|
|
97
|
+
# Get all tasks (handles pagination automatically)
|
|
98
|
+
all_tasks = client.list_tasks(list_all=True)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### `create_tasks(data)`
|
|
102
|
+
|
|
103
|
+
Create new tasks.
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
new_tasks = client.create_tasks([
|
|
107
|
+
{'project': 123, 'data_unit': 789},
|
|
108
|
+
{'project': 123, 'data_unit': 790}
|
|
109
|
+
])
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### `set_tags_tasks(data, params=None)`
|
|
113
|
+
|
|
114
|
+
Set tags for multiple tasks.
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
client.set_tags_tasks({
|
|
118
|
+
'task_ids': [456, 457],
|
|
119
|
+
'tag_ids': [1, 2, 3]
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Core Operations
|
|
124
|
+
|
|
125
|
+
#### `create_chunked_upload(file_path)`
|
|
126
|
+
|
|
127
|
+
Upload large files using chunked upload for optimal performance.
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
from pathlib import Path
|
|
131
|
+
|
|
132
|
+
result = client.create_chunked_upload(Path('/path/to/large_file.zip'))
|
|
133
|
+
print(f"Upload completed: {result}")
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Features:**
|
|
137
|
+
|
|
138
|
+
- Uses 50MB chunks for optimal performance
|
|
139
|
+
- Automatic retry and resume capability
|
|
140
|
+
- MD5 integrity verification
|
|
141
|
+
- Progress tracking support
|
|
142
|
+
|
|
143
|
+
### Data Collection Operations
|
|
144
|
+
|
|
145
|
+
#### `list_data_collection()`
|
|
146
|
+
|
|
147
|
+
List all available data collections.
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
collections = client.list_data_collection()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### `get_data_collection(data_collection_id)`
|
|
154
|
+
|
|
155
|
+
Get detailed information about a specific data collection.
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
collection = client.get_data_collection(123)
|
|
159
|
+
file_specs = collection['file_specifications']
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### `create_data_file(file_path, use_chunked_upload=False)`
|
|
163
|
+
|
|
164
|
+
Create and upload a data file to the backend.
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
from pathlib import Path
|
|
168
|
+
|
|
169
|
+
# Regular upload
|
|
170
|
+
data_file = client.create_data_file(Path('/path/to/file.jpg'))
|
|
171
|
+
|
|
172
|
+
# Chunked upload for large files
|
|
173
|
+
large_file = client.create_data_file(
|
|
174
|
+
Path('/path/to/large_file.zip'),
|
|
175
|
+
use_chunked_upload=True
|
|
176
|
+
)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### `upload_data_file(organized_file, collection_id, use_chunked_upload=False)`
|
|
180
|
+
|
|
181
|
+
Upload organized file data to a collection.
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
result = client.upload_data_file(
|
|
185
|
+
organized_file={'files': {...}, 'meta': {...}},
|
|
186
|
+
collection_id=123,
|
|
187
|
+
use_chunked_upload=False
|
|
188
|
+
)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### `create_data_units(uploaded_files)`
|
|
192
|
+
|
|
193
|
+
Create data units from uploaded files.
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
data_units = client.create_data_units([
|
|
197
|
+
{'id': 1, 'file': {...}},
|
|
198
|
+
{'id': 2, 'file': {...}}
|
|
199
|
+
])
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### HITL (Human-in-the-Loop) Operations
|
|
203
|
+
|
|
204
|
+
#### `get_assignment(pk)`
|
|
205
|
+
|
|
206
|
+
Get assignment details by ID.
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
assignment = client.get_assignment(789)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### `list_assignments(params=None, url_conversion=None, list_all=False)`
|
|
213
|
+
|
|
214
|
+
List assignments with filtering options.
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
# Get assignments for a project
|
|
218
|
+
assignments = client.list_assignments(params={'project': 123})
|
|
219
|
+
|
|
220
|
+
# Get all assignments
|
|
221
|
+
all_assignments = client.list_assignments(list_all=True)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### `set_tags_assignments(data, params=None)`
|
|
225
|
+
|
|
226
|
+
Set tags for multiple assignments.
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
client.set_tags_assignments({
|
|
230
|
+
'assignment_ids': [789, 790],
|
|
231
|
+
'tag_ids': [1, 2]
|
|
232
|
+
})
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Integration Operations
|
|
236
|
+
|
|
237
|
+
#### `health_check_agent(token)`
|
|
238
|
+
|
|
239
|
+
Check agent health status.
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
status = client.health_check_agent('agent-token-123')
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### `get_plugin(pk)` / `create_plugin(data)` / `update_plugin(pk, data)`
|
|
246
|
+
|
|
247
|
+
Manage plugins.
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# Get plugin
|
|
251
|
+
plugin = client.get_plugin(123)
|
|
252
|
+
|
|
253
|
+
# Create plugin
|
|
254
|
+
new_plugin = client.create_plugin({
|
|
255
|
+
'name': 'My Plugin',
|
|
256
|
+
'description': 'Plugin description'
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
# Update plugin
|
|
260
|
+
updated = client.update_plugin(123, {'description': 'Updated description'})
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
#### `run_plugin(pk, data)`
|
|
264
|
+
|
|
265
|
+
Execute a plugin with provided data.
|
|
266
|
+
|
|
267
|
+
```python
|
|
268
|
+
result = client.run_plugin(123, {
|
|
269
|
+
'parameters': {'input': 'value'},
|
|
270
|
+
'context': {...}
|
|
271
|
+
})
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### Plugin Release Management
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
# Create plugin release
|
|
278
|
+
release = client.create_plugin_release({
|
|
279
|
+
'plugin': 123,
|
|
280
|
+
'version': '1.0.0',
|
|
281
|
+
'file': open('/path/to/plugin.zip', 'rb')
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
# Get release details
|
|
285
|
+
release_info = client.get_plugin_release(456)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
#### Job Management
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# List jobs
|
|
292
|
+
jobs = client.list_jobs(params={'status': 'running'})
|
|
293
|
+
|
|
294
|
+
# Get job details
|
|
295
|
+
job = client.get_job(789, params={'expand': 'logs'})
|
|
296
|
+
|
|
297
|
+
# Update job status
|
|
298
|
+
client.update_job(789, {'status': 'completed'})
|
|
299
|
+
|
|
300
|
+
# Get job console logs
|
|
301
|
+
logs = client.list_job_console_logs(789)
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### Storage Operations
|
|
305
|
+
|
|
306
|
+
```python
|
|
307
|
+
# List storages
|
|
308
|
+
storages = client.list_storages()
|
|
309
|
+
|
|
310
|
+
# Get storage details
|
|
311
|
+
storage = client.get_storage(123)
|
|
312
|
+
|
|
313
|
+
# Create storage
|
|
314
|
+
new_storage = client.create_storage({
|
|
315
|
+
'name': 'My Storage',
|
|
316
|
+
'provider': 'amazon_s3',
|
|
317
|
+
'configuration': {...}
|
|
318
|
+
})
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Machine Learning Operations
|
|
322
|
+
|
|
323
|
+
#### `list_models(params=None)` / `get_model(pk, params=None, url_conversion=None)`
|
|
324
|
+
|
|
325
|
+
Manage ML models.
|
|
326
|
+
|
|
327
|
+
```python
|
|
328
|
+
# List models
|
|
329
|
+
models = client.list_models(params={'project': 123})
|
|
330
|
+
|
|
331
|
+
# Get model details
|
|
332
|
+
model = client.get_model(456, params={'expand': 'metrics'})
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
#### `create_model(data)`
|
|
336
|
+
|
|
337
|
+
Create a new ML model with file upload.
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
new_model = client.create_model({
|
|
341
|
+
'name': 'My Model',
|
|
342
|
+
'project': 123,
|
|
343
|
+
'file': '/path/to/model.pkl'
|
|
344
|
+
})
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
#### Ground Truth Operations
|
|
348
|
+
|
|
349
|
+
```python
|
|
350
|
+
# List ground truth events
|
|
351
|
+
events = client.list_ground_truth_events(
|
|
352
|
+
params={'ground_truth_dataset_versions': [123]},
|
|
353
|
+
list_all=True
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
# Get ground truth version
|
|
357
|
+
version = client.get_ground_truth_version(123)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Storage Models
|
|
361
|
+
|
|
362
|
+
The backend client includes predefined models for storage operations:
|
|
363
|
+
|
|
364
|
+
### StorageCategory
|
|
365
|
+
|
|
366
|
+
- `INTERNAL`: Internal storage systems
|
|
367
|
+
- `EXTERNAL`: External storage providers
|
|
368
|
+
|
|
369
|
+
### StorageProvider
|
|
370
|
+
|
|
371
|
+
- `AMAZON_S3`: Amazon S3
|
|
372
|
+
- `AZURE`: Microsoft Azure Blob Storage
|
|
373
|
+
- `DIGITAL_OCEAN`: DigitalOcean Spaces
|
|
374
|
+
- `FILE_SYSTEM`: Local file system
|
|
375
|
+
- `FTP` / `SFTP`: FTP protocols
|
|
376
|
+
- `MINIO`: MinIO storage
|
|
377
|
+
- `GCP`: Google Cloud Storage
|
|
378
|
+
|
|
379
|
+
## Error Handling
|
|
380
|
+
|
|
381
|
+
All API methods may raise `ClientError` exceptions for various error conditions:
|
|
382
|
+
|
|
383
|
+
```python
|
|
384
|
+
from synapse_sdk.clients.exceptions import ClientError
|
|
385
|
+
|
|
386
|
+
try:
|
|
387
|
+
project = client.get_project(999)
|
|
388
|
+
except ClientError as e:
|
|
389
|
+
print(f"API Error: {e}")
|
|
390
|
+
print(f"Status Code: {e.status_code}")
|
|
391
|
+
print(f"Response: {e.response}")
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Pagination
|
|
395
|
+
|
|
396
|
+
Methods supporting `list_all=True` will automatically handle pagination:
|
|
397
|
+
|
|
398
|
+
```python
|
|
399
|
+
# Manual pagination
|
|
400
|
+
tasks_page1 = client.list_tasks(params={'page': 1, 'page_size': 100})
|
|
401
|
+
|
|
402
|
+
# Automatic pagination (recommended)
|
|
403
|
+
all_tasks = client.list_tasks(list_all=True)
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## URL Conversion
|
|
407
|
+
|
|
408
|
+
Some methods support URL conversion for file fields:
|
|
409
|
+
|
|
410
|
+
```python
|
|
411
|
+
# Custom URL conversion
|
|
412
|
+
tasks = client.list_tasks(
|
|
413
|
+
url_conversion={'files': lambda url: f"https://cdn.example.com{url}"}
|
|
414
|
+
)
|
|
415
|
+
```
|
|
416
|
+
|
|
50
417
|
## See Also
|
|
51
418
|
|
|
52
419
|
- [AgentClient](./agent.md) - For agent-specific operations
|