label-studio-sdk 1.0.7__py3-none-any.whl → 1.0.10__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 (206) hide show
  1. label_studio_sdk/__init__.py +26 -7
  2. label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +13 -4
  3. label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +16 -4
  4. label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +86 -0
  5. label_studio_sdk/_extensions/pager_ext.py +8 -0
  6. label_studio_sdk/_legacy/schema/label_config_schema.json +42 -11
  7. label_studio_sdk/actions/client.py +91 -40
  8. label_studio_sdk/actions/types/actions_create_request_filters.py +14 -24
  9. label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +16 -26
  10. label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +3 -1
  11. label_studio_sdk/actions/types/actions_create_request_selected_items.py +1 -2
  12. label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +15 -25
  13. label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +15 -25
  14. label_studio_sdk/annotations/__init__.py +2 -2
  15. label_studio_sdk/annotations/client.py +278 -104
  16. label_studio_sdk/annotations/types/__init__.py +2 -1
  17. label_studio_sdk/annotations/types/annotations_create_bulk_request_selected_items.py +34 -0
  18. label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +11 -21
  19. label_studio_sdk/base_client.py +46 -27
  20. label_studio_sdk/client.py +1 -0
  21. label_studio_sdk/comments/client.py +190 -44
  22. label_studio_sdk/converter/converter.py +66 -18
  23. label_studio_sdk/converter/imports/yolo.py +1 -1
  24. label_studio_sdk/converter/utils.py +3 -2
  25. label_studio_sdk/core/__init__.py +21 -4
  26. label_studio_sdk/core/client_wrapper.py +9 -10
  27. label_studio_sdk/core/file.py +37 -8
  28. label_studio_sdk/core/http_client.py +52 -28
  29. label_studio_sdk/core/jsonable_encoder.py +33 -31
  30. label_studio_sdk/core/pagination.py +5 -4
  31. label_studio_sdk/core/pydantic_utilities.py +272 -4
  32. label_studio_sdk/core/query_encoder.py +38 -13
  33. label_studio_sdk/core/request_options.py +3 -0
  34. label_studio_sdk/core/serialization.py +272 -0
  35. label_studio_sdk/errors/bad_request_error.py +2 -3
  36. label_studio_sdk/export_storage/azure/client.py +228 -58
  37. label_studio_sdk/export_storage/azure/types/azure_create_response.py +19 -29
  38. label_studio_sdk/export_storage/azure/types/azure_update_response.py +19 -29
  39. label_studio_sdk/export_storage/client.py +48 -18
  40. label_studio_sdk/export_storage/gcs/client.py +228 -58
  41. label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +19 -29
  42. label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +19 -29
  43. label_studio_sdk/export_storage/local/client.py +222 -56
  44. label_studio_sdk/export_storage/local/types/local_create_response.py +17 -27
  45. label_studio_sdk/export_storage/local/types/local_update_response.py +17 -27
  46. label_studio_sdk/export_storage/redis/client.py +228 -58
  47. label_studio_sdk/export_storage/redis/types/redis_create_response.py +20 -30
  48. label_studio_sdk/export_storage/redis/types/redis_update_response.py +20 -30
  49. label_studio_sdk/export_storage/s3/client.py +228 -58
  50. label_studio_sdk/export_storage/s3/types/s3create_response.py +27 -35
  51. label_studio_sdk/export_storage/s3/types/s3update_response.py +27 -35
  52. label_studio_sdk/export_storage/s3s/client.py +187 -43
  53. label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +11 -21
  54. label_studio_sdk/files/client.py +172 -56
  55. label_studio_sdk/import_storage/azure/client.py +223 -53
  56. label_studio_sdk/import_storage/azure/types/azure_create_response.py +22 -32
  57. label_studio_sdk/import_storage/azure/types/azure_update_response.py +22 -32
  58. label_studio_sdk/import_storage/client.py +48 -18
  59. label_studio_sdk/import_storage/gcs/client.py +223 -53
  60. label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +22 -32
  61. label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +22 -32
  62. label_studio_sdk/import_storage/local/client.py +223 -53
  63. label_studio_sdk/import_storage/local/types/local_create_response.py +17 -27
  64. label_studio_sdk/import_storage/local/types/local_update_response.py +17 -27
  65. label_studio_sdk/import_storage/redis/client.py +223 -53
  66. label_studio_sdk/import_storage/redis/types/redis_create_response.py +20 -30
  67. label_studio_sdk/import_storage/redis/types/redis_update_response.py +20 -30
  68. label_studio_sdk/import_storage/s3/client.py +223 -53
  69. label_studio_sdk/import_storage/s3/types/s3create_response.py +31 -39
  70. label_studio_sdk/import_storage/s3/types/s3update_response.py +31 -39
  71. label_studio_sdk/import_storage/s3s/client.py +222 -52
  72. label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +11 -21
  73. label_studio_sdk/label_interface/control_tags.py +205 -10
  74. label_studio_sdk/label_interface/interface.py +80 -6
  75. label_studio_sdk/label_interface/region.py +1 -10
  76. label_studio_sdk/ml/client.py +280 -78
  77. label_studio_sdk/ml/types/ml_create_response.py +21 -31
  78. label_studio_sdk/ml/types/ml_update_response.py +21 -31
  79. label_studio_sdk/model_providers/client.py +656 -21
  80. label_studio_sdk/predictions/client.py +247 -101
  81. label_studio_sdk/projects/__init__.py +3 -0
  82. label_studio_sdk/projects/client.py +309 -115
  83. label_studio_sdk/projects/client_ext.py +16 -0
  84. label_studio_sdk/projects/exports/__init__.py +3 -0
  85. label_studio_sdk/projects/exports/client.py +447 -296
  86. label_studio_sdk/projects/exports/client_ext.py +134 -0
  87. label_studio_sdk/projects/exports/types/__init__.py +6 -0
  88. label_studio_sdk/projects/exports/types/exports_convert_response.py +24 -0
  89. label_studio_sdk/projects/exports/types/exports_list_formats_response_item.py +44 -0
  90. label_studio_sdk/projects/types/projects_create_response.py +29 -34
  91. label_studio_sdk/projects/types/projects_import_tasks_response.py +19 -29
  92. label_studio_sdk/projects/types/projects_list_response.py +11 -21
  93. label_studio_sdk/projects/types/projects_update_response.py +24 -34
  94. label_studio_sdk/prompts/client.py +309 -92
  95. label_studio_sdk/prompts/indicators/client.py +67 -23
  96. label_studio_sdk/prompts/runs/client.py +95 -40
  97. label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +14 -24
  98. label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +11 -21
  99. label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +26 -29
  100. label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +11 -21
  101. label_studio_sdk/prompts/versions/client.py +389 -75
  102. label_studio_sdk/tasks/client.py +263 -90
  103. label_studio_sdk/tasks/types/tasks_list_response.py +15 -25
  104. label_studio_sdk/types/__init__.py +16 -6
  105. label_studio_sdk/types/annotation.py +29 -38
  106. label_studio_sdk/types/annotation_filter_options.py +14 -24
  107. label_studio_sdk/types/annotations_dm_field.py +30 -39
  108. label_studio_sdk/types/azure_blob_export_storage.py +28 -37
  109. label_studio_sdk/types/azure_blob_import_storage.py +28 -37
  110. label_studio_sdk/types/base_task.py +30 -39
  111. label_studio_sdk/types/base_task_updated_by.py +3 -1
  112. label_studio_sdk/types/base_user.py +14 -21
  113. label_studio_sdk/types/comment.py +12 -21
  114. label_studio_sdk/types/comment_created_by.py +1 -1
  115. label_studio_sdk/types/converted_format.py +12 -22
  116. label_studio_sdk/types/data_manager_task_serializer.py +31 -40
  117. label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +1 -1
  118. label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +13 -22
  119. label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +15 -24
  120. label_studio_sdk/types/export.py +17 -26
  121. label_studio_sdk/types/export_format.py +25 -0
  122. label_studio_sdk/types/export_snapshot.py +45 -0
  123. label_studio_sdk/types/export_snapshot_status.py +5 -0
  124. label_studio_sdk/types/file_upload.py +11 -21
  125. label_studio_sdk/types/filter.py +16 -26
  126. label_studio_sdk/types/filter_group.py +12 -22
  127. label_studio_sdk/types/gcs_export_storage.py +28 -37
  128. label_studio_sdk/types/gcs_import_storage.py +28 -37
  129. label_studio_sdk/types/inference_run.py +14 -23
  130. label_studio_sdk/types/inference_run_cost_estimate.py +47 -0
  131. label_studio_sdk/types/inference_run_created_by.py +1 -1
  132. label_studio_sdk/types/inference_run_organization.py +1 -1
  133. label_studio_sdk/types/key_indicator_value.py +12 -22
  134. label_studio_sdk/types/key_indicators.py +0 -1
  135. label_studio_sdk/types/key_indicators_item.py +15 -25
  136. label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +13 -23
  137. label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +13 -23
  138. label_studio_sdk/types/local_files_export_storage.py +25 -34
  139. label_studio_sdk/types/local_files_import_storage.py +24 -33
  140. label_studio_sdk/types/ml_backend.py +23 -32
  141. label_studio_sdk/types/model_provider_connection.py +47 -26
  142. label_studio_sdk/types/model_provider_connection_budget_reset_period.py +5 -0
  143. label_studio_sdk/types/model_provider_connection_created_by.py +1 -1
  144. label_studio_sdk/types/model_provider_connection_organization.py +1 -1
  145. label_studio_sdk/types/model_provider_connection_provider.py +3 -1
  146. label_studio_sdk/types/prediction.py +21 -30
  147. label_studio_sdk/types/project.py +48 -55
  148. label_studio_sdk/types/project_import.py +21 -30
  149. label_studio_sdk/types/project_label_config.py +12 -22
  150. label_studio_sdk/types/prompt.py +24 -32
  151. label_studio_sdk/types/prompt_associated_projects_item.py +6 -0
  152. label_studio_sdk/types/prompt_associated_projects_item_id.py +20 -0
  153. label_studio_sdk/types/prompt_created_by.py +1 -1
  154. label_studio_sdk/types/prompt_organization.py +1 -1
  155. label_studio_sdk/types/prompt_version.py +13 -22
  156. label_studio_sdk/types/prompt_version_created_by.py +1 -1
  157. label_studio_sdk/types/prompt_version_organization.py +1 -1
  158. label_studio_sdk/types/prompt_version_provider.py +3 -1
  159. label_studio_sdk/types/redis_export_storage.py +29 -38
  160. label_studio_sdk/types/redis_import_storage.py +28 -37
  161. label_studio_sdk/types/refined_prompt_response.py +19 -29
  162. label_studio_sdk/types/s3export_storage.py +36 -43
  163. label_studio_sdk/types/s3import_storage.py +37 -44
  164. label_studio_sdk/types/s3s_export_storage.py +26 -33
  165. label_studio_sdk/types/s3s_import_storage.py +35 -42
  166. label_studio_sdk/types/serialization_option.py +12 -22
  167. label_studio_sdk/types/serialization_options.py +18 -28
  168. label_studio_sdk/types/task.py +46 -48
  169. label_studio_sdk/types/task_annotators_item.py +1 -1
  170. label_studio_sdk/types/task_comment_authors_item.py +5 -0
  171. label_studio_sdk/types/task_filter_options.py +15 -25
  172. label_studio_sdk/types/user_simple.py +11 -21
  173. label_studio_sdk/types/view.py +16 -26
  174. label_studio_sdk/types/webhook.py +19 -28
  175. label_studio_sdk/types/webhook_serializer_for_update.py +19 -28
  176. label_studio_sdk/types/workspace.py +22 -31
  177. label_studio_sdk/users/client.py +257 -63
  178. label_studio_sdk/users/types/users_get_token_response.py +12 -22
  179. label_studio_sdk/users/types/users_reset_token_response.py +12 -22
  180. label_studio_sdk/version.py +0 -1
  181. label_studio_sdk/versions/__init__.py +5 -0
  182. label_studio_sdk/versions/client.py +112 -0
  183. label_studio_sdk/versions/types/__init__.py +6 -0
  184. label_studio_sdk/versions/types/versions_get_response.py +73 -0
  185. label_studio_sdk/versions/types/versions_get_response_edition.py +5 -0
  186. label_studio_sdk/views/client.py +219 -52
  187. label_studio_sdk/views/types/views_create_request_data.py +13 -23
  188. label_studio_sdk/views/types/views_create_request_data_filters.py +14 -24
  189. label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +16 -26
  190. label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +3 -1
  191. label_studio_sdk/views/types/views_update_request_data.py +13 -23
  192. label_studio_sdk/views/types/views_update_request_data_filters.py +14 -24
  193. label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +16 -26
  194. label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +3 -1
  195. label_studio_sdk/webhooks/client.py +191 -61
  196. label_studio_sdk/workspaces/client.py +164 -41
  197. label_studio_sdk/workspaces/members/client.py +109 -31
  198. label_studio_sdk/workspaces/members/types/members_create_response.py +12 -22
  199. label_studio_sdk/workspaces/members/types/members_list_response_item.py +12 -22
  200. {label_studio_sdk-1.0.7.dist-info → label_studio_sdk-1.0.10.dist-info}/METADATA +9 -5
  201. {label_studio_sdk-1.0.7.dist-info → label_studio_sdk-1.0.10.dist-info}/RECORD +203 -186
  202. {label_studio_sdk-1.0.7.dist-info → label_studio_sdk-1.0.10.dist-info}/WHEEL +1 -1
  203. label_studio_sdk/types/export_convert.py +0 -32
  204. label_studio_sdk/types/export_create.py +0 -54
  205. label_studio_sdk/types/export_create_status.py +0 -5
  206. {label_studio_sdk-1.0.7.dist-info → label_studio_sdk-1.0.10.dist-info}/LICENSE +0 -0
