label-studio-sdk 2.0.11__py3-none-any.whl → 2.0.12__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 (31) hide show
  1. label_studio_sdk/__init__.py +10 -0
  2. label_studio_sdk/projects/__init__.py +8 -1
  3. label_studio_sdk/projects/client.py +8 -0
  4. label_studio_sdk/projects/members/client.py +137 -30
  5. label_studio_sdk/projects/roles/__init__.py +2 -0
  6. label_studio_sdk/projects/roles/client.py +555 -0
  7. label_studio_sdk/projects/stats/__init__.py +6 -0
  8. label_studio_sdk/projects/stats/client.py +280 -0
  9. label_studio_sdk/projects/stats/types/__init__.py +8 -0
  10. label_studio_sdk/projects/stats/types/stats_agreement_annotators_response.py +22 -0
  11. label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response.py +27 -0
  12. label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response_agreement_value.py +5 -0
  13. label_studio_sdk/types/__init__.py +10 -0
  14. label_studio_sdk/types/all_roles_project_list.py +5 -1
  15. label_studio_sdk/types/lse_project.py +5 -1
  16. label_studio_sdk/types/lse_project_create.py +5 -1
  17. label_studio_sdk/types/lse_project_response.py +5 -1
  18. label_studio_sdk/types/lse_project_update.py +5 -1
  19. label_studio_sdk/types/project.py +198 -0
  20. label_studio_sdk/types/project_member.py +19 -0
  21. label_studio_sdk/types/project_role.py +35 -0
  22. label_studio_sdk/types/project_sampling.py +7 -0
  23. label_studio_sdk/types/project_skip_queue.py +7 -0
  24. label_studio_sdk/workspaces/__init__.py +2 -2
  25. label_studio_sdk/workspaces/client.py +4 -0
  26. label_studio_sdk/workspaces/projects/__init__.py +2 -0
  27. label_studio_sdk/workspaces/projects/client.py +352 -0
  28. {label_studio_sdk-2.0.11.dist-info → label_studio_sdk-2.0.12.dist-info}/METADATA +1 -1
  29. {label_studio_sdk-2.0.11.dist-info → label_studio_sdk-2.0.12.dist-info}/RECORD +31 -19
  30. {label_studio_sdk-2.0.11.dist-info → label_studio_sdk-2.0.12.dist-info}/LICENSE +0 -0
  31. {label_studio_sdk-2.0.11.dist-info → label_studio_sdk-2.0.12.dist-info}/WHEEL +0 -0
@@ -12,10 +12,12 @@ from .types.stats_model_version_ground_truth_agreement_response import StatsMode
12
12
  from .types.stats_model_version_prediction_agreement_response import StatsModelVersionPredictionAgreementResponse
13
13
  from .types.stats_iaa_response import StatsIaaResponse
14
14
  from .types.stats_agreement_annotator_response import StatsAgreementAnnotatorResponse
15
+ from .types.stats_agreement_annotators_response import StatsAgreementAnnotatorsResponse
15
16
  from .types.stats_data_filters_response import StatsDataFiltersResponse
16
17
  from .types.stats_finished_tasks_response import StatsFinishedTasksResponse
17
18
  from .types.stats_lead_time_response import StatsLeadTimeResponse
18
19
  from .types.stats_total_agreement_response import StatsTotalAgreementResponse
20
+ from .types.stats_users_prediction_agreement_response import StatsUsersPredictionAgreementResponse
19
21
  from .types.stats_user_prediction_agreement_response import StatsUserPredictionAgreementResponse
20
22
  from .types.stats_user_review_score_response import StatsUserReviewScoreResponse
21
23
  from .types.stats_user_ground_truth_agreement_response import StatsUserGroundTruthAgreementResponse
@@ -355,6 +357,67 @@ class StatsClient:
355
357
  raise ApiError(status_code=_response.status_code, body=_response.text)
356
358
  raise ApiError(status_code=_response.status_code, body=_response_json)
357
359
 
