label-studio-sdk 2.0.3__py3-none-any.whl → 2.0.5__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 label-studio-sdk might be problematic. Click here for more details.

Files changed (50) hide show
  1. label_studio_sdk/__init__.py +18 -0
  2. label_studio_sdk/activity_logs/__init__.py +5 -0
  3. label_studio_sdk/activity_logs/client.py +246 -0
  4. label_studio_sdk/activity_logs/types/__init__.py +5 -0
  5. label_studio_sdk/activity_logs/types/activity_logs_list_request_method.py +5 -0
  6. label_studio_sdk/base_client.py +4 -0
  7. label_studio_sdk/errors/internal_server_error.py +2 -1
  8. label_studio_sdk/label_interface/interface.py +0 -4
  9. label_studio_sdk/ml/client.py +4 -4
  10. label_studio_sdk/projects/__init__.py +14 -2
  11. label_studio_sdk/projects/client.py +4 -0
  12. label_studio_sdk/projects/members/__init__.py +4 -0
  13. label_studio_sdk/projects/members/bulk/__init__.py +5 -0
  14. label_studio_sdk/projects/members/bulk/client.py +273 -0
  15. label_studio_sdk/projects/members/bulk/types/__init__.py +6 -0
  16. label_studio_sdk/projects/members/bulk/types/bulk_delete_response.py +19 -0
  17. label_studio_sdk/projects/members/bulk/types/bulk_post_response.py +19 -0
  18. label_studio_sdk/projects/members/client.py +4 -0
  19. label_studio_sdk/projects/metrics/__init__.py +6 -0
  20. label_studio_sdk/projects/metrics/client.py +282 -0
  21. label_studio_sdk/projects/metrics/custom/__init__.py +5 -0
  22. label_studio_sdk/projects/metrics/custom/client.py +535 -0
  23. label_studio_sdk/projects/metrics/custom/types/__init__.py +5 -0
  24. label_studio_sdk/projects/metrics/custom/types/custom_get_lambda_response.py +19 -0
  25. label_studio_sdk/projects/stats/__init__.py +18 -2
  26. label_studio_sdk/projects/stats/client.py +129 -0
  27. label_studio_sdk/projects/stats/types/__init__.py +12 -1
  28. label_studio_sdk/projects/stats/types/stats_total_agreement_response.py +7 -0
  29. label_studio_sdk/projects/stats/types/stats_total_agreement_response_one.py +19 -0
  30. label_studio_sdk/projects/stats/types/stats_total_agreement_response_zero.py +19 -0
  31. label_studio_sdk/types/__init__.py +14 -0
  32. label_studio_sdk/types/activity_log.py +49 -0
  33. label_studio_sdk/types/activity_log_response.py +28 -0
  34. label_studio_sdk/types/metric_param.py +31 -0
  35. label_studio_sdk/types/who_am_i_lse_fields.py +50 -0
  36. label_studio_sdk/types/who_am_i_lse_fields_onboarding_state.py +8 -0
  37. label_studio_sdk/types/who_am_i_lse_fields_trial_role.py +8 -0
  38. label_studio_sdk/types/who_am_i_user.py +49 -0
  39. label_studio_sdk/users/client.py +9 -8
  40. label_studio_sdk/workspaces/members/__init__.py +4 -0
  41. label_studio_sdk/workspaces/members/bulk/__init__.py +5 -0
  42. label_studio_sdk/workspaces/members/bulk/client.py +273 -0
  43. label_studio_sdk/workspaces/members/bulk/types/__init__.py +6 -0
  44. label_studio_sdk/workspaces/members/bulk/types/bulk_delete_response.py +19 -0
  45. label_studio_sdk/workspaces/members/bulk/types/bulk_post_response.py +19 -0
  46. label_studio_sdk/workspaces/members/client.py +4 -0
  47. {label_studio_sdk-2.0.3.dist-info → label_studio_sdk-2.0.5.dist-info}/METADATA +1 -1
  48. {label_studio_sdk-2.0.3.dist-info → label_studio_sdk-2.0.5.dist-info}/RECORD +50 -20
  49. {label_studio_sdk-2.0.3.dist-info → label_studio_sdk-2.0.5.dist-info}/LICENSE +0 -0
  50. {label_studio_sdk-2.0.3.dist-info → label_studio_sdk-2.0.5.dist-info}/WHEEL +0 -0