@@ -1,19 +1,21 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
- import datetime as dt
4
3
  import typing
5
- from json.decoder import JSONDecodeError
6
-
7
- from ...core.api_error import ApiError
8
- from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
9
- from ...core.jsonable_encoder import jsonable_encoder
10
- from ...core.pydantic_utilities import pydantic_v1
4
+ from ...core.client_wrapper import SyncClientWrapper
11
5
  from ...core.request_options import RequestOptions
12
6
  from ...types.prompt_version import PromptVersion
7
+ from ...core.jsonable_encoder import jsonable_encoder
8
+ from ...core.pydantic_utilities import parse_obj_as
9
+ from json.decoder import JSONDecodeError
10
+ from ...core.api_error import ApiError
11
+ from ...types.prompt_version_provider import PromptVersionProvider
13
12
  from ...types.prompt_version_created_by import PromptVersionCreatedBy
13
+ import datetime as dt
14
14
  from ...types.prompt_version_organization import PromptVersionOrganization
15
- from ...types.prompt_version_provider import PromptVersionProvider
15
+ from ...core.serialization import convert_and_respect_annotation_metadata
16
+ from ...types.inference_run_cost_estimate import InferenceRunCostEstimate
16
17
  from ...types.refined_prompt_response import RefinedPromptResponse