360
+ def agreement_annotators(
361
+ self, id: int, *, ids: str, request_options: typing.Optional[RequestOptions] = None
362
+ ) -> StatsAgreementAnnotatorsResponse:
363
+ """
364
+ <Card href="https://humansignal.com/goenterprise">
365
+ <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
366
+ <p style="margin-top: 10px; font-size: 14px;">
367
+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
368
+ </p>
369
+ </Card>
370
+ Get agreement statistics for multiple annotators within a project.
371
+
372
+ Parameters
373
+ ----------
374
+ id : int
375
+
376
+ ids : str
377
+ Comma separated list of annotator user IDs to get agreement scores for
378
+
379
+ request_options : typing.Optional[RequestOptions]
380
+ Request-specific configuration.
381
+
382
+ Returns
383
+ -------
384
+ StatsAgreementAnnotatorsResponse
385
+ Multiple annotator agreement statistics
386
+
387
+ Examples
388
+ --------
389
+ from label_studio_sdk import LabelStudio
390
+
391
+ client = LabelStudio(
392
+ api_key="YOUR_API_KEY",
393
+ )
394
+ client.projects.stats.agreement_annotators(
395
+ id=1,
396
+ ids="ids",
397
+ )
398
+ """
399
+ _response = self._client_wrapper.httpx_client.request(
400
+ f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotators",
401
+ method="GET",
402
+ params={
403
+ "ids": ids,
404
+ },
405
+ request_options=request_options,
406
+ )
407
+ try:
408
+ if 200 <= _response.status_code < 300:
409
+ return typing.cast(
410
+ StatsAgreementAnnotatorsResponse,
411
+ construct_type(
412
+ type_=StatsAgreementAnnotatorsResponse, # type: ignore
413
+ object_=_response.json(),
414
+ ),
415
+ )
416
+ _response_json = _response.json()
417
+ except JSONDecodeError:
418
+ raise ApiError(status_code=_response.status_code, body=_response.text)
419
+ raise ApiError(status_code=_response.status_code, body=_response_json)
420
+
358
421
  def data_filters(
359
422
  self, id: int, *, request_options: typing.Optional[RequestOptions] = None
360
423
  ) -> StatsDataFiltersResponse:
@@ -627,6 +690,76 @@ class StatsClient:
627
690
  raise ApiError(status_code=_response.status_code, body=_response.text)
628
691
  raise ApiError(status_code=_response.status_code, body=_response_json)
629
692
 
