label-studio-sdk 1.0.10__tar.gz → 1.0.12__tar.gz
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-1.0.10 → label_studio_sdk-1.0.12}/PKG-INFO +3 -2
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/pyproject.toml +4 -2
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/__init__.py +21 -1
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +5 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/base_client.py +8 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/converter.py +22 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/converter/exports/brush_to_coco.py +332 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/main.py +14 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/client_wrapper.py +34 -15
- label_studio_sdk-1.0.12/src/label_studio_sdk/errors/__init__.py +8 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/errors/not_found_error.py +9 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/errors/unauthorized_error.py +9 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/jwt_settings/client.py +259 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/control_tags.py +15 -2
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/interface.py +80 -1
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/object_tags.py +2 -2
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/__init__.py +2 -1
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/client.py +4 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/client_ext.py +106 -40
- label_studio_sdk-1.0.12/src/label_studio_sdk/projects/pauses/client.py +704 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_update_response.py +10 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/prompts/indicators/__init__.py +2 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/prompts/versions/__init__.py +2 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/tokens/__init__.py +2 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/tokens/client.py +610 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/tokens/client_ext.py +94 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/__init__.py +14 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/access_token_response.py +22 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation.py +2 -1
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/annotation_completed_by.py +6 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/api_token_response.py +32 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/jwt_settings_response.py +32 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_provider.py +1 -1
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/pause.py +34 -0
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/pause_paused_by.py +5 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project.py +10 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_provider.py +1 -1
- label_studio_sdk-1.0.12/src/label_studio_sdk/types/rotate_token_response.py +22 -0
- label_studio_sdk-1.0.10/src/label_studio_sdk/errors/__init__.py +0 -6
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/LICENSE +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/README.md +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/eval/categorical.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/exceptions.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/params.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/beam.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/example.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/registry.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/video.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/pager_ext.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/exceptions.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/project.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/schema/label_config_schema.json +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/users.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/utils.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/workspaces.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_id.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_ordering_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/annotations_create_bulk_request_selected_items.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/comments/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/comments/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/audio.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/brush.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/csv.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/csv2.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/funsd.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/coco.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/colors.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/label_config.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/pathtrack.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/yolo.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/utils.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/api_error.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/datetime_utils.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/file.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/http_client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/jsonable_encoder.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/pagination.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/pydantic_utilities.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/query_encoder.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/remove_none_from_dict.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/request_options.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/serialization.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/data_manager.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/environment.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/bad_request_error.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/internal_server_error.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/files/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/files/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.10/src/label_studio_sdk/model_providers → label_studio_sdk-1.0.12/src/label_studio_sdk/jwt_settings}/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/base.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/create.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/data_examples.json +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/label_tags.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/objects.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/region.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.10/src/label_studio_sdk/predictions → label_studio_sdk-1.0.12/src/label_studio_sdk/model_providers}/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/model_providers/client.py +0 -0
- {label_studio_sdk-1.0.10/src/label_studio_sdk/prompts/indicators → label_studio_sdk-1.0.12/src/label_studio_sdk/predictions}/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/predictions/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/client_ext.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/exports_convert_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/exports_list_formats_response_item.py +0 -0
- {label_studio_sdk-1.0.10/src/label_studio_sdk/prompts/versions → label_studio_sdk-1.0.12/src/label_studio_sdk/projects/pauses}/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_import_tasks_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_list_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/indicators/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/types/runs_list_request_project_subset.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/versions/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/py.typed +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/client_ext.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/tasks_list_request_fields.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/tasks_list_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation_filter_options.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation_last_action.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotations_dm_field.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotations_dm_field_last_action.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task_file_upload.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task_updated_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_user.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/comment.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/comment_created_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/converted_format.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/converted_format_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_format.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_snapshot.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_snapshot_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/file_upload.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/filter.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/filter_group.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_cost_estimate.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_created_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_organization.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_project_subset.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicator_value.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend_auth_method.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend_state.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_budget_reset_period.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_created_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_organization.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_scope.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prediction.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_import.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_import_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_label_config.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_sampling.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_skip_queue.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_associated_projects_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_associated_projects_item_id.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_created_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_organization.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_created_by.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_organization.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/refined_prompt_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/refined_prompt_response_refinement_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3export_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_export_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_import_storage.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/serialization_option.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/serialization_options.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_annotators_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_comment_authors_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_filter_options.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/user_simple.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/view.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_actions_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_serializer_for_update.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/workspace.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/users_get_token_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/users_reset_token_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/version.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/versions_get_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/versions_get_response_edition.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/client.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/types/__init__.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/types/members_create_response.py +0 -0
- {label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/types/members_list_response_item.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: label-studio-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.12
|
|
4
4
|
Summary:
|
|
5
5
|
Requires-Python: >=3.9,<4
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -28,10 +28,11 @@ Requires-Dist: jsf (>=0.11.2,<0.12.0)
|
|
|
28
28
|
Requires-Dist: jsonschema (>=4.23.0)
|
|
29
29
|
Requires-Dist: lxml (>=4.2.5)
|
|
30
30
|
Requires-Dist: nltk (>=3.9.1,<4.0.0)
|
|
31
|
-
Requires-Dist: numpy (>=1.26.4,<
|
|
31
|
+
Requires-Dist: numpy (>=1.26.4,<3.0.0)
|
|
32
32
|
Requires-Dist: pandas (>=0.24.0)
|
|
33
33
|
Requires-Dist: pydantic (>=1.9.2)
|
|
34
34
|
Requires-Dist: pydantic-core (>=2.18.2,<3.0.0)
|
|
35
|
+
Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
|
|
35
36
|
Requires-Dist: requests (>=2.22.0)
|
|
36
37
|
Requires-Dist: requests-mock (==1.12.1)
|
|
37
38
|
Requires-Dist: typing_extensions (>=4.0.0)
|
|
@@ -3,7 +3,7 @@ name = "label-studio-sdk"
|
|
|
3
3
|
|
|
4
4
|
[tool.poetry]
|
|
5
5
|
name = "label-studio-sdk"
|
|
6
|
-
version = "1.0.
|
|
6
|
+
version = "1.0.12"
|
|
7
7
|
description = ""
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
authors = []
|
|
@@ -44,10 +44,11 @@ jsf = "^0.11.2"
|
|
|
44
44
|
jsonschema = ">=4.23.0"
|
|
45
45
|
lxml = ">=4.2.5"
|
|
46
46
|
nltk = "^3.9.1"
|
|
47
|
-
numpy = ">=1.26.4,<
|
|
47
|
+
numpy = ">=1.26.4,<3.0.0"
|
|
48
48
|
pandas = ">=0.24.0"
|
|
49
49
|
pydantic = ">= 1.9.2"
|
|
50
50
|
pydantic-core = "^2.18.2"
|
|
51
|
+
pyjwt = "^2.10.1"
|
|
51
52
|
requests = ">=2.22.0"
|
|
52
53
|
requests-mock = "1.12.1"
|
|
53
54
|
typing_extensions = ">= 4.0.0"
|
|
@@ -60,6 +61,7 @@ pytest = "^7.4.0"
|
|
|
60
61
|
pytest-asyncio = "^0.23.5"
|
|
61
62
|
python-dateutil = "^2.9.0"
|
|
62
63
|
types-python-dateutil = "^2.9.0.20240316"
|
|
64
|
+
respx = "^0.22.0"
|
|
63
65
|
ruff = "^0.5.6"
|
|
64
66
|
|
|
65
67
|
[tool.pytest.ini_options]
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
|
2
2
|
|
|
3
3
|
from .types import (
|
|
4
|
+
AccessTokenResponse,
|
|
4
5
|
Annotation,
|
|
6
|
+
AnnotationCompletedBy,
|
|
5
7
|
AnnotationFilterOptions,
|
|
6
8
|
AnnotationLastAction,
|
|
7
9
|
AnnotationsDmField,
|
|
8
10
|
AnnotationsDmFieldLastAction,
|
|
11
|
+
ApiTokenResponse,
|
|
9
12
|
AzureBlobExportStorage,
|
|
10
13
|
AzureBlobExportStorageStatus,
|
|
11
14
|
AzureBlobImportStorage,
|
|
@@ -40,6 +43,7 @@ from .types import (
|
|
|
40
43
|
InferenceRunOrganization,
|
|
41
44
|
InferenceRunProjectSubset,
|
|
42
45
|
InferenceRunStatus,
|
|
46
|
+
JwtSettingsResponse,
|
|
43
47
|
KeyIndicatorValue,
|
|
44
48
|
KeyIndicators,
|
|
45
49
|
KeyIndicatorsItem,
|
|
@@ -58,6 +62,8 @@ from .types import (
|
|
|
58
62
|
ModelProviderConnectionOrganization,
|
|
59
63
|
ModelProviderConnectionProvider,
|
|
60
64
|
ModelProviderConnectionScope,
|
|
65
|
+
Pause,
|
|
66
|
+
PausePausedBy,
|
|
61
67
|
Prediction,
|
|
62
68
|
Project,
|
|
63
69
|
ProjectImport,
|
|
@@ -80,6 +86,7 @@ from .types import (
|
|
|
80
86
|
RedisImportStorageStatus,
|
|
81
87
|
RefinedPromptResponse,
|
|
82
88
|
RefinedPromptResponseRefinementStatus,
|
|
89
|
+
RotateTokenResponse,
|
|
83
90
|
S3ExportStorage,
|
|
84
91
|
S3ExportStorageStatus,
|
|
85
92
|
S3ImportStorage,
|
|
@@ -101,7 +108,7 @@ from .types import (
|
|
|
101
108
|
WebhookSerializerForUpdateActionsItem,
|
|
102
109
|
Workspace,
|
|
103
110
|
)
|
|
104
|
-
from .errors import BadRequestError, InternalServerError
|
|
111
|
+
from .errors import BadRequestError, InternalServerError, NotFoundError, UnauthorizedError
|
|
105
112
|
from . import (
|
|
106
113
|
actions,
|
|
107
114
|
annotations,
|
|
@@ -109,12 +116,14 @@ from . import (
|
|
|
109
116
|
export_storage,
|
|
110
117
|
files,
|
|
111
118
|
import_storage,
|
|
119
|
+
jwt_settings,
|
|
112
120
|
ml,
|
|
113
121
|
model_providers,
|
|
114
122
|
predictions,
|
|
115
123
|
projects,
|
|
116
124
|
prompts,
|
|
117
125
|
tasks,
|
|
126
|
+
tokens,
|
|
118
127
|
users,
|
|
119
128
|
versions,
|
|
120
129
|
views,
|
|
@@ -180,6 +189,7 @@ from .views import (
|
|
|
180
189
|
from .webhooks import WebhooksUpdateRequestActionsItem
|
|
181
190
|
|
|
182
191
|
__all__ = [
|
|
192
|
+
"AccessTokenResponse",
|
|
183
193
|
"ActionsCreateRequestFilters",
|
|
184
194
|
"ActionsCreateRequestFiltersConjunction",
|
|
185
195
|
"ActionsCreateRequestFiltersItemsItem",
|
|
@@ -192,12 +202,14 @@ __all__ = [
|
|
|
192
202
|
"ActionsCreateRequestSelectedItemsExcluded",
|
|
193
203
|
"ActionsCreateRequestSelectedItemsIncluded",
|
|
194
204
|
"Annotation",
|
|
205
|
+
"AnnotationCompletedBy",
|
|
195
206
|
"AnnotationFilterOptions",
|
|
196
207
|
"AnnotationLastAction",
|
|
197
208
|
"AnnotationsCreateBulkRequestSelectedItems",
|
|
198
209
|
"AnnotationsCreateBulkResponseItem",
|
|
199
210
|
"AnnotationsDmField",
|
|
200
211
|
"AnnotationsDmFieldLastAction",
|
|
212
|
+
"ApiTokenResponse",
|
|
201
213
|
"AsyncLabelStudio",
|
|
202
214
|
"AzureBlobExportStorage",
|
|
203
215
|
"AzureBlobExportStorageStatus",
|
|
@@ -238,6 +250,7 @@ __all__ = [
|
|
|
238
250
|
"InferenceRunProjectSubset",
|
|
239
251
|
"InferenceRunStatus",
|
|
240
252
|
"InternalServerError",
|
|
253
|
+
"JwtSettingsResponse",
|
|
241
254
|
"KeyIndicatorValue",
|
|
242
255
|
"KeyIndicators",
|
|
243
256
|
"KeyIndicatorsItem",
|
|
@@ -264,6 +277,9 @@ __all__ = [
|
|
|
264
277
|
"ModelProviderConnectionOrganization",
|
|
265
278
|
"ModelProviderConnectionProvider",
|
|
266
279
|
"ModelProviderConnectionScope",
|
|
280
|
+
"NotFoundError",
|
|
281
|
+
"Pause",
|
|
282
|
+
"PausePausedBy",
|
|
267
283
|
"Prediction",
|
|
268
284
|
"Project",
|
|
269
285
|
"ProjectImport",
|
|
@@ -294,6 +310,7 @@ __all__ = [
|
|
|
294
310
|
"RedisImportStorageStatus",
|
|
295
311
|
"RefinedPromptResponse",
|
|
296
312
|
"RefinedPromptResponseRefinementStatus",
|
|
313
|
+
"RotateTokenResponse",
|
|
297
314
|
"S3ExportStorage",
|
|
298
315
|
"S3ExportStorageStatus",
|
|
299
316
|
"S3ImportStorage",
|
|
@@ -309,6 +326,7 @@ __all__ = [
|
|
|
309
326
|
"TaskFilterOptions",
|
|
310
327
|
"TasksListRequestFields",
|
|
311
328
|
"TasksListResponse",
|
|
329
|
+
"UnauthorizedError",
|
|
312
330
|
"UserSimple",
|
|
313
331
|
"UsersGetTokenResponse",
|
|
314
332
|
"UsersResetTokenResponse",
|
|
@@ -344,12 +362,14 @@ __all__ = [
|
|
|
344
362
|
"export_storage",
|
|
345
363
|
"files",
|
|
346
364
|
"import_storage",
|
|
365
|
+
"jwt_settings",
|
|
347
366
|
"ml",
|
|
348
367
|
"model_providers",
|
|
349
368
|
"predictions",
|
|
350
369
|
"projects",
|
|
351
370
|
"prompts",
|
|
352
371
|
"tasks",
|
|
372
|
+
"tokens",
|
|
353
373
|
"users",
|
|
354
374
|
"versions",
|
|
355
375
|
"views",
|
|
@@ -2,6 +2,7 @@ import json
|
|
|
2
2
|
import types
|
|
3
3
|
import sys
|
|
4
4
|
import functools
|
|
5
|
+
import logging
|
|
5
6
|
from typing import Type, Dict, Any, Tuple, Generator
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
from tempfile import TemporaryDirectory
|
|
@@ -11,6 +12,8 @@ from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
|
|
|
11
12
|
from pydantic import BaseModel
|
|
12
13
|
from contextlib import contextmanager
|
|
13
14
|
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
14
17
|
|
|
15
18
|
@functools.lru_cache(maxsize=128)
|
|
16
19
|
def _generate_model_code(json_schema_str: str, class_name: str = 'MyModel') -> str:
|
|
@@ -65,6 +68,7 @@ def json_schema_to_pydantic(json_schema: dict, class_name: str = 'MyModel') -> G
|
|
|
65
68
|
json_schema_str = json.dumps(json_schema)
|
|
66
69
|
|
|
67
70
|
# Generate Pydantic model code from the JSON schema string
|
|
71
|
+
logger.debug(f"Generating Pydantic model code from json schema: {json_schema_str}")
|
|
68
72
|
model_code: str = _generate_model_code(json_schema_str, class_name)
|
|
69
73
|
|
|
70
74
|
# Create a unique module name using the id of the JSON schema string
|
|
@@ -79,6 +83,7 @@ def json_schema_to_pydantic(json_schema: dict, class_name: str = 'MyModel') -> G
|
|
|
79
83
|
# Add the new module to sys.modules to make it importable
|
|
80
84
|
# This is necessary to avoid Pydantic errors related to undefined models
|
|
81
85
|
sys.modules[module_name] = mod
|
|
86
|
+
logger.debug(f"Generated Pydantic model: {model_class}")
|
|
82
87
|
yield model_class
|
|
83
88
|
finally:
|
|
84
89
|
if module_name in sys.modules:
|
|
@@ -23,6 +23,8 @@ from .prompts.client import PromptsClient
|
|
|
23
23
|
from .model_providers.client import ModelProvidersClient
|
|
24
24
|
from .comments.client import CommentsClient
|
|
25
25
|
from .workspaces.client import WorkspacesClient
|
|
26
|
+
from .tokens.client import TokensClient
|
|
27
|
+
from .jwt_settings.client import JwtSettingsClient
|
|
26
28
|
from .core.client_wrapper import AsyncClientWrapper
|
|
27
29
|
from .annotations.client import AsyncAnnotationsClient
|
|
28
30
|
from .users.client import AsyncUsersClient
|
|
@@ -41,6 +43,8 @@ from .prompts.client import AsyncPromptsClient
|
|
|
41
43
|
from .model_providers.client import AsyncModelProvidersClient
|
|
42
44
|
from .comments.client import AsyncCommentsClient
|
|
43
45
|
from .workspaces.client import AsyncWorkspacesClient
|
|
46
|
+
from .tokens.client import AsyncTokensClient
|
|
47
|
+
from .jwt_settings.client import AsyncJwtSettingsClient
|
|
44
48
|
|
|
45
49
|
|
|
46
50
|
class LabelStudioBase:
|
|
@@ -122,6 +126,8 @@ class LabelStudioBase:
|
|
|
122
126
|
self.model_providers = ModelProvidersClient(client_wrapper=self._client_wrapper)
|
|
123
127
|
self.comments = CommentsClient(client_wrapper=self._client_wrapper)
|
|
124
128
|
self.workspaces = WorkspacesClient(client_wrapper=self._client_wrapper)
|
|
129
|
+
self.tokens = TokensClient(client_wrapper=self._client_wrapper)
|
|
130
|
+
self.jwt_settings = JwtSettingsClient(client_wrapper=self._client_wrapper)
|
|
125
131
|
|
|
126
132
|
|
|
127
133
|
class AsyncLabelStudioBase:
|
|
@@ -203,6 +209,8 @@ class AsyncLabelStudioBase:
|
|
|
203
209
|
self.model_providers = AsyncModelProvidersClient(client_wrapper=self._client_wrapper)
|
|
204
210
|
self.comments = AsyncCommentsClient(client_wrapper=self._client_wrapper)
|
|
205
211
|
self.workspaces = AsyncWorkspacesClient(client_wrapper=self._client_wrapper)
|
|
212
|
+
self.tokens = AsyncTokensClient(client_wrapper=self._client_wrapper)
|
|
213
|
+
self.jwt_settings = AsyncJwtSettingsClient(client_wrapper=self._client_wrapper)
|
|
206
214
|
|
|
207
215
|
|
|
208
216
|
def _get_base_url(*, base_url: typing.Optional[str] = None, environment: LabelStudioEnvironment) -> str:
|
{label_studio_sdk-1.0.10 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/converter.py
RENAMED
|
@@ -59,6 +59,7 @@ class Format(Enum):
|
|
|
59
59
|
YOLO_WITH_IMAGES = 14
|
|
60
60
|
COCO_WITH_IMAGES = 15
|
|
61
61
|
YOLO_OBB_WITH_IMAGES = 16
|
|
62
|
+
BRUSH_TO_COCO = 17
|
|
62
63
|
|
|
63
64
|
def __str__(self):
|
|
64
65
|
return self.name
|
|
@@ -167,6 +168,13 @@ class Converter(object):
|
|
|
167
168
|
"format expected by NVIDIA NeMo models.",
|
|
168
169
|
"link": "https://labelstud.io/guide/export.html#ASR-MANIFEST",
|
|
169
170
|
"tags": ["speech recognition"],
|
|
171
|
+
},
|
|
172
|
+
Format.BRUSH_TO_COCO: {
|
|
173
|
+
|
|
174
|
+
"title": "Brush labels to COCO",
|
|
175
|
+
"description": "Export your brush labels as COCO format for segmentation tasks. Converts RLE encoded masks to COCO polygons.",
|
|
176
|
+
"link": "https://labelstud.io/guide/export.html#COCO",
|
|
177
|
+
"tags": ["image segmentation", "brush annotations"],
|
|
170
178
|
},
|
|
171
179
|
}
|
|
172
180
|
|
|
@@ -293,6 +301,19 @@ class Converter(object):
|
|
|
293
301
|
upload_dir=self.upload_dir,
|
|
294
302
|
download_resources=self.download_resources,
|
|
295
303
|
)
|
|
304
|
+
elif format == Format.BRUSH_TO_COCO:
|
|
305
|
+
items = (
|
|
306
|
+
self.iter_from_dir(input_data)
|
|
307
|
+
if is_dir
|
|
308
|
+
else self.iter_from_json_file(input_data)
|
|
309
|
+
)
|
|
310
|
+
from label_studio_sdk.converter.exports.brush_to_coco import convert_to_coco
|
|
311
|
+
image_dir = kwargs.get("image_dir")
|
|
312
|
+
convert_to_coco(
|
|
313
|
+
items,
|
|
314
|
+
output_data,
|
|
315
|
+
output_image_dir=image_dir
|
|
316
|
+
)
|
|
296
317
|
|
|
297
318
|
def _get_data_keys_and_output_tags(self, output_tags=None):
|
|
298
319
|
data_keys = set()
|
|
@@ -376,6 +397,7 @@ class Converter(object):
|
|
|
376
397
|
):
|
|
377
398
|
all_formats.remove(Format.BRUSH_TO_NUMPY.name)
|
|
378
399
|
all_formats.remove(Format.BRUSH_TO_PNG.name)
|
|
400
|
+
all_formats.remove(Format.BRUSH_TO_COCO.name)
|
|
379
401
|
if not (
|
|
380
402
|
("Audio" in input_tag_types or "AudioPlus" in input_tag_types)
|
|
381
403
|
and "TextArea" in output_tag_types
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Convert brush annotations and polygon annotations to COCO format.
|
|
3
|
+
This module handles RLE encoded brush masks and converts them to COCO segmentation format.
|
|
4
|
+
"""
|
|
5
|
+
import logging
|
|
6
|
+
import random
|
|
7
|
+
import io
|
|
8
|
+
import os
|
|
9
|
+
import json
|
|
10
|
+
import numpy as np
|
|
11
|
+
import cv2
|
|
12
|
+
from copy import deepcopy
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
|
|
15
|
+
from label_studio_sdk.converter.utils import ensure_dir, get_annotator
|
|
16
|
+
import label_studio_sdk.converter.brush as brush_module
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def generate_random_color():
|
|
22
|
+
"""Generates a random hex color for category visualization"""
|
|
23
|
+
return '#{:02x}{:02x}{:02x}'.format(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def flatten(item):
|
|
27
|
+
"""Flatten nested lists for segmentation format"""
|
|
28
|
+
if isinstance(item, list):
|
|
29
|
+
for subitem in item:
|
|
30
|
+
yield from flatten(subitem)
|
|
31
|
+
else:
|
|
32
|
+
yield item
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def generate_contour_from_rle(rle, original_width, original_height):
|
|
36
|
+
"""Convert RLE encoded masks to COCO segmentation format
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
rle: RLE encoded mask data
|
|
40
|
+
original_width: Width of the original image
|
|
41
|
+
original_height: Height of the original image
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
tuple: (segmentation, bbox_list, area_list) in COCO format
|
|
45
|
+
"""
|
|
46
|
+
# Ensure rle is bytes, not string
|
|
47
|
+
if isinstance(rle, str):
|
|
48
|
+
rle = rle.encode('utf-8')
|
|
49
|
+
|
|
50
|
+
# Decode RLE
|
|
51
|
+
try:
|
|
52
|
+
rle_binary = brush_module.decode_rle(rle)
|
|
53
|
+
except Exception as e:
|
|
54
|
+
logger.warning(f"Failed to decode RLE: {e}")
|
|
55
|
+
return [], [], []
|
|
56
|
+
|
|
57
|
+
# Reshape to image dimensions with 4 channels (RGBA)
|
|
58
|
+
try:
|
|
59
|
+
reshaped_image = np.reshape(rle_binary, [original_height, original_width, 4])
|
|
60
|
+
except Exception as e:
|
|
61
|
+
logger.warning(f"Failed to reshape RLE data: {e}")
|
|
62
|
+
return [], [], []
|
|
63
|
+
|
|
64
|
+
# Use only the alpha channel for contour detection
|
|
65
|
+
alpha_channel = np.array(reshaped_image[:, :, 3]).astype('uint8')
|
|
66
|
+
|
|
67
|
+
# Find contours
|
|
68
|
+
contours, _ = cv2.findContours(
|
|
69
|
+
alpha_channel, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
segmentation = []
|
|
73
|
+
bbox_list = []
|
|
74
|
+
area_list = []
|
|
75
|
+
for contour in contours:
|
|
76
|
+
# OpenCV contours are in format [[[x1,y1]], [[x2,y2]], ...],
|
|
77
|
+
# we need to convert to a flat list [x1,y1,x2,y2,...]
|
|
78
|
+
contour_points = [point[0] for point in contour]
|
|
79
|
+
|
|
80
|
+
# Flatten to a single list
|
|
81
|
+
contour_flat = []
|
|
82
|
+
for point in contour_points:
|
|
83
|
+
contour_flat.extend(point.tolist())
|
|
84
|
+
|
|
85
|
+
# Check if we have at least 3 points (6 coordinates) for a valid polygon
|
|
86
|
+
if len(contour_points) >= 3:
|
|
87
|
+
segmentation.append(contour_flat)
|
|
88
|
+
|
|
89
|
+
x, y, w, h = cv2.boundingRect(contour)
|
|
90
|
+
bbox_list.append([x, y, w, h]) # Format: [top-left x, top-left y, width, height]
|
|
91
|
+
|
|
92
|
+
# Compute the area of the contour
|
|
93
|
+
area = cv2.contourArea(contour)
|
|
94
|
+
area_list.append(int(area))
|
|
95
|
+
|
|
96
|
+
return segmentation, bbox_list, area_list
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def generate_contour_from_polygon(points, original_width, original_height):
|
|
100
|
+
"""Convert polygon annotations to COCO segmentation format
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
points: List of [x, y] points in percentage format
|
|
104
|
+
original_width: Width of the original image
|
|
105
|
+
original_height: Height of the original image
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
tuple: (segmentation, bbox, area) in COCO format
|
|
109
|
+
"""
|
|
110
|
+
# Convert from percentage to absolute coordinates
|
|
111
|
+
modified_points = [
|
|
112
|
+
[round(x * original_width / 100), round(y * original_height / 100)]
|
|
113
|
+
for x, y in points
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
# Initialize lists
|
|
117
|
+
segmentation = [list(flatten(modified_points))]
|
|
118
|
+
|
|
119
|
+
# Convert points to a NumPy array and reshape for OpenCV
|
|
120
|
+
contour = np.array(modified_points, dtype=np.float32).reshape((-1, 1, 2))
|
|
121
|
+
|
|
122
|
+
# Calculate bounding box
|
|
123
|
+
bbox = cv2.boundingRect(contour)
|
|
124
|
+
bbox = [int(coordinate) for coordinate in bbox]
|
|
125
|
+
|
|
126
|
+
# Compute the area of the contour
|
|
127
|
+
area = cv2.contourArea(contour)
|
|
128
|
+
|
|
129
|
+
return segmentation, bbox, int(area)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def convert_to_coco(items, output_dir, output_image_dir=None):
|
|
133
|
+
"""Convert Label Studio annotations to COCO format
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
items: Iterable of annotation items
|
|
137
|
+
output_dir: Directory where to save the resulting COCO JSON
|
|
138
|
+
output_image_dir: Optional directory for images
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
Path to the generated COCO JSON file
|
|
142
|
+
"""
|
|
143
|
+
ensure_dir(output_dir)
|
|
144
|
+
output_file = os.path.join(output_dir, "result_coco.json")
|
|
145
|
+
|
|
146
|
+
if output_image_dir is not None:
|
|
147
|
+
ensure_dir(output_image_dir)
|
|
148
|
+
else:
|
|
149
|
+
output_image_dir = os.path.join(output_dir, "images")
|
|
150
|
+
os.makedirs(output_image_dir, exist_ok=True)
|
|
151
|
+
|
|
152
|
+
# Initialize COCO JSON structure
|
|
153
|
+
coco_data = {
|
|
154
|
+
'images': [],
|
|
155
|
+
'annotations': [],
|
|
156
|
+
'categories': [],
|
|
157
|
+
'info': {
|
|
158
|
+
'year': datetime.now().year,
|
|
159
|
+
'version': '1.0',
|
|
160
|
+
'description': 'Converted from Label Studio',
|
|
161
|
+
'contributor': 'Label Studio Converter',
|
|
162
|
+
'date_created': str(datetime.now()),
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
category_map = {} # To track unique categories
|
|
167
|
+
annotation_id = 0
|
|
168
|
+
|
|
169
|
+
# Process each item
|
|
170
|
+
for image_id, item in enumerate(items):
|
|
171
|
+
# Extract image information
|
|
172
|
+
image_path = None
|
|
173
|
+
for key, value in item['input'].items():
|
|
174
|
+
if isinstance(value, str) and any(value.lower().endswith(ext) for ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp']):
|
|
175
|
+
image_path = value
|
|
176
|
+
break
|
|
177
|
+
|
|
178
|
+
if not image_path:
|
|
179
|
+
logger.warning(f"No image path found for item {item.get('id')}. Skipping.")
|
|
180
|
+
continue
|
|
181
|
+
|
|
182
|
+
image_info = {
|
|
183
|
+
'id': image_id,
|
|
184
|
+
'file_name': os.path.basename(image_path),
|
|
185
|
+
'path': image_path,
|
|
186
|
+
'width': None, # Will be filled from annotations
|
|
187
|
+
'height': None # Will be filled from annotations
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
# Skip tasks without annotations
|
|
191
|
+
if not item['output']:
|
|
192
|
+
logger.warning(f"No annotations found for item {item.get('id')}")
|
|
193
|
+
continue
|
|
194
|
+
|
|
195
|
+
valid_annotations = False
|
|
196
|
+
|
|
197
|
+
# Process all annotations
|
|
198
|
+
for output_key, annotations in item['output'].items():
|
|
199
|
+
for annotation in annotations:
|
|
200
|
+
# Get image dimensions from the first annotation
|
|
201
|
+
if image_info['width'] is None and 'original_width' in annotation:
|
|
202
|
+
image_info['width'] = annotation['original_width']
|
|
203
|
+
image_info['height'] = annotation['original_height']
|
|
204
|
+
|
|
205
|
+
# Identify annotation type and extract labels
|
|
206
|
+
annotation_type = annotation.get('type', '').lower()
|
|
207
|
+
labels = []
|
|
208
|
+
|
|
209
|
+
if 'brushlabels' in annotation:
|
|
210
|
+
labels = annotation['brushlabels']
|
|
211
|
+
type_key = 'brushlabels'
|
|
212
|
+
elif 'polygonlabels' in annotation:
|
|
213
|
+
labels = annotation['polygonlabels']
|
|
214
|
+
type_key = 'polygonlabels'
|
|
215
|
+
elif 'rectanglelabels' in annotation:
|
|
216
|
+
labels = annotation['rectanglelabels']
|
|
217
|
+
type_key = 'rectanglelabels'
|
|
218
|
+
elif 'labels' in annotation:
|
|
219
|
+
labels = annotation['labels']
|
|
220
|
+
type_key = 'labels'
|
|
221
|
+
else:
|
|
222
|
+
logger.debug(f"Unsupported annotation type: {annotation_type}")
|
|
223
|
+
continue
|
|
224
|
+
|
|
225
|
+
# Process each label
|
|
226
|
+
for label in labels:
|
|
227
|
+
# Add new categories to the map
|
|
228
|
+
if label not in category_map:
|
|
229
|
+
category_id = len(category_map) + 1
|
|
230
|
+
category_map[label] = category_id
|
|
231
|
+
coco_data['categories'].append({
|
|
232
|
+
'id': category_id,
|
|
233
|
+
'name': label,
|
|
234
|
+
'supercategory': '',
|
|
235
|
+
'color': generate_random_color(),
|
|
236
|
+
'metadata': {}
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
category_id = category_map[label]
|
|
240
|
+
|
|
241
|
+
# Convert annotation based on type
|
|
242
|
+
if 'rle' in annotation and type_key == 'brushlabels':
|
|
243
|
+
|
|
244
|
+
# check required keys exist
|
|
245
|
+
if not all(k in annotation for k in ['rle', 'original_width', 'original_height']):
|
|
246
|
+
logger.warning(f"Missing required keys for RLE annotation. Skipping.")
|
|
247
|
+
continue
|
|
248
|
+
|
|
249
|
+
# Process brush annotation (RLE encoded mask)
|
|
250
|
+
segmentations, bboxes, areas = generate_contour_from_rle(
|
|
251
|
+
annotation['rle'],
|
|
252
|
+
annotation['original_width'],
|
|
253
|
+
annotation['original_height']
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
# Create separate annotation for each contour
|
|
257
|
+
for i, (segmentation, bbox, area) in enumerate(zip(segmentations, bboxes, areas)):
|
|
258
|
+
coco_annotation = {
|
|
259
|
+
'id': annotation_id,
|
|
260
|
+
'image_id': image_id,
|
|
261
|
+
'category_id': category_id,
|
|
262
|
+
'segmentation': [segmentation], # COCO format requires double nesting
|
|
263
|
+
'area': area,
|
|
264
|
+
'bbox': bbox,
|
|
265
|
+
'iscrowd': 0,
|
|
266
|
+
'annotator': get_annotator(item, "unknown")
|
|
267
|
+
}
|
|
268
|
+
coco_data['annotations'].append(coco_annotation)
|
|
269
|
+
annotation_id += 1
|
|
270
|
+
valid_annotations = True
|
|
271
|
+
|
|
272
|
+
elif 'points' in annotation and type_key == 'polygonlabels':
|
|
273
|
+
# check required keys exist
|
|
274
|
+
if not all(k in annotation for k in ['points', 'original_width', 'original_height']):
|
|
275
|
+
logger.warning(f"Missing required keys for polygon annotation. Skipping.")
|
|
276
|
+
continue
|
|
277
|
+
# Process polygon annotation
|
|
278
|
+
segmentation, bbox, area = generate_contour_from_polygon(
|
|
279
|
+
annotation['points'],
|
|
280
|
+
annotation['original_width'],
|
|
281
|
+
annotation['original_height']
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
coco_annotation = {
|
|
285
|
+
'id': annotation_id,
|
|
286
|
+
'image_id': image_id,
|
|
287
|
+
'category_id': category_id,
|
|
288
|
+
'segmentation': segmentation,
|
|
289
|
+
'area': area,
|
|
290
|
+
'bbox': bbox,
|
|
291
|
+
'iscrowd': 0,
|
|
292
|
+
'annotator': get_annotator(item, "unknown")
|
|
293
|
+
}
|
|
294
|
+
coco_data['annotations'].append(coco_annotation)
|
|
295
|
+
annotation_id += 1
|
|
296
|
+
valid_annotations = True
|
|
297
|
+
|
|
298
|
+
elif annotation_type == 'rectanglelabels' or type_key == 'labels':
|
|
299
|
+
# check required keys exist
|
|
300
|
+
if not all(k in annotation for k in ['x', 'y', 'width', 'height', 'original_width', 'original_height']):
|
|
301
|
+
logger.warning(f"Missing required keys for rectangle annotation. Skipping.")
|
|
302
|
+
continue
|
|
303
|
+
|
|
304
|
+
# Convert from percentage to absolute coordinates
|
|
305
|
+
x = annotation['x'] * annotation['original_width'] / 100
|
|
306
|
+
y = annotation['y'] * annotation['original_height'] / 100
|
|
307
|
+
w = annotation['width'] * annotation['original_width'] / 100
|
|
308
|
+
h = annotation['height'] * annotation['original_height'] / 100
|
|
309
|
+
|
|
310
|
+
coco_annotation = {
|
|
311
|
+
'id': annotation_id,
|
|
312
|
+
'image_id': image_id,
|
|
313
|
+
'category_id': category_id,
|
|
314
|
+
'segmentation': [], # Empty for bounding boxes
|
|
315
|
+
'area': w * h,
|
|
316
|
+
'bbox': [x, y, w, h],
|
|
317
|
+
'iscrowd': 0,
|
|
318
|
+
'annotator': get_annotator(item, "unknown")
|
|
319
|
+
}
|
|
320
|
+
coco_data['annotations'].append(coco_annotation)
|
|
321
|
+
annotation_id += 1
|
|
322
|
+
valid_annotations = True
|
|
323
|
+
|
|
324
|
+
# Add image to the dataset if it has valid dimensions
|
|
325
|
+
if image_info['width'] is not None and image_info['height'] is not None and valid_annotations:
|
|
326
|
+
coco_data['images'].append(image_info)
|
|
327
|
+
|
|
328
|
+
# Write COCO JSON to file
|
|
329
|
+
with io.open(output_file, 'w', encoding='utf8') as f:
|
|
330
|
+
json.dump(coco_data, f, indent=2, ensure_ascii=False)
|
|
331
|
+
|
|
332
|
+
return output_file
|
|
@@ -79,6 +79,12 @@ def get_export_args(parser):
|
|
|
79
79
|
default=True,
|
|
80
80
|
help="Set this flag if your annotations are in one JSON file instead of multiple JSON files from directory",
|
|
81
81
|
)
|
|
82
|
+
parser.add_argument(
|
|
83
|
+
"--brush-to-coco",
|
|
84
|
+
dest="brush_to_coco",
|
|
85
|
+
action="store_true",
|
|
86
|
+
help="If set, brush annotations will be converted to COCO format"
|
|
87
|
+
)
|
|
82
88
|
|
|
83
89
|
|
|
84
90
|
def get_all_args():
|
|
@@ -158,6 +164,14 @@ def export(args):
|
|
|
158
164
|
c.convert_to_yolo(
|
|
159
165
|
args.input, args.output, is_dir=not args.heartex_format, is_obb=True
|
|
160
166
|
)
|
|
167
|
+
elif args.format == Format.BRUSH_TO_COCO:
|
|
168
|
+
c.convert(
|
|
169
|
+
args.input,
|
|
170
|
+
args.output,
|
|
171
|
+
Format.BRUSH_TO_COCO,
|
|
172
|
+
output_image_dir=args.image_dir,
|
|
173
|
+
is_dir=not args.heartex_format,
|
|
174
|
+
)
|
|
161
175
|
else:
|
|
162
176
|
raise FormatNotSupportedError()
|
|
163
177
|
|