18
+ from ...core.client_wrapper import AsyncClientWrapper
17
19
 
18
20
  # this is used as the default value for optional parameters
19
21
  OMIT = typing.cast(typing.Any, ...)
@@ -42,7 +44,7 @@ class VersionsClient:
42
44
 
43
45
  Examples
44
46
  --------
45
- from label_studio_sdk.client import LabelStudio
47
+ from label_studio_sdk import LabelStudio
46
48
 
47
49
  client = LabelStudio(
48
50
  api_key="YOUR_API_KEY",
@@ -52,11 +54,19 @@ class VersionsClient:
52
54
  )
53
55
  """
54
56
  _response = self._client_wrapper.httpx_client.request(
55
- f"api/prompts/{jsonable_encoder(id)}/versions", method="GET", request_options=request_options
57
+ f"api/prompts/{jsonable_encoder(id)}/versions",
58
+ method="GET",
59
+ request_options=request_options,
56
60
  )
57
61
  try:
58
62
  if 200 <= _response.status_code < 300:
59
- return pydantic_v1.parse_obj_as(typing.List[PromptVersion], _response.json()) # type: ignore
63
+ return typing.cast(
64
+ typing.List[PromptVersion],
65
+ parse_obj_as(
66
+ type_=typing.List[PromptVersion], # type: ignore
67
+ object_=_response.json(),
68
+ ),
69
+ )
60
70
  _response_json = _response.json()
61
71
  except JSONDecodeError:
62
72
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -116,7 +126,7 @@ class VersionsClient:
116
126
 
117
127
  Examples
118
128
  --------
119
- from label_studio_sdk.client import LabelStudio
129
+ from label_studio_sdk import LabelStudio
120
130
 
121
131
  client = LabelStudio(
122
132
  api_key="YOUR_API_KEY",
@@ -135,17 +145,27 @@ class VersionsClient:
135
145
  "prompt": prompt,
136
146
  "provider": provider,
137
147
  "provider_model_id": provider_model_id,
138
- "created_by": created_by,
148
+ "created_by": convert_and_respect_annotation_metadata(
149
+ object_=created_by, annotation=PromptVersionCreatedBy, direction="write"
150
+ ),
139
151
  "created_at": created_at,
140
152
  "updated_at": updated_at,
141
- "organization": organization,
153
+ "organization": convert_and_respect_annotation_metadata(
154
+ object_=organization, annotation=PromptVersionOrganization, direction="write"
155
+ ),
142
156
  },
143
157
  request_options=request_options,
144
158
  omit=OMIT,
145
159
  )
146
160
  try:
147
161
  if 200 <= _response.status_code < 300:
148
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
162
+ return typing.cast(
163
+ PromptVersion,
164
+ parse_obj_as(
165
+ type_=PromptVersion, # type: ignore
166
+ object_=_response.json(),
167
+ ),
168
+ )
149
169
  _response_json = _response.json()
150
170
  except JSONDecodeError:
151
171
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -175,7 +195,7 @@ class VersionsClient:
175
195
 
176
196
  Examples
177
197
  --------
178
- from label_studio_sdk.client import LabelStudio
198
+ from label_studio_sdk import LabelStudio
179
199
 
180
200
  client = LabelStudio(
181
201
  api_key="YOUR_API_KEY",
@@ -192,7 +212,13 @@ class VersionsClient:
192
212
  )
193
213
  try:
194
214
  if 200 <= _response.status_code < 300:
195
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
215
+ return typing.cast(
216
+ PromptVersion,
217
+ parse_obj_as(
218
+ type_=PromptVersion, # type: ignore
219
+ object_=_response.json(),
220
+ ),
221
+ )
196
222
  _response_json = _response.json()
197
223
  except JSONDecodeError:
198
224
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -219,7 +245,7 @@ class VersionsClient:
219
245
 
220
246
  Examples
221
247
  --------
222
- from label_studio_sdk.client import LabelStudio
248
+ from label_studio_sdk import LabelStudio
223
249
 
224
250
  client = LabelStudio(
225
251
  api_key="YOUR_API_KEY",
@@ -300,7 +326,7 @@ class VersionsClient:
300
326
 
301
327
  Examples
302
328
  --------
303
- from label_studio_sdk.client import LabelStudio
329
+ from label_studio_sdk import LabelStudio
304
330
 
305
331
  client = LabelStudio(
306
332
  api_key="YOUR_API_KEY",
@@ -320,17 +346,98 @@ class VersionsClient:
320
346
  "prompt": prompt,
321
347
  "provider": provider,
322
348
  "provider_model_id": provider_model_id,
323
- "created_by": created_by,
349
+ "created_by": convert_and_respect_annotation_metadata(
350
+ object_=created_by, annotation=PromptVersionCreatedBy, direction="write"
351
+ ),
324
352
  "created_at": created_at,
325
353
  "updated_at": updated_at,
326
- "organization": organization,
354
+ "organization": convert_and_respect_annotation_metadata(
355
+ object_=organization, annotation=PromptVersionOrganization, direction="write"
356
+ ),
327
357
  },
328
358
  request_options=request_options,
329
359
  omit=OMIT,
330
360
  )
331
361
  try:
332
362
  if 200 <= _response.status_code < 300:
333
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
363
+ return typing.cast(
364
+ PromptVersion,
365
+ parse_obj_as(
366
+ type_=PromptVersion, # type: ignore
367
+ object_=_response.json(),
368
+ ),
369
+ )
370
+ _response_json = _response.json()
371
+ except JSONDecodeError:
372
+ raise ApiError(status_code=_response.status_code, body=_response.text)
373
+ raise ApiError(status_code=_response.status_code, body=_response_json)
374
+
375
+ def cost_estimate(
376
+ self,
377
+ prompt_id: int,
378
+ version_id: int,
379
+ *,
380
+ project_id: int,
381
+ project_subset: int,
382
+ request_options: typing.Optional[RequestOptions] = None,
383
+ ) -> InferenceRunCostEstimate:
384
+ """
385
+ Get cost estimate for running a prompt version on a particular project/subset
386
+
387
+ Parameters
388
+ ----------
389
+ prompt_id : int
390
+ Prompt ID
391
+
392
+ version_id : int
393
+ Prompt Version ID
394
+
395
+ project_id : int
396
+ ID of the project to get an estimate for running on
397
+
398
+ project_subset : int
399
+ Subset of the project to get an estimate for running on (e.g. 'All', 'Sample', or 'HasGT')
400
+
401
+ request_options : typing.Optional[RequestOptions]
402
+ Request-specific configuration.
403
+
404
+ Returns
405
+ -------
406
+ InferenceRunCostEstimate
407
+
408
+
409
+ Examples
410
+ --------
411
+ from label_studio_sdk import LabelStudio
412
+
413
+ client = LabelStudio(
414
+ api_key="YOUR_API_KEY",
415
+ )
416
+ client.prompts.versions.cost_estimate(
417
+ prompt_id=1,
418
+ version_id=1,
419
+ project_id=1,
420
+ project_subset=1,
421
+ )
422
+ """
423
+ _response = self._client_wrapper.httpx_client.request(
424
+ f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/cost-estimate",
425
+ method="POST",
426
+ params={
427
+ "project_id": project_id,
428
+ "project_subset": project_subset,
429
+ },
430
+ request_options=request_options,
431
+ )
432
+ try:
433
+ if 200 <= _response.status_code < 300:
434
+ return typing.cast(
435
+ InferenceRunCostEstimate,
436
+ parse_obj_as(
437
+ type_=InferenceRunCostEstimate, # type: ignore
438
+ object_=_response.json(),
439
+ ),
440
+ )
334
441
  _response_json = _response.json()
335
442
  except JSONDecodeError:
336
443
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -368,7 +475,7 @@ class VersionsClient:
368
475
 
369
476
  Examples
370
477
  --------
371
- from label_studio_sdk.client import LabelStudio
478
+ from label_studio_sdk import LabelStudio
372
479
 
373
480
  client = LabelStudio(
374
481
  api_key="YOUR_API_KEY",
@@ -382,12 +489,20 @@ class VersionsClient:
382
489
  _response = self._client_wrapper.httpx_client.request(
383
490
  f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/refine",
384
491
  method="GET",
385
- params={"refinement_job_id": refinement_job_id},
492
+ params={
493
+ "refinement_job_id": refinement_job_id,
494
+ },
386
495
  request_options=request_options,
387
496
  )
388
497
  try:
389
498
  if 200 <= _response.status_code < 300:
390
- return pydantic_v1.parse_obj_as(RefinedPromptResponse, _response.json()) # type: ignore
499
+ return typing.cast(
500
+ RefinedPromptResponse,
501
+ parse_obj_as(
502
+ type_=RefinedPromptResponse, # type: ignore
503
+ object_=_response.json(),
504
+ ),
505
+ )
391
506
  _response_json = _response.json()
392
507
  except JSONDecodeError:
393
508
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -437,7 +552,7 @@ class VersionsClient:
437
552
 
438
553
  Examples
439
554
  --------
440
- from label_studio_sdk.client import LabelStudio
555
+ from label_studio_sdk import LabelStudio
441
556
 
442
557
  client = LabelStudio(
443
558
  api_key="YOUR_API_KEY",
@@ -450,18 +565,29 @@ class VersionsClient:
450
565
  _response = self._client_wrapper.httpx_client.request(
451
566
  f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/refine",
452
567
  method="POST",
453
- params={"async": async_},
568
+ params={
569
+ "async": async_,
570
+ },
454
571
  json={
455
572
  "teacher_model_provider_connection_id": teacher_model_provider_connection_id,
456
573
  "teacher_model_name": teacher_model_name,
457
574
  "project_id": project_id,
458
575
  },
576
+ headers={
577
+ "content-type": "application/json",
578
+ },
459
579
  request_options=request_options,
460
580
  omit=OMIT,
461
581
  )
462
582
  try:
463
583
  if 200 <= _response.status_code < 300:
464
- return pydantic_v1.parse_obj_as(RefinedPromptResponse, _response.json()) # type: ignore
584
+ return typing.cast(
585
+ RefinedPromptResponse,
586
+ parse_obj_as(
587
+ type_=RefinedPromptResponse, # type: ignore
588
+ object_=_response.json(),
589
+ ),
590
+ )
465
591
  _response_json = _response.json()
466
592
  except JSONDecodeError:
467
593
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -493,21 +619,37 @@ class AsyncVersionsClient:
493
619
 
494
620
  Examples
495
621
  --------
496
- from label_studio_sdk.client import AsyncLabelStudio
622
+ import asyncio
623
+
624
+ from label_studio_sdk import AsyncLabelStudio
497
625
 
498
626
  client = AsyncLabelStudio(
499
627
  api_key="YOUR_API_KEY",
500
628
  )
501
- await client.prompts.versions.list(
502
- id=1,
503
- )
629
+
630
+
631
+ async def main() -> None:
632
+ await client.prompts.versions.list(
633
+ id=1,
634
+ )
635
+
636
+
637
+ asyncio.run(main())
504
638
  """