693
+ def users_prediction_agreement(
694
+ self,
695
+ id: int,
696
+ *,
697
+ ids: str,
698
+ per_label: typing.Optional[bool] = None,
699
+ request_options: typing.Optional[RequestOptions] = None,
700
+ ) -> StatsUsersPredictionAgreementResponse:
701
+ """
702
+ <Card href="https://humansignal.com/goenterprise">
703
+ <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
704
+ <p style="margin-top: 10px; font-size: 14px;">
705
+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
706
+ </p>
707
+ </Card>
708
+ Get prediction agreement statistics for multiple annotators within a project.
709
+
710
+ Parameters
711
+ ----------
712
+ id : int
713
+
714
+ ids : str
715
+ Comma separated list of annotator user IDs to get agreement scores for
716
+
717
+ per_label : typing.Optional[bool]
718
+ Per label
719
+
720
+ request_options : typing.Optional[RequestOptions]
721
+ Request-specific configuration.
722
+
723
+ Returns
724
+ -------
725
+ StatsUsersPredictionAgreementResponse
726
+ Prediction agreement statistics for multiple annotators
727
+
728
+ Examples
729
+ --------
730
+ from label_studio_sdk import LabelStudio
731
+
732
+ client = LabelStudio(
733
+ api_key="YOUR_API_KEY",
734
+ )
735
+ client.projects.stats.users_prediction_agreement(
736
+ id=1,
737
+ ids="ids",
738
+ )
739
+ """
740
+ _response = self._client_wrapper.httpx_client.request(
741
+ f"api/projects/{jsonable_encoder(id)}/user-stats/prediction",
742
+ method="GET",
743
+ params={
744
+ "ids": ids,
745
+ "per_label": per_label,
746
+ },
747
+ request_options=request_options,
748
+ )
749
+ try:
750
+ if 200 <= _response.status_code < 300:
751
+ return typing.cast(
752
+ StatsUsersPredictionAgreementResponse,
753
+ construct_type(
754
+ type_=StatsUsersPredictionAgreementResponse, # type: ignore
755
+ object_=_response.json(),
756
+ ),
757
+ )
758
+ _response_json = _response.json()
759
+ except JSONDecodeError:
760
+ raise ApiError(status_code=_response.status_code, body=_response.text)
761
+ raise ApiError(status_code=_response.status_code, body=_response_json)
762
+
630
763
  def user_prediction_agreement(
631
764
  self,
632
765
  id: int,
@@ -1205,6 +1338,75 @@ class AsyncStatsClient:
1205
1338
  raise ApiError(status_code=_response.status_code, body=_response.text)
1206
1339
  raise ApiError(status_code=_response.status_code, body=_response_json)
1207
1340
 
1341
+ async def agreement_annotators(
1342
+ self, id: int, *, ids: str, request_options: typing.Optional[RequestOptions] = None
1343
+ ) -> StatsAgreementAnnotatorsResponse:
1344
+ """
1345
+ <Card href="https://humansignal.com/goenterprise">
1346
+ <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
1347
+ <p style="margin-top: 10px; font-size: 14px;">
1348
+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
1349
+ </p>
1350
+ </Card>
1351
+ Get agreement statistics for multiple annotators within a project.
1352
+
1353
+ Parameters
1354
+ ----------
1355
+ id : int
1356
+
1357
+ ids : str
1358
+ Comma separated list of annotator user IDs to get agreement scores for
1359
+
1360
+ request_options : typing.Optional[RequestOptions]
1361
+ Request-specific configuration.
1362
+
1363
+ Returns
1364
+ -------
1365
+ StatsAgreementAnnotatorsResponse
1366
+ Multiple annotator agreement statistics
1367
+
1368
+ Examples
1369
+ --------
1370
+ import asyncio
1371
+
1372
+ from label_studio_sdk import AsyncLabelStudio
1373
+
1374
+ client = AsyncLabelStudio(
1375
+ api_key="YOUR_API_KEY",
1376
+ )
1377
+
1378
+
1379
+ async def main() -> None:
1380
+ await client.projects.stats.agreement_annotators(
1381
+ id=1,
1382
+ ids="ids",
1383
+ )
1384
+
1385
+
1386
+ asyncio.run(main())
1387
+ """
1388
+ _response = await self._client_wrapper.httpx_client.request(
1389
+ f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotators",
1390
+ method="GET",
1391
+ params={
1392
+ "ids": ids,
1393
+ },
1394
+ request_options=request_options,
1395
+ )
1396
+ try:
1397
+ if 200 <= _response.status_code < 300:
1398
+ return typing.cast(
1399
+ StatsAgreementAnnotatorsResponse,
1400
+ construct_type(
1401
+ type_=StatsAgreementAnnotatorsResponse, # type: ignore
1402
+ object_=_response.json(),
1403
+ ),
1404
+ )
1405
+ _response_json = _response.json()
1406
+ except JSONDecodeError:
1407
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1408
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1409
+
1208
1410
  async def data_filters(
1209
1411
  self, id: int, *, request_options: typing.Optional[RequestOptions] = None
1210
1412
  ) -> StatsDataFiltersResponse:
@@ -1519,6 +1721,84 @@ class AsyncStatsClient:
1519
1721
  raise ApiError(status_code=_response.status_code, body=_response.text)
1520
1722
  raise ApiError(status_code=_response.status_code, body=_response_json)
1521
1723
 
1724
+ async def users_prediction_agreement(
1725
+ self,
1726
+ id: int,
1727
+ *,
1728
+ ids: str,
1729
+ per_label: typing.Optional[bool] = None,
1730
+ request_options: typing.Optional[RequestOptions] = None,
1731
+ ) -> StatsUsersPredictionAgreementResponse:
1732
+ """
1733
+ <Card href="https://humansignal.com/goenterprise">
1734
+ <img style="pointer-events: none; margin-left: 0px; margin-right: 0px;" src="https://docs.humansignal.com/images/badge.svg" alt="Label Studio Enterprise badge"/>
1735
+ <p style="margin-top: 10px; font-size: 14px;">
1736
+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)
1737
+ </p>
1738
+ </Card>
1739
+ Get prediction agreement statistics for multiple annotators within a project.
1740
+
1741
+ Parameters
1742
+ ----------
1743
+ id : int
1744
+
1745
+ ids : str
1746
+ Comma separated list of annotator user IDs to get agreement scores for
1747
+
1748
+ per_label : typing.Optional[bool]
1749
+ Per label
1750
+
1751
+ request_options : typing.Optional[RequestOptions]
1752
+ Request-specific configuration.
1753
+
1754
+ Returns
1755
+ -------
1756
+ StatsUsersPredictionAgreementResponse
1757
+ Prediction agreement statistics for multiple annotators
1758
+
1759
+ Examples
1760
+ --------
1761
+ import asyncio
1762
+
1763
+ from label_studio_sdk import AsyncLabelStudio
1764
+
1765
+ client = AsyncLabelStudio(
1766
+ api_key="YOUR_API_KEY",
1767
+ )
1768
+
1769
+
1770
+ async def main() -> None:
1771
+ await client.projects.stats.users_prediction_agreement(
1772
+ id=1,
1773
+ ids="ids",
1774
+ )
1775
+
1776
+
1777
+ asyncio.run(main())
1778
+ """
1779
+ _response = await self._client_wrapper.httpx_client.request(
1780
+ f"api/projects/{jsonable_encoder(id)}/user-stats/prediction",
1781
+ method="GET",
1782
+ params={
1783
+ "ids": ids,
1784
+ "per_label": per_label,
1785
+ },
1786
+ request_options=request_options,
1787
+ )
1788
+ try:
1789
+ if 200 <= _response.status_code < 300:
1790
+ return typing.cast(
1791
+ StatsUsersPredictionAgreementResponse,
1792
+ construct_type(
1793
+ type_=StatsUsersPredictionAgreementResponse, # type: ignore
1794
+ object_=_response.json(),
1795
+ ),
1796
+ )
1797
+ _response_json = _response.json()
1798
+ except JSONDecodeError:
1799
+ raise ApiError(status_code=_response.status_code, body=_response.text)
1800
+ raise ApiError(status_code=_response.status_code, body=_response_json)
1801
+
1522
1802
  async def user_prediction_agreement(
1523
1803
  self,
1524
1804
  id: int,
@@ -1,6 +1,7 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
3
  from .stats_agreement_annotator_response import StatsAgreementAnnotatorResponse
4
+ from .stats_agreement_annotators_response import StatsAgreementAnnotatorsResponse
4
5
  from .stats_data_filters_response import StatsDataFiltersResponse
5
6
  from .stats_data_filters_response_user_filters import StatsDataFiltersResponseUserFilters
6
7
  from .stats_data_filters_response_user_filters_stats_item import StatsDataFiltersResponseUserFiltersStatsItem
@@ -26,9 +27,14 @@ from .stats_user_prediction_agreement_response_average_prediction_agreement_per_
26
27
  from .stats_user_review_score_response import StatsUserReviewScoreResponse
27
28
  from .stats_user_review_score_response_performance_score import StatsUserReviewScoreResponsePerformanceScore
28
29
  from .stats_user_review_score_response_review_score import StatsUserReviewScoreResponseReviewScore
30
+ from .stats_users_prediction_agreement_response import StatsUsersPredictionAgreementResponse
31
+ from .stats_users_prediction_agreement_response_agreement_value import (
32
+ StatsUsersPredictionAgreementResponseAgreementValue,
33
+ )
29
34
 
30
35
  __all__ = [
31
36
  "StatsAgreementAnnotatorResponse",
37
+ "StatsAgreementAnnotatorsResponse",
32
38
  "StatsDataFiltersResponse",
33
39
  "StatsDataFiltersResponseUserFilters",
34
40
  "StatsDataFiltersResponseUserFiltersStatsItem",
@@ -52,4 +58,6 @@ __all__ = [
52
58
  "StatsUserReviewScoreResponse",
53
59
  "StatsUserReviewScoreResponsePerformanceScore",
54
60
  "StatsUserReviewScoreResponseReviewScore",
61
+ "StatsUsersPredictionAgreementResponse",
62
+ "StatsUsersPredictionAgreementResponseAgreementValue",
55
63
  ]
@@ -0,0 +1,22 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ....core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ import pydantic
6
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2
7
+
8
+
9
+ class StatsAgreementAnnotatorsResponse(UncheckedBaseModel):
10
+ agreement: typing.Dict[str, float] = pydantic.Field()
11
+ """
12
+ Mapping of annotator ID to their agreement score (0-1) or null if no data
13
+ """
14
+
15
+ if IS_PYDANTIC_V2:
16
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
17
+ else:
18
+
19
+ class Config:
20
+ frozen = True
21
+ smart_union = True
22
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ....core.unchecked_base_model import UncheckedBaseModel
4
+ import typing
5
+ from .stats_users_prediction_agreement_response_agreement_value import (
6
+ StatsUsersPredictionAgreementResponseAgreementValue,
7
+ )
8
+ import pydantic
9
+ from ....core.pydantic_utilities import IS_PYDANTIC_V2
10
+
11
+
12
+ class StatsUsersPredictionAgreementResponse(UncheckedBaseModel):
13
+ agreement: typing.Optional[typing.Dict[str, StatsUsersPredictionAgreementResponseAgreementValue]] = pydantic.Field(
14
+ default=None
15
+ )
16
+ """
17
+ Dictionary mapping user IDs to their prediction agreement scores
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ StatsUsersPredictionAgreementResponseAgreementValue = typing.Union[float, typing.Dict[str, float]]
@@ -163,13 +163,18 @@ from .pause import Pause
163
163
  from .pause_request import PauseRequest
164
164
  from .prediction import Prediction
165
165
  from .prediction_request import PredictionRequest
166
+ from .project import Project
166
167
  from .project_group import ProjectGroup
167
168
  from .project_group_request import ProjectGroupRequest
168
169
  from .project_group_role_enum import ProjectGroupRoleEnum
169
170
  from .project_import import ProjectImport
170
171
  from .project_label_config import ProjectLabelConfig
171
172
  from .project_label_config_request import ProjectLabelConfigRequest
173
+ from .project_member import ProjectMember
172
174
  from .project_member_bulk_assign_roles_request import ProjectMemberBulkAssignRolesRequest
175
+ from .project_role import ProjectRole
176
+ from .project_sampling import ProjectSampling
177
+ from .project_skip_queue import ProjectSkipQueue
173
178
  from .project_subset_enum import ProjectSubsetEnum
174
179
  from .project_subset_item import ProjectSubsetItem
175
180
  from .project_subset_task_item import ProjectSubsetTaskItem
@@ -400,13 +405,18 @@ __all__ = [
400
405
  "PauseRequest",
401
406
  "Prediction",
402
407
  "PredictionRequest",
408
+ "Project",
403
409
  "ProjectGroup",
404
410
  "ProjectGroupRequest",
405
411
  "ProjectGroupRoleEnum",
406
412
  "ProjectImport",
407
413
  "ProjectLabelConfig",
408
414
  "ProjectLabelConfigRequest",
415
+ "ProjectMember",
409
416
  "ProjectMemberBulkAssignRolesRequest",
417
+ "ProjectRole",
418
+ "ProjectSampling",
419
+ "ProjectSkipQueue",
410
420
  "ProjectSubsetEnum",
411
421
  "ProjectSubsetItem",
412
422
  "ProjectSubsetTaskItem",
@@ -151,7 +151,11 @@ class AllRolesProjectList(UncheckedBaseModel):
151
151
  If set, the annotator can view model predictions
152
152
  """
153
153
 
154
- show_ground_truth_first: typing.Optional[bool] = None
154
+ show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None)
155
+ """
156
+ Onboarding mode (true): show ground truth tasks first in the labeling stream
157
+ """
158
+
155
159
  show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
156
160
  """
157
161
  Show instructions to the annotator before they start
@@ -151,7 +151,11 @@ class LseProject(UncheckedBaseModel):
151
151
  If set, the annotator can view model predictions
152
152
  """
153
153
 
154
- show_ground_truth_first: typing.Optional[bool] = None
154
+ show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None)
155
+ """
156
+ Onboarding mode (true): show ground truth tasks first in the labeling stream
157
+ """
158
+
155
159
  show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
156
160
  """
157
161
  Show instructions to the annotator before they start
@@ -126,7 +126,11 @@ class LseProjectCreate(UncheckedBaseModel):
126
126
  If set, the annotator can view model predictions
127
127
  """
128
128
 
129
- show_ground_truth_first: typing.Optional[bool] = None
129
+ show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None)
130
+ """
131
+ Onboarding mode (true): show ground truth tasks first in the labeling stream
132
+ """
133
+
130
134
  show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
131
135
  """
132
136
  Show instructions to the annotator before they start
@@ -151,7 +151,11 @@ class LseProjectResponse(UncheckedBaseModel):
151
151
  If set, the annotator can view model predictions
152
152
  """
153
153
 
154
- show_ground_truth_first: typing.Optional[bool] = None
154
+ show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None)
155
+ """
156
+ Onboarding mode (true): show ground truth tasks first in the labeling stream
157
+ """
158
+
155
159
  show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
156
160
  """
157
161
  Show instructions to the annotator before they start
@@ -144,7 +144,11 @@ class LseProjectUpdate(UncheckedBaseModel):
144
144
  If set, the annotator can view model predictions
145
145
  """
146
146
 
147
- show_ground_truth_first: typing.Optional[bool] = None
147
+ show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None)
148
+ """
149
+ Onboarding mode (true): show ground truth tasks first in the labeling stream
150
+ """
151
+
148
152
  show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
149
153
  """
150
154
  Show instructions to the annotator before they start