label-studio-sdk 1.0.8__py3-none-any.whl → 1.0.11__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.
- label_studio_sdk/__init__.py +37 -8
- label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +16 -4
- label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +5 -0
- label_studio_sdk/_extensions/pager_ext.py +8 -0
- label_studio_sdk/actions/client.py +91 -40
- label_studio_sdk/actions/types/actions_create_request_filters.py +14 -24
- label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +16 -26
- label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +3 -1
- label_studio_sdk/actions/types/actions_create_request_selected_items.py +1 -2
- label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +15 -25
- label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +15 -25
- label_studio_sdk/annotations/__init__.py +2 -2
- label_studio_sdk/annotations/client.py +278 -104
- label_studio_sdk/annotations/types/__init__.py +2 -1
- label_studio_sdk/annotations/types/annotations_create_bulk_request_selected_items.py +34 -0
- label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +11 -21
- label_studio_sdk/base_client.py +54 -27
- label_studio_sdk/client.py +1 -0
- label_studio_sdk/comments/client.py +190 -44
- label_studio_sdk/converter/converter.py +56 -13
- label_studio_sdk/converter/imports/yolo.py +1 -1
- label_studio_sdk/converter/utils.py +3 -2
- label_studio_sdk/core/__init__.py +21 -4
- label_studio_sdk/core/client_wrapper.py +37 -19
- label_studio_sdk/core/file.py +37 -8
- label_studio_sdk/core/http_client.py +52 -28
- label_studio_sdk/core/jsonable_encoder.py +33 -31
- label_studio_sdk/core/pagination.py +5 -4
- label_studio_sdk/core/pydantic_utilities.py +272 -4
- label_studio_sdk/core/query_encoder.py +38 -13
- label_studio_sdk/core/request_options.py +3 -0
- label_studio_sdk/core/serialization.py +272 -0
- label_studio_sdk/errors/__init__.py +3 -1
- label_studio_sdk/errors/bad_request_error.py +2 -3
- label_studio_sdk/errors/not_found_error.py +9 -0
- label_studio_sdk/errors/unauthorized_error.py +9 -0
- label_studio_sdk/export_storage/azure/client.py +228 -58
- label_studio_sdk/export_storage/azure/types/azure_create_response.py +19 -29
- label_studio_sdk/export_storage/azure/types/azure_update_response.py +19 -29
- label_studio_sdk/export_storage/client.py +48 -18
- label_studio_sdk/export_storage/gcs/client.py +228 -58
- label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +19 -29
- label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +19 -29
- label_studio_sdk/export_storage/local/client.py +222 -56
- label_studio_sdk/export_storage/local/types/local_create_response.py +17 -27
- label_studio_sdk/export_storage/local/types/local_update_response.py +17 -27
- label_studio_sdk/export_storage/redis/client.py +228 -58
- label_studio_sdk/export_storage/redis/types/redis_create_response.py +20 -30
- label_studio_sdk/export_storage/redis/types/redis_update_response.py +20 -30
- label_studio_sdk/export_storage/s3/client.py +228 -58
- label_studio_sdk/export_storage/s3/types/s3create_response.py +27 -35
- label_studio_sdk/export_storage/s3/types/s3update_response.py +27 -35
- label_studio_sdk/export_storage/s3s/client.py +187 -43
- label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +11 -21
- label_studio_sdk/files/client.py +172 -56
- label_studio_sdk/import_storage/azure/client.py +223 -53
- label_studio_sdk/import_storage/azure/types/azure_create_response.py +22 -32
- label_studio_sdk/import_storage/azure/types/azure_update_response.py +22 -32
- label_studio_sdk/import_storage/client.py +48 -18
- label_studio_sdk/import_storage/gcs/client.py +223 -53
- label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +22 -32
- label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +22 -32
- label_studio_sdk/import_storage/local/client.py +223 -53
- label_studio_sdk/import_storage/local/types/local_create_response.py +17 -27
- label_studio_sdk/import_storage/local/types/local_update_response.py +17 -27
- label_studio_sdk/import_storage/redis/client.py +223 -53
- label_studio_sdk/import_storage/redis/types/redis_create_response.py +20 -30
- label_studio_sdk/import_storage/redis/types/redis_update_response.py +20 -30
- label_studio_sdk/import_storage/s3/client.py +223 -53
- label_studio_sdk/import_storage/s3/types/s3create_response.py +31 -39
- label_studio_sdk/import_storage/s3/types/s3update_response.py +31 -39
- label_studio_sdk/import_storage/s3s/client.py +222 -52
- label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +11 -21
- label_studio_sdk/jwt_settings/__init__.py +2 -0
- label_studio_sdk/jwt_settings/client.py +259 -0
- label_studio_sdk/label_interface/control_tags.py +16 -3
- label_studio_sdk/label_interface/interface.py +80 -1
- label_studio_sdk/label_interface/object_tags.py +2 -2
- label_studio_sdk/ml/client.py +280 -78
- label_studio_sdk/ml/types/ml_create_response.py +21 -31
- label_studio_sdk/ml/types/ml_update_response.py +21 -31
- label_studio_sdk/model_providers/client.py +173 -56
- label_studio_sdk/predictions/client.py +247 -101
- label_studio_sdk/projects/__init__.py +5 -1
- label_studio_sdk/projects/client.py +313 -115
- label_studio_sdk/projects/client_ext.py +16 -0
- label_studio_sdk/projects/exports/__init__.py +3 -0
- label_studio_sdk/projects/exports/client.py +447 -296
- label_studio_sdk/projects/exports/client_ext.py +200 -0
- label_studio_sdk/projects/exports/types/__init__.py +6 -0
- label_studio_sdk/projects/exports/types/exports_convert_response.py +24 -0
- label_studio_sdk/projects/exports/types/exports_list_formats_response_item.py +44 -0
- label_studio_sdk/projects/pauses/__init__.py +2 -0
- label_studio_sdk/projects/pauses/client.py +704 -0
- label_studio_sdk/projects/types/projects_create_response.py +29 -34
- label_studio_sdk/projects/types/projects_import_tasks_response.py +19 -29
- label_studio_sdk/projects/types/projects_list_response.py +11 -21
- label_studio_sdk/projects/types/projects_update_response.py +34 -34
- label_studio_sdk/prompts/client.py +309 -92
- label_studio_sdk/prompts/indicators/client.py +67 -23
- label_studio_sdk/prompts/runs/client.py +95 -40
- label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +14 -24
- label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +11 -21
- label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +26 -29
- label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +11 -21
- label_studio_sdk/prompts/versions/client.py +277 -88
- label_studio_sdk/tasks/client.py +263 -90
- label_studio_sdk/tasks/types/tasks_list_response.py +15 -25
- label_studio_sdk/tokens/__init__.py +2 -0
- label_studio_sdk/tokens/client.py +470 -0
- label_studio_sdk/tokens/client_ext.py +94 -0
- label_studio_sdk/types/__init__.py +20 -6
- label_studio_sdk/types/access_token_response.py +22 -0
- label_studio_sdk/types/annotation.py +29 -38
- label_studio_sdk/types/annotation_filter_options.py +14 -24
- label_studio_sdk/types/annotations_dm_field.py +30 -39
- label_studio_sdk/types/api_token_response.py +32 -0
- label_studio_sdk/types/azure_blob_export_storage.py +28 -37
- label_studio_sdk/types/azure_blob_import_storage.py +28 -37
- label_studio_sdk/types/base_task.py +30 -39
- label_studio_sdk/types/base_task_updated_by.py +3 -1
- label_studio_sdk/types/base_user.py +14 -21
- label_studio_sdk/types/comment.py +12 -21
- label_studio_sdk/types/comment_created_by.py +1 -1
- label_studio_sdk/types/converted_format.py +12 -22
- label_studio_sdk/types/data_manager_task_serializer.py +31 -40
- label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +1 -1
- label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +13 -22
- label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +15 -24
- label_studio_sdk/types/export.py +17 -26
- label_studio_sdk/types/export_format.py +25 -0
- label_studio_sdk/types/export_snapshot.py +45 -0
- label_studio_sdk/types/export_snapshot_status.py +5 -0
- label_studio_sdk/types/file_upload.py +11 -21
- label_studio_sdk/types/filter.py +16 -26
- label_studio_sdk/types/filter_group.py +12 -22
- label_studio_sdk/types/gcs_export_storage.py +28 -37
- label_studio_sdk/types/gcs_import_storage.py +28 -37
- label_studio_sdk/types/inference_run.py +14 -23
- label_studio_sdk/types/inference_run_cost_estimate.py +17 -27
- label_studio_sdk/types/inference_run_created_by.py +1 -1
- label_studio_sdk/types/inference_run_organization.py +1 -1
- label_studio_sdk/types/jwt_settings_response.py +32 -0
- label_studio_sdk/types/key_indicator_value.py +12 -22
- label_studio_sdk/types/key_indicators.py +0 -1
- label_studio_sdk/types/key_indicators_item.py +15 -25
- label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +13 -23
- label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +13 -23
- label_studio_sdk/types/local_files_export_storage.py +25 -34
- label_studio_sdk/types/local_files_import_storage.py +24 -33
- label_studio_sdk/types/ml_backend.py +23 -32
- label_studio_sdk/types/model_provider_connection.py +22 -31
- label_studio_sdk/types/model_provider_connection_created_by.py +1 -1
- label_studio_sdk/types/model_provider_connection_organization.py +1 -1
- label_studio_sdk/types/model_provider_connection_provider.py +3 -1
- label_studio_sdk/types/pause.py +34 -0
- label_studio_sdk/types/pause_paused_by.py +5 -0
- label_studio_sdk/types/prediction.py +21 -30
- label_studio_sdk/types/project.py +58 -55
- label_studio_sdk/types/project_import.py +21 -30
- label_studio_sdk/types/project_label_config.py +12 -22
- label_studio_sdk/types/prompt.py +24 -32
- label_studio_sdk/types/prompt_associated_projects_item.py +6 -0
- label_studio_sdk/types/prompt_associated_projects_item_id.py +20 -0
- label_studio_sdk/types/prompt_created_by.py +1 -1
- label_studio_sdk/types/prompt_organization.py +1 -1
- label_studio_sdk/types/prompt_version.py +13 -22
- label_studio_sdk/types/prompt_version_created_by.py +1 -1
- label_studio_sdk/types/prompt_version_organization.py +1 -1
- label_studio_sdk/types/prompt_version_provider.py +3 -1
- label_studio_sdk/types/redis_export_storage.py +29 -38
- label_studio_sdk/types/redis_import_storage.py +28 -37
- label_studio_sdk/types/refined_prompt_response.py +19 -29
- label_studio_sdk/types/s3export_storage.py +36 -43
- label_studio_sdk/types/s3import_storage.py +37 -44
- label_studio_sdk/types/s3s_export_storage.py +26 -33
- label_studio_sdk/types/s3s_import_storage.py +35 -42
- label_studio_sdk/types/serialization_option.py +12 -22
- label_studio_sdk/types/serialization_options.py +18 -28
- label_studio_sdk/types/task.py +44 -47
- label_studio_sdk/types/task_annotators_item.py +1 -1
- label_studio_sdk/types/task_comment_authors_item.py +1 -1
- label_studio_sdk/types/task_filter_options.py +15 -25
- label_studio_sdk/types/user_simple.py +11 -21
- label_studio_sdk/types/view.py +16 -26
- label_studio_sdk/types/webhook.py +19 -28
- label_studio_sdk/types/webhook_serializer_for_update.py +19 -28
- label_studio_sdk/types/workspace.py +22 -31
- label_studio_sdk/users/client.py +257 -63
- label_studio_sdk/users/types/users_get_token_response.py +12 -22
- label_studio_sdk/users/types/users_reset_token_response.py +12 -22
- label_studio_sdk/version.py +0 -1
- label_studio_sdk/versions/__init__.py +5 -0
- label_studio_sdk/versions/client.py +112 -0
- label_studio_sdk/versions/types/__init__.py +6 -0
- label_studio_sdk/versions/types/versions_get_response.py +73 -0
- label_studio_sdk/versions/types/versions_get_response_edition.py +5 -0
- label_studio_sdk/views/client.py +219 -52
- label_studio_sdk/views/types/views_create_request_data.py +13 -23
- label_studio_sdk/views/types/views_create_request_data_filters.py +14 -24
- label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +16 -26
- label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +3 -1
- label_studio_sdk/views/types/views_update_request_data.py +13 -23
- label_studio_sdk/views/types/views_update_request_data_filters.py +14 -24
- label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +16 -26
- label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +3 -1
- label_studio_sdk/webhooks/client.py +191 -61
- label_studio_sdk/workspaces/client.py +164 -41
- label_studio_sdk/workspaces/members/client.py +109 -31
- label_studio_sdk/workspaces/members/types/members_create_response.py +12 -22
- label_studio_sdk/workspaces/members/types/members_list_response_item.py +12 -22
- {label_studio_sdk-1.0.8.dist-info → label_studio_sdk-1.0.11.dist-info}/METADATA +8 -5
- {label_studio_sdk-1.0.8.dist-info → label_studio_sdk-1.0.11.dist-info}/RECORD +215 -188
- {label_studio_sdk-1.0.8.dist-info → label_studio_sdk-1.0.11.dist-info}/WHEEL +1 -1
- label_studio_sdk/types/export_convert.py +0 -32
- label_studio_sdk/types/export_create.py +0 -54
- label_studio_sdk/types/export_create_status.py +0 -5
- {label_studio_sdk-1.0.8.dist-info → label_studio_sdk-1.0.11.dist-info}/LICENSE +0 -0
|
@@ -1,89 +1,80 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
|
4
4
|
import typing
|
|
5
|
-
|
|
6
|
-
from ..core.datetime_utils import serialize_datetime
|
|
7
|
-
from ..core.pydantic_utilities import deep_union_pydantic_dicts, pydantic_v1
|
|
8
|
-
from .ml_backend_auth_method import MlBackendAuthMethod
|
|
9
5
|
from .ml_backend_state import MlBackendState
|
|
6
|
+
import pydantic
|
|
7
|
+
from .ml_backend_auth_method import MlBackendAuthMethod
|
|
8
|
+
import datetime as dt
|
|
9
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class MlBackend(
|
|
12
|
+
class MlBackend(UniversalBaseModel):
|
|
13
13
|
id: typing.Optional[int] = None
|
|
14
14
|
state: typing.Optional[MlBackendState] = None
|
|
15
15
|
readable_state: typing.Optional[str] = None
|
|
16
|
-
is_interactive: typing.Optional[bool] =
|
|
16
|
+
is_interactive: typing.Optional[bool] = pydantic.Field(default=None)
|
|
17
17
|
"""
|
|
18
18
|
Used to interactively annotate tasks. If true, model returns one list with results
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
url: str =
|
|
21
|
+
url: str = pydantic.Field()
|
|
22
22
|
"""
|
|
23
23
|
URL for the machine learning model server
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
error_message: typing.Optional[str] =
|
|
26
|
+
error_message: typing.Optional[str] = pydantic.Field(default=None)
|
|
27
27
|
"""
|
|
28
28
|
Error message in error state
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
title: typing.Optional[str] =
|
|
31
|
+
title: typing.Optional[str] = pydantic.Field(default=None)
|
|
32
32
|
"""
|
|
33
33
|
Name of the machine learning backend
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
36
|
auth_method: typing.Optional[MlBackendAuthMethod] = None
|
|
37
|
-
basic_auth_user: typing.Optional[str] =
|
|
37
|
+
basic_auth_user: typing.Optional[str] = pydantic.Field(default=None)
|
|
38
38
|
"""
|
|
39
39
|
HTTP Basic Auth user
|
|
40
40
|
"""
|
|
41
41
|
|
|
42
42
|
basic_auth_pass: typing.Optional[str] = None
|
|
43
43
|
basic_auth_pass_is_set: typing.Optional[str] = None
|
|
44
|
-
description: typing.Optional[str] =
|
|
44
|
+
description: typing.Optional[str] = pydantic.Field(default=None)
|
|
45
45
|
"""
|
|
46
46
|
Description for the machine learning backend
|
|
47
47
|
"""
|
|
48
48
|
|
|
49
|
-
extra_params: typing.Optional[typing.Dict[str, typing.Any]] =
|
|
49
|
+
extra_params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
|
|
50
50
|
"""
|
|
51
51
|
Any extra parameters passed to the ML Backend during the setup
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
|
-
model_version: typing.Optional[str] =
|
|
54
|
+
model_version: typing.Optional[str] = pydantic.Field(default=None)
|
|
55
55
|
"""
|
|
56
56
|
Current model version associated with this machine learning backend
|
|
57
57
|
"""
|
|
58
58
|
|
|
59
|
-
timeout: typing.Optional[float] =
|
|
59
|
+
timeout: typing.Optional[float] = pydantic.Field(default=None)
|
|
60
60
|
"""
|
|
61
61
|
Response model timeout
|
|
62
62
|
"""
|
|
63
63
|
|
|
64
64
|
created_at: typing.Optional[dt.datetime] = None
|
|
65
65
|
updated_at: typing.Optional[dt.datetime] = None
|
|
66
|
-
auto_update: typing.Optional[bool] =
|
|
66
|
+
auto_update: typing.Optional[bool] = pydantic.Field(default=None)
|
|
67
67
|
"""
|
|
68
68
|
If false, model version is set by the user, if true - getting latest version from backend.
|
|
69
69
|
"""
|
|
70
70
|
|
|
71
71
|
project: int
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
|
|
78
|
-
kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
|
|
79
|
-
kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs}
|
|
80
|
-
|
|
81
|
-
return deep_union_pydantic_dicts(
|
|
82
|
-
super().dict(**kwargs_with_defaults_exclude_unset), super().dict(**kwargs_with_defaults_exclude_none)
|
|
83
|
-
)
|
|
73
|
+
if IS_PYDANTIC_V2:
|
|
74
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
75
|
+
else:
|
|
84
76
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
json_encoders = {dt.datetime: serialize_datetime}
|
|
77
|
+
class Config:
|
|
78
|
+
frozen = True
|
|
79
|
+
smart_union = True
|
|
80
|
+
extra = pydantic.Extra.allow
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import typing
|
|
5
|
-
|
|
6
|
-
from ..core.datetime_utils import serialize_datetime
|
|
7
|
-
from ..core.pydantic_utilities import deep_union_pydantic_dicts, pydantic_v1
|
|
8
|
-
from .model_provider_connection_budget_reset_period import ModelProviderConnectionBudgetResetPeriod
|
|
9
|
-
from .model_provider_connection_created_by import ModelProviderConnectionCreatedBy
|
|
10
|
-
from .model_provider_connection_organization import ModelProviderConnectionOrganization
|
|
3
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
|
11
4
|
from .model_provider_connection_provider import ModelProviderConnectionProvider
|
|
5
|
+
import typing
|
|
12
6
|
from .model_provider_connection_scope import ModelProviderConnectionScope
|
|
7
|
+
from .model_provider_connection_organization import ModelProviderConnectionOrganization
|
|
8
|
+
from .model_provider_connection_created_by import ModelProviderConnectionCreatedBy
|
|
9
|
+
import datetime as dt
|
|
10
|
+
import pydantic
|
|
11
|
+
from .model_provider_connection_budget_reset_period import ModelProviderConnectionBudgetResetPeriod
|
|
12
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
class ModelProviderConnection(
|
|
15
|
+
class ModelProviderConnection(UniversalBaseModel):
|
|
16
16
|
provider: ModelProviderConnectionProvider
|
|
17
17
|
api_key: typing.Optional[str] = None
|
|
18
18
|
deployment_name: typing.Optional[str] = None
|
|
@@ -22,50 +22,41 @@ class ModelProviderConnection(pydantic_v1.BaseModel):
|
|
|
22
22
|
created_by: typing.Optional[ModelProviderConnectionCreatedBy] = None
|
|
23
23
|
created_at: typing.Optional[dt.datetime] = None
|
|
24
24
|
updated_at: typing.Optional[dt.datetime] = None
|
|
25
|
-
is_internal: typing.Optional[bool] =
|
|
25
|
+
is_internal: typing.Optional[bool] = pydantic.Field(default=None)
|
|
26
26
|
"""
|
|
27
27
|
Whether the model provider connection is internal, not visible to the user.
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
|
-
budget_limit: typing.Optional[float] =
|
|
30
|
+
budget_limit: typing.Optional[float] = pydantic.Field(default=None)
|
|
31
31
|
"""
|
|
32
32
|
Budget limit for the model provider connection (null if unlimited)
|
|
33
33
|
"""
|
|
34
34
|
|
|
35
|
-
budget_last_reset_date: typing.Optional[dt.datetime] =
|
|
35
|
+
budget_last_reset_date: typing.Optional[dt.datetime] = pydantic.Field(default=None)
|
|
36
36
|
"""
|
|
37
37
|
Date and time the budget was last reset
|
|
38
38
|
"""
|
|
39
39
|
|
|
40
|
-
budget_reset_period: typing.Optional[ModelProviderConnectionBudgetResetPeriod] =
|
|
40
|
+
budget_reset_period: typing.Optional[ModelProviderConnectionBudgetResetPeriod] = pydantic.Field(default=None)
|
|
41
41
|
"""
|
|
42
42
|
Budget reset period for the model provider connection (null if not reset)
|
|
43
43
|
"""
|
|
44
44
|
|
|
45
|
-
budget_total_spent: typing.Optional[float] =
|
|
45
|
+
budget_total_spent: typing.Optional[float] = pydantic.Field(default=None)
|
|
46
46
|
"""
|
|
47
47
|
Tracked total budget spent for the given provider connection within the current budget period
|
|
48
48
|
"""
|
|
49
49
|
|
|
50
|
-
budget_alert_threshold: typing.Optional[float] =
|
|
50
|
+
budget_alert_threshold: typing.Optional[float] = pydantic.Field(default=None)
|
|
51
51
|
"""
|
|
52
52
|
Budget alert threshold for the given provider connection
|
|
53
53
|
"""
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
|
|
60
|
-
kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
|
|
61
|
-
kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs}
|
|
62
|
-
|
|
63
|
-
return deep_union_pydantic_dicts(
|
|
64
|
-
super().dict(**kwargs_with_defaults_exclude_unset), super().dict(**kwargs_with_defaults_exclude_none)
|
|
65
|
-
)
|
|
55
|
+
if IS_PYDANTIC_V2:
|
|
56
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
57
|
+
else:
|
|
66
58
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
json_encoders = {dt.datetime: serialize_datetime}
|
|
59
|
+
class Config:
|
|
60
|
+
frozen = True
|
|
61
|
+
smart_union = True
|
|
62
|
+
extra = pydantic.Extra.allow
|
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
ModelProviderConnectionProvider = typing.Union[
|
|
5
|
+
ModelProviderConnectionProvider = typing.Union[
|
|
6
|
+
typing.Literal["OpenAI", "AzureOpenAI", "AzureAIFoundry", "VertexAI", "Gemini", "Anthropic", "Custom"], typing.Any
|
|
7
|
+
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
|
4
|
+
import typing
|
|
5
|
+
from .pause_paused_by import PausePausedBy
|
|
6
|
+
import pydantic
|
|
7
|
+
import datetime as dt
|
|
8
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Pause(UniversalBaseModel):
|
|
12
|
+
id: typing.Optional[int] = None
|
|
13
|
+
project: typing.Optional[int] = None
|
|
14
|
+
user: typing.Optional[int] = None
|
|
15
|
+
paused_by: typing.Optional[PausePausedBy] = pydantic.Field(default=None)
|
|
16
|
+
"""
|
|
17
|
+
User who created the pause
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
reason: str
|
|
21
|
+
verbose_reason: typing.Optional[str] = None
|
|
22
|
+
deleted_by: typing.Optional[int] = None
|
|
23
|
+
deleted_at: typing.Optional[dt.datetime] = None
|
|
24
|
+
created_at: typing.Optional[dt.datetime] = None
|
|
25
|
+
updated_at: typing.Optional[dt.datetime] = None
|
|
26
|
+
|
|
27
|
+
if IS_PYDANTIC_V2:
|
|
28
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
29
|
+
else:
|
|
30
|
+
|
|
31
|
+
class Config:
|
|
32
|
+
frozen = True
|
|
33
|
+
smart_union = True
|
|
34
|
+
extra = pydantic.Extra.allow
|
|
@@ -1,57 +1,57 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
|
4
4
|
import typing
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
from ..core.pydantic_utilities import
|
|
5
|
+
import pydantic
|
|
6
|
+
import datetime as dt
|
|
7
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class Prediction(
|
|
10
|
+
class Prediction(UniversalBaseModel):
|
|
11
11
|
id: typing.Optional[int] = None
|
|
12
|
-
result: typing.List[typing.Dict[str, typing.Any]] =
|
|
12
|
+
result: typing.List[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field()
|
|
13
13
|
"""
|
|
14
14
|
List of prediction results for the task
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
|
-
model_version: typing.Optional[str] =
|
|
17
|
+
model_version: typing.Optional[str] = pydantic.Field(default=None)
|
|
18
18
|
"""
|
|
19
19
|
Model version - tag for predictions that can be used to filter tasks in Data Manager, as well as select specific model version for showing preannotations in the labeling interface
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
-
created_ago: typing.Optional[str] =
|
|
22
|
+
created_ago: typing.Optional[str] = pydantic.Field(default=None)
|
|
23
23
|
"""
|
|
24
24
|
Delta time from creation time
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
|
-
score: typing.Optional[float] =
|
|
27
|
+
score: typing.Optional[float] = pydantic.Field(default=None)
|
|
28
28
|
"""
|
|
29
29
|
Prediction score
|
|
30
30
|
"""
|
|
31
31
|
|
|
32
|
-
cluster: typing.Optional[int] =
|
|
32
|
+
cluster: typing.Optional[int] = pydantic.Field(default=None)
|
|
33
33
|
"""
|
|
34
34
|
Cluster for the current prediction
|
|
35
35
|
"""
|
|
36
36
|
|
|
37
|
-
neighbors: typing.Optional[typing.Dict[str, typing.Any]] =
|
|
37
|
+
neighbors: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
|
|
38
38
|
"""
|
|
39
39
|
Array of task IDs of the closest neighbors
|
|
40
40
|
"""
|
|
41
41
|
|
|
42
|
-
mislabeling: typing.Optional[float] =
|
|
42
|
+
mislabeling: typing.Optional[float] = pydantic.Field(default=None)
|
|
43
43
|
"""
|
|
44
44
|
Related task mislabeling score
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
47
|
created_at: typing.Optional[dt.datetime] = None
|
|
48
48
|
updated_at: typing.Optional[dt.datetime] = None
|
|
49
|
-
model: typing.Optional[int] =
|
|
49
|
+
model: typing.Optional[int] = pydantic.Field(default=None)
|
|
50
50
|
"""
|
|
51
51
|
An ML Backend instance that created the prediction.
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
|
-
model_run: typing.Optional[int] =
|
|
54
|
+
model_run: typing.Optional[int] = pydantic.Field(default=None)
|
|
55
55
|
"""
|
|
56
56
|
A run of a ModelVersion that created the prediction.
|
|
57
57
|
"""
|
|
@@ -59,20 +59,11 @@ class Prediction(pydantic_v1.BaseModel):
|
|
|
59
59
|
task: int
|
|
60
60
|
project: typing.Optional[int] = None
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
|
|
67
|
-
kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
|
|
68
|
-
kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs}
|
|
69
|
-
|
|
70
|
-
return deep_union_pydantic_dicts(
|
|
71
|
-
super().dict(**kwargs_with_defaults_exclude_unset), super().dict(**kwargs_with_defaults_exclude_none)
|
|
72
|
-
)
|
|
62
|
+
if IS_PYDANTIC_V2:
|
|
63
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
64
|
+
else:
|
|
73
65
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
json_encoders = {dt.datetime: serialize_datetime}
|
|
66
|
+
class Config:
|
|
67
|
+
frozen = True
|
|
68
|
+
smart_union = True
|
|
69
|
+
extra = pydantic.Extra.allow
|
|
@@ -1,127 +1,139 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
|
4
4
|
import typing
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
from
|
|
5
|
+
import pydantic
|
|
6
|
+
from .prompt import Prompt
|
|
7
|
+
from .user_simple import UserSimple
|
|
8
|
+
import datetime as dt
|
|
8
9
|
from .project_sampling import ProjectSampling
|
|
9
10
|
from .project_skip_queue import ProjectSkipQueue
|
|
10
|
-
from .
|
|
11
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
class Project(
|
|
14
|
+
class Project(UniversalBaseModel):
|
|
14
15
|
id: typing.Optional[int] = None
|
|
15
|
-
title: typing.Optional[str] =
|
|
16
|
+
title: typing.Optional[str] = pydantic.Field(default=None)
|
|
16
17
|
"""
|
|
17
18
|
Project name. Must be between 3 and 50 characters long.
|
|
18
19
|
"""
|
|
19
20
|
|
|
20
|
-
description: typing.Optional[str] =
|
|
21
|
+
description: typing.Optional[str] = pydantic.Field(default=None)
|
|
21
22
|
"""
|
|
22
23
|
Project description
|
|
23
24
|
"""
|
|
24
25
|
|
|
25
|
-
label_config: typing.Optional[str] =
|
|
26
|
+
label_config: typing.Optional[str] = pydantic.Field(default=None)
|
|
26
27
|
"""
|
|
27
28
|
Label config in XML format. See more about it in documentation
|
|
28
29
|
"""
|
|
29
30
|
|
|
30
|
-
expert_instruction: typing.Optional[str] =
|
|
31
|
+
expert_instruction: typing.Optional[str] = pydantic.Field(default=None)
|
|
31
32
|
"""
|
|
32
33
|
Labeling instructions in HTML format
|
|
33
34
|
"""
|
|
34
35
|
|
|
35
|
-
show_instruction: typing.Optional[bool] =
|
|
36
|
+
show_instruction: typing.Optional[bool] = pydantic.Field(default=None)
|
|
36
37
|
"""
|
|
37
38
|
Show instructions to the annotator before they start
|
|
38
39
|
"""
|
|
39
40
|
|
|
40
|
-
show_skip_button: typing.Optional[bool] =
|
|
41
|
+
show_skip_button: typing.Optional[bool] = pydantic.Field(default=None)
|
|
41
42
|
"""
|
|
42
43
|
Show a skip button in interface and allow annotators to skip the task
|
|
43
44
|
"""
|
|
44
45
|
|
|
45
|
-
enable_empty_annotation: typing.Optional[bool] =
|
|
46
|
+
enable_empty_annotation: typing.Optional[bool] = pydantic.Field(default=None)
|
|
46
47
|
"""
|
|
47
48
|
Allow annotators to submit empty annotations
|
|
48
49
|
"""
|
|
49
50
|
|
|
50
|
-
show_annotation_history: typing.Optional[bool] =
|
|
51
|
+
show_annotation_history: typing.Optional[bool] = pydantic.Field(default=None)
|
|
51
52
|
"""
|
|
52
53
|
Show annotation history to annotator
|
|
53
54
|
"""
|
|
54
55
|
|
|
55
56
|
organization: typing.Optional[int] = None
|
|
57
|
+
prompts: typing.Optional[typing.List[Prompt]] = None
|
|
56
58
|
color: typing.Optional[str] = None
|
|
57
|
-
maximum_annotations: typing.Optional[int] =
|
|
59
|
+
maximum_annotations: typing.Optional[int] = pydantic.Field(default=None)
|
|
58
60
|
"""
|
|
59
61
|
Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True)
|
|
60
62
|
"""
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
annotation_limit_count: typing.Optional[int] = pydantic.Field(default=None)
|
|
65
|
+
"""
|
|
66
|
+
Maximum number of tasks that can be annotated by a single annotator in this project pause
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
annotation_limit_percent: typing.Optional[float] = pydantic.Field(default=None)
|
|
70
|
+
"""
|
|
71
|
+
Maximum percentage of tasks in this project that can be annotated by a single annotator
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
is_published: typing.Optional[bool] = pydantic.Field(default=None)
|
|
63
75
|
"""
|
|
64
76
|
Whether or not the project is published to annotators
|
|
65
77
|
"""
|
|
66
78
|
|
|
67
|
-
model_version: typing.Optional[str] =
|
|
79
|
+
model_version: typing.Optional[str] = pydantic.Field(default=None)
|
|
68
80
|
"""
|
|
69
81
|
Machine learning model version
|
|
70
82
|
"""
|
|
71
83
|
|
|
72
|
-
is_draft: typing.Optional[bool] =
|
|
84
|
+
is_draft: typing.Optional[bool] = pydantic.Field(default=None)
|
|
73
85
|
"""
|
|
74
86
|
Whether or not the project is in the middle of being created
|
|
75
87
|
"""
|
|
76
88
|
|
|
77
89
|
created_by: typing.Optional[UserSimple] = None
|
|
78
90
|
created_at: typing.Optional[dt.datetime] = None
|
|
79
|
-
min_annotations_to_start_training: typing.Optional[int] =
|
|
91
|
+
min_annotations_to_start_training: typing.Optional[int] = pydantic.Field(default=None)
|
|
80
92
|
"""
|
|
81
93
|
Minimum number of completed tasks after which model training is started
|
|
82
94
|
"""
|
|
83
95
|
|
|
84
|
-
start_training_on_annotation_update: typing.Optional[
|
|
96
|
+
start_training_on_annotation_update: typing.Optional[bool] = pydantic.Field(default=None)
|
|
85
97
|
"""
|
|
86
98
|
Start model training after any annotations are submitted or updated
|
|
87
99
|
"""
|
|
88
100
|
|
|
89
|
-
show_collab_predictions: typing.Optional[bool] =
|
|
101
|
+
show_collab_predictions: typing.Optional[bool] = pydantic.Field(default=None)
|
|
90
102
|
"""
|
|
91
103
|
If set, the annotator can view model predictions
|
|
92
104
|
"""
|
|
93
105
|
|
|
94
|
-
num_tasks_with_annotations: typing.Optional[int] =
|
|
106
|
+
num_tasks_with_annotations: typing.Optional[int] = pydantic.Field(default=None)
|
|
95
107
|
"""
|
|
96
108
|
Tasks with annotations count
|
|
97
109
|
"""
|
|
98
110
|
|
|
99
|
-
task_number: typing.Optional[int] =
|
|
111
|
+
task_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
100
112
|
"""
|
|
101
113
|
Total task number in project
|
|
102
114
|
"""
|
|
103
115
|
|
|
104
|
-
useful_annotation_number: typing.Optional[int] =
|
|
116
|
+
useful_annotation_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
105
117
|
"""
|
|
106
118
|
Useful annotation number in project not including skipped_annotations_number and ground_truth_number. Total annotations = annotation_number + skipped_annotations_number + ground_truth_number
|
|
107
119
|
"""
|
|
108
120
|
|
|
109
|
-
ground_truth_number: typing.Optional[int] =
|
|
121
|
+
ground_truth_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
110
122
|
"""
|
|
111
123
|
Honeypot annotation number in project
|
|
112
124
|
"""
|
|
113
125
|
|
|
114
|
-
skipped_annotations_number: typing.Optional[int] =
|
|
126
|
+
skipped_annotations_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
115
127
|
"""
|
|
116
128
|
Skipped by collaborators annotation number in project
|
|
117
129
|
"""
|
|
118
130
|
|
|
119
|
-
total_annotations_number: typing.Optional[int] =
|
|
131
|
+
total_annotations_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
120
132
|
"""
|
|
121
133
|
Total annotations number in project including skipped_annotations_number and ground_truth_number.
|
|
122
134
|
"""
|
|
123
135
|
|
|
124
|
-
total_predictions_number: typing.Optional[int] =
|
|
136
|
+
total_predictions_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
125
137
|
"""
|
|
126
138
|
Total predictions number in project including skipped_annotations_number, ground_truth_number, and useful_annotation_number.
|
|
127
139
|
"""
|
|
@@ -130,69 +142,60 @@ class Project(pydantic_v1.BaseModel):
|
|
|
130
142
|
show_ground_truth_first: typing.Optional[bool] = None
|
|
131
143
|
show_overlap_first: typing.Optional[bool] = None
|
|
132
144
|
overlap_cohort_percentage: typing.Optional[int] = None
|
|
133
|
-
task_data_login: typing.Optional[str] =
|
|
145
|
+
task_data_login: typing.Optional[str] = pydantic.Field(default=None)
|
|
134
146
|
"""
|
|
135
147
|
Task data credentials: login
|
|
136
148
|
"""
|
|
137
149
|
|
|
138
|
-
task_data_password: typing.Optional[str] =
|
|
150
|
+
task_data_password: typing.Optional[str] = pydantic.Field(default=None)
|
|
139
151
|
"""
|
|
140
152
|
Task data credentials: password
|
|
141
153
|
"""
|
|
142
154
|
|
|
143
|
-
control_weights: typing.Optional[typing.Dict[str, typing.Any]] =
|
|
155
|
+
control_weights: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
|
|
144
156
|
"""
|
|
145
157
|
Dict of weights for each control tag in metric calculation. Each control tag (e.g. label or choice) will have it's own key in control weight dict with weight for each label and overall weight.For example, if bounding box annotation with control tag named my_bbox should be included with 0.33 weight in agreement calculation, and the first label Car should be twice more important than Airplaine, then you have to need the specify: {'my_bbox': {'type': 'RectangleLabels', 'labels': {'Car': 1.0, 'Airplaine': 0.5}, 'overall': 0.33}
|
|
146
158
|
"""
|
|
147
159
|
|
|
148
|
-
parsed_label_config: typing.Optional[typing.Dict[str, typing.Any]] =
|
|
160
|
+
parsed_label_config: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None)
|
|
149
161
|
"""
|
|
150
162
|
JSON-formatted labeling configuration
|
|
151
163
|
"""
|
|
152
164
|
|
|
153
|
-
evaluate_predictions_automatically: typing.Optional[bool] =
|
|
165
|
+
evaluate_predictions_automatically: typing.Optional[bool] = pydantic.Field(default=None)
|
|
154
166
|
"""
|
|
155
167
|
Retrieve and display predictions when loading a task
|
|
156
168
|
"""
|
|
157
169
|
|
|
158
|
-
config_has_control_tags: typing.Optional[
|
|
170
|
+
config_has_control_tags: typing.Optional[bool] = pydantic.Field(default=None)
|
|
159
171
|
"""
|
|
160
172
|
Flag to detect is project ready for labeling
|
|
161
173
|
"""
|
|
162
174
|
|
|
163
175
|
skip_queue: typing.Optional[ProjectSkipQueue] = None
|
|
164
|
-
reveal_preannotations_interactively: typing.Optional[bool] =
|
|
176
|
+
reveal_preannotations_interactively: typing.Optional[bool] = pydantic.Field(default=None)
|
|
165
177
|
"""
|
|
166
178
|
Reveal pre-annotations interactively
|
|
167
179
|
"""
|
|
168
180
|
|
|
169
|
-
pinned_at: typing.Optional[dt.datetime] =
|
|
181
|
+
pinned_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
|
|
170
182
|
"""
|
|
171
183
|
Pinned date and time
|
|
172
184
|
"""
|
|
173
185
|
|
|
174
|
-
finished_task_number: typing.Optional[int] =
|
|
186
|
+
finished_task_number: typing.Optional[int] = pydantic.Field(default=None)
|
|
175
187
|
"""
|
|
176
188
|
Finished tasks
|
|
177
189
|
"""
|
|
178
190
|
|
|
179
|
-
queue_total: typing.Optional[
|
|
180
|
-
queue_done: typing.Optional[
|
|
181
|
-
|
|
182
|
-
def json(self, **kwargs: typing.Any) -> str:
|
|
183
|
-
kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
|
|
184
|
-
return super().json(**kwargs_with_defaults)
|
|
185
|
-
|
|
186
|
-
def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
|
|
187
|
-
kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
|
|
188
|
-
kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs}
|
|
191
|
+
queue_total: typing.Optional[int] = None
|
|
192
|
+
queue_done: typing.Optional[int] = None
|
|
189
193
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
194
|
+
if IS_PYDANTIC_V2:
|
|
195
|
+
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
|
196
|
+
else:
|
|
193
197
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
json_encoders = {dt.datetime: serialize_datetime}
|
|
198
|
+
class Config:
|
|
199
|
+
frozen = True
|
|
200
|
+
smart_union = True
|
|
201
|
+
extra = pydantic.Extra.allow
|