505
639
  _response = await self._client_wrapper.httpx_client.request(
506
- f"api/prompts/{jsonable_encoder(id)}/versions", method="GET", request_options=request_options
640
+ f"api/prompts/{jsonable_encoder(id)}/versions",
641
+ method="GET",
642
+ request_options=request_options,
507
643
  )
508
644
  try:
509
645
  if 200 <= _response.status_code < 300:
510
- return pydantic_v1.parse_obj_as(typing.List[PromptVersion], _response.json()) # type: ignore
646
+ return typing.cast(
647
+ typing.List[PromptVersion],
648
+ parse_obj_as(
649
+ type_=typing.List[PromptVersion], # type: ignore
650
+ object_=_response.json(),
651
+ ),
652
+ )
511
653
  _response_json = _response.json()
512
654
  except JSONDecodeError:
513
655
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -567,14 +709,22 @@ class AsyncVersionsClient:
567
709
 
568
710
  Examples
569
711
  --------
570
- from label_studio_sdk.client import AsyncLabelStudio
712
+ import asyncio
713
+
714
+ from label_studio_sdk import AsyncLabelStudio
571
715
 
572
716
  client = AsyncLabelStudio(
573
717
  api_key="YOUR_API_KEY",
574
718
  )
575
- await client.prompts.versions.create(
576
- id=1,
577
- )
719
+
720
+
721
+ async def main() -> None:
722
+ await client.prompts.versions.create(
723
+ id=1,
724
+ )
725
+
726
+
727
+ asyncio.run(main())
578
728
  """
579
729
  _response = await self._client_wrapper.httpx_client.request(
580
730
  f"api/prompts/{jsonable_encoder(id)}/versions",
@@ -586,17 +736,27 @@ class AsyncVersionsClient:
586
736
  "prompt": prompt,
587
737
  "provider": provider,
588
738
  "provider_model_id": provider_model_id,
589
- "created_by": created_by,
739
+ "created_by": convert_and_respect_annotation_metadata(
740
+ object_=created_by, annotation=PromptVersionCreatedBy, direction="write"
741
+ ),
590
742
  "created_at": created_at,
591
743
  "updated_at": updated_at,
592
- "organization": organization,
744
+ "organization": convert_and_respect_annotation_metadata(
745
+ object_=organization, annotation=PromptVersionOrganization, direction="write"
746
+ ),
593
747
  },
594
748
  request_options=request_options,
595
749
  omit=OMIT,
596
750
  )
597
751
  try:
598
752
  if 200 <= _response.status_code < 300:
599
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
753
+ return typing.cast(
754
+ PromptVersion,
755
+ parse_obj_as(
756
+ type_=PromptVersion, # type: ignore
757
+ object_=_response.json(),
758
+ ),
759
+ )
600
760
  _response_json = _response.json()
601
761
  except JSONDecodeError:
602
762
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -626,15 +786,23 @@ class AsyncVersionsClient:
626
786
 
627
787
  Examples
628
788
  --------
629
- from label_studio_sdk.client import AsyncLabelStudio
789
+ import asyncio
790
+
791
+ from label_studio_sdk import AsyncLabelStudio
630
792
 
631
793
  client = AsyncLabelStudio(
632
794
  api_key="YOUR_API_KEY",
633
795
  )
634
- await client.prompts.versions.get(
635
- id=1,
636
- version_id=1,
637
- )
796
+
797
+
798
+ async def main() -> None:
799
+ await client.prompts.versions.get(
800
+ id=1,
801
+ version_id=1,
802
+ )
803
+
804
+
805
+ asyncio.run(main())
638
806
  """