@@ -2,6 +2,8 @@
2
2
 
3
3
  from .types import (
4
4
  ActionsEnum,
5
+ ActivityLog,
6
+ ActivityLogResponse,
5
7
  AllRolesProjectList,
6
8
  AllRolesProjectListSampling,
7
9
  AllRolesProjectListSkipQueue,
@@ -98,6 +100,7 @@ from .types import (
98
100
  LseapiTokenList,
99
101
  LsejwtSettings,
100
102
  MaybeExpandedComment,
103
+ MetricParam,
101
104
  MlBackend,
102
105
  ModeEnum,
103
106
  ModelInterface,
@@ -181,6 +184,10 @@ from .types import (
181
184
  View,
182
185
  Webhook,
183
186
  WebhookSerializerForUpdate,
187
+ WhoAmILseFields,
188
+ WhoAmILseFieldsOnboardingState,
189
+ WhoAmILseFieldsTrialRole,
190
+ WhoAmIUser,
184
191
  Workspace,
185
192
  WorkspaceMemberCreate,
186
193
  WorkspaceMemberList,
@@ -195,6 +202,7 @@ from .errors import (
195
202
  )
196
203
  from . import (
197
204
  actions,
205
+ activity_logs,
198
206
  annotations,
199
207
  billing,
200
208
  comments,
@@ -233,6 +241,7 @@ from .actions import (
233
241
  ActionsListResponseItem,
234
242
  ActionsListResponseItemDialog,
235
243
  )
244
+ from .activity_logs import ActivityLogsListRequestMethod
236
245
  from .annotations import AnnotationBulkSerializerWithSelectedItemsRequestLastAction, AnnotationsCreateBulkResponseItem
237
246
  from .client import AsyncLabelStudio, LabelStudio
238
247
  from .environment import LabelStudioEnvironment
@@ -305,6 +314,9 @@ __all__ = [
305
314
  "ActionsEnum",
306
315
  "ActionsListResponseItem",
307
316
  "ActionsListResponseItemDialog",
317
+ "ActivityLog",
318
+ "ActivityLogResponse",
319
+ "ActivityLogsListRequestMethod",
308
320
  "AllRolesProjectList",
309
321
  "AllRolesProjectListSampling",
310
322
  "AllRolesProjectListSkipQueue",
@@ -415,6 +427,7 @@ __all__ = [
415
427
  "LsejwtSettings",
416
428
  "MaybeExpandedComment",
417
429
  "MethodNotAllowedError",
430
+ "MetricParam",
418
431
  "MlBackend",
419
432
  "MlCreateRequestAuthMethod",
420
433
  "MlListModelVersionsResponse",
@@ -545,11 +558,16 @@ __all__ = [
545
558
  "WebhooksInfoResponseReviewsDeleted",
546
559
  "WebhooksInfoResponseTasksCreated",
547
560
  "WebhooksInfoResponseTasksDeleted",
561
+ "WhoAmILseFields",
562
+ "WhoAmILseFieldsOnboardingState",
563
+ "WhoAmILseFieldsTrialRole",
564
+ "WhoAmIUser",
548
565
  "Workspace",
549
566
  "WorkspaceMemberCreate",
550
567
  "WorkspaceMemberList",
551
568
  "__version__",
552
569
  "actions",
570
+ "activity_logs",
553
571
  "annotations",
554
572
  "billing",
555
573
  "comments",
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .types import ActivityLogsListRequestMethod
4
+
5
+ __all__ = ["ActivityLogsListRequestMethod"]
@@ -0,0 +1,246 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.client_wrapper import SyncClientWrapper
4
+ import typing
5
+ from .types.activity_logs_list_request_method import ActivityLogsListRequestMethod
6
+ from ..core.request_options import RequestOptions
7
+ from ..types.activity_log_response import ActivityLogResponse
8
+ from ..core.unchecked_base_model import construct_type
9
+ from ..errors.not_found_error import NotFoundError
10
+ from json.decoder import JSONDecodeError
11
+ from ..core.api_error import ApiError
12
+ from ..core.client_wrapper import AsyncClientWrapper
13
+
14
+
15
+ class ActivityLogsClient:
16
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
17
+ self._client_wrapper = client_wrapper
18
+
19
+ def list(
20
+ self,
21
+ *,
22
+ end_date: typing.Optional[str] = None,
23
+ method: typing.Optional[ActivityLogsListRequestMethod] = None,
24
+ ordering: typing.Optional[str] = None,
25
+ page: typing.Optional[int] = None,
26
+ page_size: typing.Optional[int] = None,
27
+ project: typing.Optional[int] = None,
28
+ search: typing.Optional[str] = None,
29
+ start_date: typing.Optional[str] = None,
30
+ user: typing.Optional[int] = None,
31
+ workspace: typing.Optional[int] = None,
32
+ request_options: typing.Optional[RequestOptions] = None,
33
+ ) -> typing.List[ActivityLogResponse]:
34
+ """
35
+ Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query.
36
+
37
+ Parameters
38
+ ----------
39
+ end_date : typing.Optional[str]
40
+ End date/time (ISO-8601) for log filtering.
41
+
42
+ method : typing.Optional[ActivityLogsListRequestMethod]
43
+ HTTP request method used in the log.
44
+
45
+ ordering : typing.Optional[str]
46
+ Which field to use when ordering the results.
47
+
48
+ page : typing.Optional[int]
49
+ [or "start"] Current page index.
50
+
51
+ page_size : typing.Optional[int]
52
+ [or "length"] Logs per page, use -1 to obtain all logs (might be slow).
53
+
54
+ project : typing.Optional[int]
55
+ Project ID to filter logs.
56
+
57
+ search : typing.Optional[str]
58
+ Search expression using "AND"/"OR" to filter by request URL.
59
+
60
+ start_date : typing.Optional[str]
61
+ Start date/time (ISO-8601) for log filtering.
62
+
63
+ user : typing.Optional[int]
64
+ User ID to filter logs.
65
+
66
+ workspace : typing.Optional[int]
67
+ Workspace owner ID to filter logs.
68
+
69
+ request_options : typing.Optional[RequestOptions]
70
+ Request-specific configuration.
71
+
72
+ Returns
73
+ -------
74
+ typing.List[ActivityLogResponse]
75
+ Activity logs
76
+
77
+ Examples
78
+ --------
79
+ from label_studio_sdk import LabelStudio
80
+
81
+ client = LabelStudio(
82
+ api_key="YOUR_API_KEY",
83
+ )
84
+ client.activity_logs.list()
85
+ """
86
+ _response = self._client_wrapper.httpx_client.request(
87
+ "api/activity-logs/",
88
+ method="GET",
89
+ params={
90
+ "end_date": end_date,
91
+ "method": method,
92
+ "ordering": ordering,
93
+ "page": page,
94
+ "page_size": page_size,
95
+ "project": project,
96
+ "search": search,
97
+ "start_date": start_date,
98
+ "user": user,
99
+ "workspace": workspace,
100
+ },
101
+ request_options=request_options,
102
+ )
103
+ try:
104
+ if 200 <= _response.status_code < 300:
105
+ return typing.cast(
106
+ typing.List[ActivityLogResponse],
107
+ construct_type(
108
+ type_=typing.List[ActivityLogResponse], # type: ignore
109
+ object_=_response.json(),
110
+ ),
111
+ )
112
+ if _response.status_code == 404:
113
+ raise NotFoundError(
114
+ typing.cast(
115
+ typing.Optional[typing.Any],
116
+ construct_type(
117
+ type_=typing.Optional[typing.Any], # type: ignore
118
+ object_=_response.json(),
119
+ ),
120
+ )
121
+ )
122
+ _response_json = _response.json()
123
+ except JSONDecodeError:
124
+ raise ApiError(status_code=_response.status_code, body=_response.text)
125
+ raise ApiError(status_code=_response.status_code, body=_response_json)
126
+
127
+
128
+ class AsyncActivityLogsClient:
129
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
130
+ self._client_wrapper = client_wrapper
131
+
132
+ async def list(
133
+ self,
134
+ *,
135
+ end_date: typing.Optional[str] = None,
136
+ method: typing.Optional[ActivityLogsListRequestMethod] = None,
137
+ ordering: typing.Optional[str] = None,
138
+ page: typing.Optional[int] = None,
139
+ page_size: typing.Optional[int] = None,
140
+ project: typing.Optional[int] = None,
141
+ search: typing.Optional[str] = None,
142
+ start_date: typing.Optional[str] = None,
143
+ user: typing.Optional[int] = None,
144
+ workspace: typing.Optional[int] = None,
145
+ request_options: typing.Optional[RequestOptions] = None,
146
+ ) -> typing.List[ActivityLogResponse]:
147
+ """
148
+ Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query.
149
+
150
+ Parameters
151
+ ----------
152
+ end_date : typing.Optional[str]
153
+ End date/time (ISO-8601) for log filtering.
154
+
155
+ method : typing.Optional[ActivityLogsListRequestMethod]
156
+ HTTP request method used in the log.
157
+
158
+ ordering : typing.Optional[str]
159
+ Which field to use when ordering the results.
160
+
161
+ page : typing.Optional[int]
162
+ [or "start"] Current page index.
163
+
164
+ page_size : typing.Optional[int]
165
+ [or "length"] Logs per page, use -1 to obtain all logs (might be slow).
166
+
167
+ project : typing.Optional[int]
168
+ Project ID to filter logs.
169
+
170
+ search : typing.Optional[str]
171
+ Search expression using "AND"/"OR" to filter by request URL.
172
+
173
+ start_date : typing.Optional[str]
174
+ Start date/time (ISO-8601) for log filtering.
175
+
176
+ user : typing.Optional[int]
177
+ User ID to filter logs.
178
+
179
+ workspace : typing.Optional[int]
180
+ Workspace owner ID to filter logs.
181
+
182
+ request_options : typing.Optional[RequestOptions]
183
+ Request-specific configuration.
184
+
185
+ Returns
186
+ -------
187
+ typing.List[ActivityLogResponse]
188
+ Activity logs
189
+
190
+ Examples
191
+ --------
192
+ import asyncio
193
+
194
+ from label_studio_sdk import AsyncLabelStudio
195
+
196
+ client = AsyncLabelStudio(
197
+ api_key="YOUR_API_KEY",
198
+ )
199
+
200
+
201
+ async def main() -> None:
202
+ await client.activity_logs.list()
203
+
204
+
205
+ asyncio.run(main())
206
+ """
207
+ _response = await self._client_wrapper.httpx_client.request(
208
+ "api/activity-logs/",
209
+ method="GET",
210
+ params={
211
+ "end_date": end_date,
212
+ "method": method,
213
+ "ordering": ordering,
214
+ "page": page,
215
+ "page_size": page_size,
216
+ "project": project,
217
+ "search": search,
218
+ "start_date": start_date,
219
+ "user": user,
220
+ "workspace": workspace,
221
+ },
222
+ request_options=request_options,
223
+ )
224
+ try:
225
+ if 200 <= _response.status_code < 300:
226
+ return typing.cast(
227
+ typing.List[ActivityLogResponse],
228
+ construct_type(
229
+ type_=typing.List[ActivityLogResponse], # type: ignore
230
+ object_=_response.json(),
231
+ ),
232
+ )
233
+ if _response.status_code == 404:
234
+ raise NotFoundError(
235
+ typing.cast(
236
+ typing.Optional[typing.Any],
237
+ construct_type(
238
+ type_=typing.Optional[typing.Any], # type: ignore
239
+ object_=_response.json(),
240
+ ),
241
+ )
242
+ )
243
+ _response_json = _response.json()
244
+ except JSONDecodeError:
245
+ raise ApiError(status_code=_response.status_code, body=_response.text)
246
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .activity_logs_list_request_method import ActivityLogsListRequestMethod
4
+
5
+ __all__ = ["ActivityLogsListRequestMethod"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ ActivityLogsListRequestMethod = typing.Union[typing.Literal["DELETE", "GET", "PATCH", "POST", "PUT", "all"], typing.Any]
@@ -6,6 +6,7 @@ import os
6
6
  import httpx
7
7
  from .core.api_error import ApiError
8
8
  from .core.client_wrapper import SyncClientWrapper
9
+ from .activity_logs.client import ActivityLogsClient
9
10
  from .annotations.client import AnnotationsClient
10
11
  from .billing.client import BillingClient
11
12
  from .comments.client import CommentsClient
@@ -29,6 +30,7 @@ from .webhooks.client import WebhooksClient
29
30
  from .workspaces.client import WorkspacesClient
30
31
  from .sso.client import SsoClient
31
32
  from .core.client_wrapper import AsyncClientWrapper
33
+ from .activity_logs.client import AsyncActivityLogsClient
32
34
  from .annotations.client import AsyncAnnotationsClient
33
35
  from .billing.client import AsyncBillingClient
34
36
  from .comments.client import AsyncCommentsClient
@@ -115,6 +117,7 @@ class LabelStudioBase:
115
117
  else httpx.Client(timeout=_defaulted_timeout),
116
118
  timeout=_defaulted_timeout,
117
119
  )
120
+ self.activity_logs = ActivityLogsClient(client_wrapper=self._client_wrapper)
118
121
  self.annotations = AnnotationsClient(client_wrapper=self._client_wrapper)
119
122
  self.billing = BillingClient(client_wrapper=self._client_wrapper)
120
123
  self.comments = CommentsClient(client_wrapper=self._client_wrapper)
@@ -201,6 +204,7 @@ class AsyncLabelStudioBase:
201
204
  else httpx.AsyncClient(timeout=_defaulted_timeout),
202
205
  timeout=_defaulted_timeout,
203
206
  )
207
+ self.activity_logs = AsyncActivityLogsClient(client_wrapper=self._client_wrapper)
204
208
  self.annotations = AsyncAnnotationsClient(client_wrapper=self._client_wrapper)
205
209
  self.billing = AsyncBillingClient(client_wrapper=self._client_wrapper)
206
210
  self.comments = AsyncCommentsClient(client_wrapper=self._client_wrapper)
@@ -1,8 +1,9 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
3
  from ..core.api_error import ApiError
4
+ import typing
4
5
 
5
6
 
6
7
  class InternalServerError(ApiError):
7
- def __init__(self, body: str):
8
+ def __init__(self, body: typing.Optional[typing.Any]):
8
9
  super().__init__(status_code=500, body=body)
@@ -762,10 +762,6 @@ class LabelInterface:
762
762
  errors.append(f"'{RESULT_KEY}' must be a list")
763
763
  return errors
764
764
 
765
- if not result:
766
- errors.append(f"'{RESULT_KEY}' cannot be empty")
767
- return errors
768
-
769
765
  # Validate score if present
770
766
  if 'score' in obj:
771
767
  score = obj['score']
@@ -516,9 +516,9 @@ class MlClient:
516
516
  if _response.status_code == 500:
517
517
  raise InternalServerError(
518
518
  typing.cast(
519
- str,
519
+ typing.Optional[typing.Any],
520
520
  construct_type(
521
- type_=str, # type: ignore
521
+ type_=typing.Optional[typing.Any], # type: ignore
522
522
  object_=_response.json(),
523
523
  ),
524
524
  )
@@ -1131,9 +1131,9 @@ class AsyncMlClient:
1131
1131
  if _response.status_code == 500:
1132
1132
  raise InternalServerError(
1133
1133
  typing.cast(
1134
- str,
1134
+ typing.Optional[typing.Any],
1135
1135
  construct_type(
1136
- type_=str, # type: ignore
1136
+ type_=typing.Optional[typing.Any], # type: ignore
1137
1137
  object_=_response.json(),
1138
1138
  ),
1139
1139
  )
@@ -9,7 +9,7 @@ from .types import (
9
9
  ProjectsImportTasksResponse,
10
10
  ProjectsListRequestFilter,
11
11
  )
12
- from . import assignments, exports, members, pauses, stats
12
+ from . import assignments, exports, members, metrics, pauses, stats
13
13
  from .assignments import (
14
14
  AssignmentsAssignRequestType,
15
15
  AssignmentsBulkAssignRequestFilters,
@@ -27,7 +27,15 @@ from .assignments import (
27
27
  AssignmentsUpdateRequestType,
28
28
  )
29
29
  from .exports import ExportsConvertResponse
30
- from .stats import StatsIaaResponse, StatsIaaResponseCommonTasks, StatsIaaResponseIaa, StatsIaaResponseStd
30
+ from .stats import (
31
+ StatsIaaResponse,
32
+ StatsIaaResponseCommonTasks,
33
+ StatsIaaResponseIaa,
34
+ StatsIaaResponseStd,
35
+ StatsTotalAgreementResponse,
36
+ StatsTotalAgreementResponseOne,
37
+ StatsTotalAgreementResponseZero,
38
+ )
31
39
 
32
40
  __all__ = [
33
41
  "AssignmentsAssignRequestType",
@@ -56,9 +64,13 @@ __all__ = [
56
64
  "StatsIaaResponseCommonTasks",
57
65
  "StatsIaaResponseIaa",
58
66
  "StatsIaaResponseStd",
67
+ "StatsTotalAgreementResponse",
68
+ "StatsTotalAgreementResponseOne",
69
+ "StatsTotalAgreementResponseZero",
59
70
  "assignments",
60
71
  "exports",
61
72
  "members",
73
+ "metrics",
62
74
  "pauses",
63
75
  "stats",
64
76
  ]
@@ -4,6 +4,7 @@ import typing
4
4
  from ..core.client_wrapper import SyncClientWrapper
5
5
  from .exports.client import ExportsClient
6
6
  from .members.client import MembersClient
7
+ from .metrics.client import MetricsClient
7
8
  from .stats.client import StatsClient
8
9
  from .assignments.client import AssignmentsClient
9
10
  from .pauses.client import PausesClient
@@ -37,6 +38,7 @@ from ..types.project_label_config import ProjectLabelConfig
37
38
  from ..core.client_wrapper import AsyncClientWrapper
38
39
  from .exports.client import AsyncExportsClient
39
40
  from .members.client import AsyncMembersClient
41
+ from .metrics.client import AsyncMetricsClient
40
42
  from .stats.client import AsyncStatsClient
41
43
  from .assignments.client import AsyncAssignmentsClient
42
44
  from .pauses.client import AsyncPausesClient
@@ -51,6 +53,7 @@ class ProjectsClient:
51
53
  self._client_wrapper = client_wrapper
52
54
  self.exports = ExportsClient(client_wrapper=self._client_wrapper)
53
55
  self.members = MembersClient(client_wrapper=self._client_wrapper)
56
+ self.metrics = MetricsClient(client_wrapper=self._client_wrapper)
54
57
  self.stats = StatsClient(client_wrapper=self._client_wrapper)
55
58
  self.assignments = AssignmentsClient(client_wrapper=self._client_wrapper)
56
59
  self.pauses = PausesClient(client_wrapper=self._client_wrapper)
@@ -980,6 +983,7 @@ class AsyncProjectsClient:
980
983
  self._client_wrapper = client_wrapper
981
984
  self.exports = AsyncExportsClient(client_wrapper=self._client_wrapper)
982
985
  self.members = AsyncMembersClient(client_wrapper=self._client_wrapper)
986
+ self.metrics = AsyncMetricsClient(client_wrapper=self._client_wrapper)
983
987
  self.stats = AsyncStatsClient(client_wrapper=self._client_wrapper)
984
988
  self.assignments = AsyncAssignmentsClient(client_wrapper=self._client_wrapper)
985
989
  self.pauses = AsyncPausesClient(client_wrapper=self._client_wrapper)
@@ -1,2 +1,6 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
+ from . import bulk
4
+ from .bulk import BulkDeleteResponse, BulkPostResponse
5
+
6
+ __all__ = ["BulkDeleteResponse", "BulkPostResponse", "bulk"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from .types import BulkDeleteResponse, BulkPostResponse
4
+
5
+ __all__ = ["BulkDeleteResponse", "BulkPostResponse"]