639
807
  _response = await self._client_wrapper.httpx_client.request(
640
808
  f"api/prompts/{jsonable_encoder(id)}/versions/{jsonable_encoder(version_id)}",
@@ -643,7 +811,13 @@ class AsyncVersionsClient:
643
811
  )
644
812
  try:
645
813
  if 200 <= _response.status_code < 300:
646
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
814
+ return typing.cast(
815
+ PromptVersion,
816
+ parse_obj_as(
817
+ type_=PromptVersion, # type: ignore
818
+ object_=_response.json(),
819
+ ),
820
+ )
647
821
  _response_json = _response.json()
648
822
  except JSONDecodeError:
649
823
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -672,15 +846,23 @@ class AsyncVersionsClient:
672
846
 
673
847
  Examples
674
848
  --------
675
- from label_studio_sdk.client import AsyncLabelStudio
849
+ import asyncio
850
+
851
+ from label_studio_sdk import AsyncLabelStudio
676
852
 
677
853
  client = AsyncLabelStudio(
678
854
  api_key="YOUR_API_KEY",
679
855
  )
680
- await client.prompts.versions.delete(
681
- id=1,
682
- version_id=1,
683
- )
856
+
857
+
858
+ async def main() -> None:
859
+ await client.prompts.versions.delete(
860
+ id=1,
861
+ version_id=1,
862
+ )
863
+
864
+
865
+ asyncio.run(main())
684
866
  """
685
867
  _response = await self._client_wrapper.httpx_client.request(
686
868
  f"api/prompts/{jsonable_encoder(id)}/versions/{jsonable_encoder(version_id)}",
@@ -753,15 +935,23 @@ class AsyncVersionsClient:
753
935
 
754
936
  Examples
755
937
  --------
756
- from label_studio_sdk.client import AsyncLabelStudio
938
+ import asyncio
939
+
940
+ from label_studio_sdk import AsyncLabelStudio
757
941
 
758
942
  client = AsyncLabelStudio(
759
943
  api_key="YOUR_API_KEY",
760
944
  )
761
- await client.prompts.versions.update(
762
- id=1,
763
- version_id=1,
764
- )
945
+
946
+
947
+ async def main() -> None:
948
+ await client.prompts.versions.update(
949
+ id=1,
950
+ version_id=1,
951
+ )
952
+
953
+
954
+ asyncio.run(main())
765
955
  """
766
956
  _response = await self._client_wrapper.httpx_client.request(
767
957
  f"api/prompts/{jsonable_encoder(id)}/versions/{jsonable_encoder(version_id)}",
@@ -773,17 +963,106 @@ class AsyncVersionsClient:
773
963
  "prompt": prompt,
774
964
  "provider": provider,
775
965
  "provider_model_id": provider_model_id,
776
- "created_by": created_by,
966
+ "created_by": convert_and_respect_annotation_metadata(
967
+ object_=created_by, annotation=PromptVersionCreatedBy, direction="write"
968
+ ),
777
969
  "created_at": created_at,
778
970
  "updated_at": updated_at,
779
- "organization": organization,
971
+ "organization": convert_and_respect_annotation_metadata(
972
+ object_=organization, annotation=PromptVersionOrganization, direction="write"
973
+ ),
780
974
  },
781
975
  request_options=request_options,
782
976
  omit=OMIT,
783
977
  )
784
978
  try:
785
979
  if 200 <= _response.status_code < 300:
786
- return pydantic_v1.parse_obj_as(PromptVersion, _response.json()) # type: ignore
980
+ return typing.cast(
981
+ PromptVersion,
982
+ parse_obj_as(
983
+ type_=PromptVersion, # type: ignore
984
+ object_=_response.json(),
985
+ ),
986
+ )
987
+ _response_json = _response.json()
988
+ except JSONDecodeError:
989
+ raise ApiError(status_code=_response.status_code, body=_response.text)
990
+ raise ApiError(status_code=_response.status_code, body=_response_json)
991
+
992
+ async def cost_estimate(
993
+ self,
994
+ prompt_id: int,
995
+ version_id: int,
996
+ *,
997
+ project_id: int,
998
+ project_subset: int,
999
+ request_options: typing.Optional[RequestOptions] = None,
1000
+ ) -> InferenceRunCostEstimate:
1001
+ """
1002
+ Get cost estimate for running a prompt version on a particular project/subset
1003
+
1004
+ Parameters
1005
+ ----------
1006
+ prompt_id : int
1007
+ Prompt ID
1008
+
1009
+ version_id : int
1010
+ Prompt Version ID
1011
+
1012
+ project_id : int
1013
+ ID of the project to get an estimate for running on
1014
+
1015
+ project_subset : int
1016
+ Subset of the project to get an estimate for running on (e.g. 'All', 'Sample', or 'HasGT')
1017
+
1018
+ request_options : typing.Optional[RequestOptions]
1019
+ Request-specific configuration.
1020
+
1021
+ Returns
1022
+ -------
1023
+ InferenceRunCostEstimate
1024
+
1025
+
1026
+ Examples
1027
+ --------
1028
+ import asyncio
1029
+
1030
+ from label_studio_sdk import AsyncLabelStudio
1031
+
1032
+ client = AsyncLabelStudio(
1033
+ api_key="YOUR_API_KEY",
1034
+ )
1035
+
1036
+
1037
+ async def main() -> None:
1038
+ await client.prompts.versions.cost_estimate(
1039
+ prompt_id=1,
1040
+ version_id=1,
1041
+ project_id=1,
1042
+ project_subset=1,
1043
+ )
1044
+
1045
+
1046
+ asyncio.run(main())
1047
+ """
1048
+ _response = await self._client_wrapper.httpx_client.request(
1049
+ f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/cost-estimate",
1050
+ method="POST",
1051
+ params={
1052
+ "project_id": project_id,
1053
+ "project_subset": project_subset,
1054
+ },
1055
+ request_options=request_options,
1056
+ )
1057
+ try:
1058
+ if 200 <= _response.status_code < 300:
1059
+ return typing.cast(
1060
+ InferenceRunCostEstimate,
1061
+ parse_obj_as(
1062
+ type_=InferenceRunCostEstimate, # type: ignore
1063
+ object_=_response.json(),
1064
+ ),
1065
+ )
787
1066
  _response_json = _response.json()
788
1067
  except JSONDecodeError:
789
1068
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -821,26 +1100,42 @@ class AsyncVersionsClient:
821
1100
 
822
1101
  Examples
823
1102
  --------
824
- from label_studio_sdk.client import AsyncLabelStudio
1103
+ import asyncio
1104
+
1105
+ from label_studio_sdk import AsyncLabelStudio
825
1106
 
826
1107
  client = AsyncLabelStudio(
827
1108
  api_key="YOUR_API_KEY",
828
1109
  )
829
- await client.prompts.versions.get_refined_prompt(
830
- prompt_id=1,
831
- version_id=1,
832
- refinement_job_id="refinement_job_id",
833
- )
1110
+
1111
+
1112
+ async def main() -> None:
1113
+ await client.prompts.versions.get_refined_prompt(
1114
+ prompt_id=1,
1115
+ version_id=1,
1116
+ refinement_job_id="refinement_job_id",
1117
+ )
1118
+
1119
+
1120
+ asyncio.run(main())
834
1121
  """
835
1122
  _response = await self._client_wrapper.httpx_client.request(
836
1123
  f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/refine",
837
1124
  method="GET",
838
- params={"refinement_job_id": refinement_job_id},
1125
+ params={
1126
+ "refinement_job_id": refinement_job_id,
1127
+ },
839
1128
  request_options=request_options,
840
1129
  )
841
1130
  try:
842
1131
  if 200 <= _response.status_code < 300:
843
- return pydantic_v1.parse_obj_as(RefinedPromptResponse, _response.json()) # type: ignore
1132
+ return typing.cast(
1133
+ RefinedPromptResponse,
1134
+ parse_obj_as(
1135
+ type_=RefinedPromptResponse, # type: ignore
1136
+ object_=_response.json(),
1137
+ ),
1138
+ )
844
1139
  _response_json = _response.json()
845
1140
  except JSONDecodeError:
846
1141
  raise ApiError(status_code=_response.status_code, body=_response.text)
@@ -890,31 +1185,50 @@ class AsyncVersionsClient:
890
1185
 
891
1186
  Examples
892
1187
  --------
893
- from label_studio_sdk.client import AsyncLabelStudio
1188
+ import asyncio
1189
+
1190
+ from label_studio_sdk import AsyncLabelStudio
894
1191
 
895
1192
  client = AsyncLabelStudio(
896
1193
  api_key="YOUR_API_KEY",
897
1194
  )
898
- await client.prompts.versions.refine_prompt(
899
- prompt_id=1,
900
- version_id=1,
901
- )
1195
+
1196
+
1197
+ async def main() -> None:
1198
+ await client.prompts.versions.refine_prompt(
1199
+ prompt_id=1,
1200
+ version_id=1,
1201
+ )
1202
+
1203
+
1204
+ asyncio.run(main())
902
1205
  """
903
1206
  _response = await self._client_wrapper.httpx_client.request(
904
1207
  f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/refine",
905
1208
  method="POST",
906
- params={"async": async_},
1209
+ params={
1210
+ "async": async_,
1211
+ },
907
1212
  json={
908
1213
  "teacher_model_provider_connection_id": teacher_model_provider_connection_id,
909
1214
  "teacher_model_name": teacher_model_name,
910
1215
  "project_id": project_id,
911
1216
  },
1217
+ headers={
1218
+ "content-type": "application/json",
1219
+ },
912
1220
  request_options=request_options,
913
1221
  omit=OMIT,
914
1222
  )
915
1223
  try:
916
1224
  if 200 <= _response.status_code < 300:
917
- return pydantic_v1.parse_obj_as(RefinedPromptResponse, _response.json()) # type: ignore
1225
+ return typing.cast(
1226
+ RefinedPromptResponse,
1227
+ parse_obj_as(
1228
+ type_=RefinedPromptResponse, # type: ignore
1229
+ object_=_response.json(),
1230
+ ),
1231
+ )
918
1232
  _response_json = _response.json()
919
1233
  except JSONDecodeError:
920
1234
  raise ApiError(status_code=_response.status_code, body=_response.text)