label-studio-sdk 1.0.7__tar.gz → 1.0.8__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.
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/PKG-INFO +3 -1
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/pyproject.toml +3 -1
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/__init__.py +6 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +13 -4
- label_studio_sdk-1.0.8/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +86 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/schema/label_config_schema.json +42 -11
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/converter.py +10 -5
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/client_wrapper.py +1 -1
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/control_tags.py +205 -10
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/interface.py +80 -6
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/region.py +1 -10
- label_studio_sdk-1.0.8/src/label_studio_sdk/model_providers/client.py +708 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/versions/client.py +125 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/__init__.py +6 -0
- label_studio_sdk-1.0.8/src/label_studio_sdk/types/inference_run_cost_estimate.py +57 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection.py +30 -0
- label_studio_sdk-1.0.8/src/label_studio_sdk/types/model_provider_connection_budget_reset_period.py +5 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_provider.py +1 -1
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/refined_prompt_response.py +1 -1
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task.py +3 -2
- label_studio_sdk-1.0.8/src/label_studio_sdk/types/task_comment_authors_item.py +5 -0
- label_studio_sdk-1.0.7/src/label_studio_sdk/model_providers/client.py +0 -190
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/LICENSE +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/README.md +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/eval/categorical.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/exceptions.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/params.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/etl/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/etl/beam.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/etl/example.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/etl/registry.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/video.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/pager_ext.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/exceptions.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/project.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/users.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/utils.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/workspaces.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_id.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_ordering_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_selected_items.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/base_client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/comments/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/comments/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/audio.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/brush.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/csv.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/csv2.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/funsd.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/coco.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/colors.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/label_config.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/pathtrack.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/yolo.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/main.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/utils.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/api_error.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/datetime_utils.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/file.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/http_client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/jsonable_encoder.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/pagination.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/pydantic_utilities.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/query_encoder.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/remove_none_from_dict.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/request_options.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/data_manager.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/environment.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/bad_request_error.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/internal_server_error.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/files/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/files/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/base.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/create.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/data_examples.json +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/label_tags.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/object_tags.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/objects.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_create_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_create_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_update_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_update_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/model_providers/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/predictions/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/predictions/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/client_ext.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/exports/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_import_tasks_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_list_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_update_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/indicators/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/indicators/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/types/runs_list_request_project_subset.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/versions/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/py.typed +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/client_ext.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/types/tasks_list_request_fields.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/types/tasks_list_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation_filter_options.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation_last_action.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotations_dm_field.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotations_dm_field_last_action.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task_file_upload.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task_updated_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_user.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/comment.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/comment_created_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/converted_format.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/converted_format_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/data_manager_task_serializer.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_convert.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_create.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_create_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/file_upload.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/filter.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/filter_group.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_created_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_organization.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_project_subset.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicator_value.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend_auth_method.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend_state.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_created_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_organization.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_scope.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prediction.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_import.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_import_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_label_config.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_sampling.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_skip_queue.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_created_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_organization.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_created_by.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_organization.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_provider.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/refined_prompt_response_refinement_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3export_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_export_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_import_storage.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/serialization_option.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/serialization_options.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task_annotators_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task_filter_options.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/user_simple.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/view.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook_actions_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook_serializer_for_update.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/workspace.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/types/users_get_token_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/types/users_reset_token_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/version.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_create_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/views_update_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/client.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/types/__init__.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/types/members_create_response.py +0 -0
- {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/types/members_list_response_item.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: label-studio-sdk
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.8
|
|
4
4
|
Summary:
|
|
5
5
|
Requires-Python: >=3.8,<4.0
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -21,8 +21,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
21
21
|
Classifier: Typing :: Typed
|
|
22
22
|
Requires-Dist: Pillow (>=10.0.1)
|
|
23
23
|
Requires-Dist: appdirs (>=1.4.3)
|
|
24
|
+
Requires-Dist: datamodel-code-generator (==0.26.1)
|
|
24
25
|
Requires-Dist: httpx (>=0.21.2)
|
|
25
26
|
Requires-Dist: ijson (>=3.2.3)
|
|
27
|
+
Requires-Dist: jsf (>=0.11.2,<0.12.0)
|
|
26
28
|
Requires-Dist: jsonschema (>=4.23.0)
|
|
27
29
|
Requires-Dist: lxml (>=4.2.5)
|
|
28
30
|
Requires-Dist: nltk (>=3.9.1,<4.0.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "label-studio-sdk"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.8"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = []
|
|
@@ -34,6 +34,7 @@ Repository = 'https://github.com/HumanSignal/label-studio-sdk'
|
|
|
34
34
|
python = "^3.8"
|
|
35
35
|
Pillow = ">=10.0.1"
|
|
36
36
|
appdirs = ">=1.4.3"
|
|
37
|
+
datamodel-code-generator = "0.26.1"
|
|
37
38
|
httpx = ">=0.21.2"
|
|
38
39
|
ijson = ">=3.2.3"
|
|
39
40
|
jsonschema = ">=4.23.0"
|
|
@@ -48,6 +49,7 @@ typing_extensions = ">= 4.0.0"
|
|
|
48
49
|
ujson = ">=5.8.0"
|
|
49
50
|
xmljson = "0.2.1"
|
|
50
51
|
|
|
52
|
+
jsf = "^0.11.2"
|
|
51
53
|
[tool.poetry.dev-dependencies]
|
|
52
54
|
mypy = "1.0.1"
|
|
53
55
|
pytest = "^7.4.0"
|
|
@@ -35,6 +35,7 @@ from .types import (
|
|
|
35
35
|
GcsImportStorage,
|
|
36
36
|
GcsImportStorageStatus,
|
|
37
37
|
InferenceRun,
|
|
38
|
+
InferenceRunCostEstimate,
|
|
38
39
|
InferenceRunCreatedBy,
|
|
39
40
|
InferenceRunOrganization,
|
|
40
41
|
InferenceRunProjectSubset,
|
|
@@ -52,6 +53,7 @@ from .types import (
|
|
|
52
53
|
MlBackendAuthMethod,
|
|
53
54
|
MlBackendState,
|
|
54
55
|
ModelProviderConnection,
|
|
56
|
+
ModelProviderConnectionBudgetResetPeriod,
|
|
55
57
|
ModelProviderConnectionCreatedBy,
|
|
56
58
|
ModelProviderConnectionOrganization,
|
|
57
59
|
ModelProviderConnectionProvider,
|
|
@@ -87,6 +89,7 @@ from .types import (
|
|
|
87
89
|
SerializationOptions,
|
|
88
90
|
Task,
|
|
89
91
|
TaskAnnotatorsItem,
|
|
92
|
+
TaskCommentAuthorsItem,
|
|
90
93
|
TaskFilterOptions,
|
|
91
94
|
UserSimple,
|
|
92
95
|
View,
|
|
@@ -222,6 +225,7 @@ __all__ = [
|
|
|
222
225
|
"GcsImportStorageStatus",
|
|
223
226
|
"ImportStorageListTypesResponseItem",
|
|
224
227
|
"InferenceRun",
|
|
228
|
+
"InferenceRunCostEstimate",
|
|
225
229
|
"InferenceRunCreatedBy",
|
|
226
230
|
"InferenceRunOrganization",
|
|
227
231
|
"InferenceRunProjectSubset",
|
|
@@ -247,6 +251,7 @@ __all__ = [
|
|
|
247
251
|
"MlUpdateResponse",
|
|
248
252
|
"MlUpdateResponseAuthMethod",
|
|
249
253
|
"ModelProviderConnection",
|
|
254
|
+
"ModelProviderConnectionBudgetResetPeriod",
|
|
250
255
|
"ModelProviderConnectionCreatedBy",
|
|
251
256
|
"ModelProviderConnectionOrganization",
|
|
252
257
|
"ModelProviderConnectionProvider",
|
|
@@ -290,6 +295,7 @@ __all__ = [
|
|
|
290
295
|
"SerializationOptions",
|
|
291
296
|
"Task",
|
|
292
297
|
"TaskAnnotatorsItem",
|
|
298
|
+
"TaskCommentAuthorsItem",
|
|
293
299
|
"TaskFilterOptions",
|
|
294
300
|
"TasksListRequestFields",
|
|
295
301
|
"TasksListResponse",
|
|
@@ -82,17 +82,26 @@ def parse_config(config_string):
|
|
|
82
82
|
elif _is_input_tag(tag):
|
|
83
83
|
inputs[tag.attrib["name"]] = {
|
|
84
84
|
"type": tag.tag,
|
|
85
|
-
"value": tag.attrib["value"].lstrip("$"),
|
|
86
85
|
"valueType": tag.attrib.get("valueType"),
|
|
87
86
|
}
|
|
87
|
+
if 'value' in tag.attrib:
|
|
88
|
+
inputs[tag.attrib["name"]]["value"] = tag.attrib["value"].lstrip("$")
|
|
89
|
+
elif 'valueList' in tag.attrib:
|
|
90
|
+
inputs[tag.attrib["name"]]["valueList"] = tag.attrib["valueList"].lstrip("$")
|
|
91
|
+
else:
|
|
92
|
+
raise ValueError(
|
|
93
|
+
'Inspecting tag {tag_name}... found no "value" or "valueList" attributes.'.format(
|
|
94
|
+
tag_name=etree.tostring(tag, encoding="unicode").strip()[:50]
|
|
95
|
+
)
|
|
96
|
+
)
|
|
88
97
|
if tag.tag not in _LABEL_TAGS:
|
|
89
98
|
continue
|
|
90
99
|
parent_name = _get_parent_output_tag_name(tag, outputs)
|
|
91
100
|
if parent_name is not None:
|
|
92
|
-
actual_value = tag.attrib.get("alias") or tag.attrib.get("value")
|
|
101
|
+
actual_value = tag.attrib.get("alias") or tag.attrib.get("value") or tag.attrib.get("valueList")
|
|
93
102
|
if not actual_value:
|
|
94
103
|
logger.debug(
|
|
95
|
-
'Inspecting tag {tag_name}... found no "value" or "alias" attributes.'.format(
|
|
104
|
+
'Inspecting tag {tag_name}... found no "value", "valueList", or "alias" attributes.'.format(
|
|
96
105
|
tag_name=etree.tostring(tag, encoding="unicode").strip()[:50]
|
|
97
106
|
)
|
|
98
107
|
)
|
|
@@ -137,7 +146,7 @@ def _is_input_tag(tag):
|
|
|
137
146
|
"""
|
|
138
147
|
Check if tag is input
|
|
139
148
|
"""
|
|
140
|
-
return tag.attrib.get("name") and tag.attrib.get("value")
|
|
149
|
+
return tag.attrib.get("name") and (tag.attrib.get("value") or tag.attrib.get("valueList"))
|
|
141
150
|
|
|
142
151
|
|
|
143
152
|
def _is_output_tag(tag):
|
label_studio_sdk-1.0.8/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import types
|
|
3
|
+
import sys
|
|
4
|
+
import functools
|
|
5
|
+
from typing import Type, Dict, Any, Tuple, Generator
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from tempfile import TemporaryDirectory
|
|
8
|
+
from datamodel_code_generator import DataModelType, PythonVersion, LiteralType
|
|
9
|
+
from datamodel_code_generator.model import get_data_model_types
|
|
10
|
+
from datamodel_code_generator.parser.jsonschema import JsonSchemaParser
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
from contextlib import contextmanager
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@functools.lru_cache(maxsize=128)
|
|
16
|
+
def _generate_model_code(json_schema_str: str, class_name: str = 'MyModel') -> str:
|
|
17
|
+
|
|
18
|
+
data_model_types = get_data_model_types(
|
|
19
|
+
DataModelType.PydanticV2BaseModel,
|
|
20
|
+
target_python_version=PythonVersion.PY_311
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
parser = JsonSchemaParser(
|
|
24
|
+
json_schema_str,
|
|
25
|
+
data_model_type=data_model_types.data_model,
|
|
26
|
+
data_model_root_type=data_model_types.root_model,
|
|
27
|
+
data_model_field_type=data_model_types.field_model,
|
|
28
|
+
data_type_manager_type=data_model_types.data_type_manager,
|
|
29
|
+
dump_resolve_reference_action=data_model_types.dump_resolve_reference_action,
|
|
30
|
+
enum_field_as_literal=LiteralType.All,
|
|
31
|
+
class_name=class_name
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
model_code = parser.parse()
|
|
35
|
+
return model_code
|
|
36
|
+
|
|
37
|
+
@contextmanager
|
|
38
|
+
def json_schema_to_pydantic(json_schema: dict, class_name: str = 'MyModel') -> Generator[Type[BaseModel], None, None]:
|
|
39
|
+
"""
|
|
40
|
+
Convert a JSON schema to a Pydantic model and provide it as a context manager.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
json_schema (dict): The JSON schema to convert.
|
|
44
|
+
class_name (str, optional): The name of the generated Pydantic class. Defaults to 'MyModel'.
|
|
45
|
+
|
|
46
|
+
Example:
|
|
47
|
+
```python
|
|
48
|
+
example_schema = {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"sentiment": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "Sentiment of the text",
|
|
54
|
+
"enum": ["Positive", "Negative", "Neutral"],
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"required": ["sentiment"]
|
|
58
|
+
}
|
|
59
|
+
with json_schema_to_pydantic(example_schema) as ResponseModel:
|
|
60
|
+
instance = ResponseModel(sentiment='Positive')
|
|
61
|
+
print(instance.model_dump())
|
|
62
|
+
```
|
|
63
|
+
"""
|
|
64
|
+
# Convert the JSON schema dictionary to a JSON string
|
|
65
|
+
json_schema_str = json.dumps(json_schema)
|
|
66
|
+
|
|
67
|
+
# Generate Pydantic model code from the JSON schema string
|
|
68
|
+
model_code: str = _generate_model_code(json_schema_str, class_name)
|
|
69
|
+
|
|
70
|
+
# Create a unique module name using the id of the JSON schema string
|
|
71
|
+
module_name = f'dynamic_module_{id(json_schema_str)}'
|
|
72
|
+
|
|
73
|
+
# Create a new module object with the unique name and execute the generated model code in the context of the new module
|
|
74
|
+
mod = types.ModuleType(module_name)
|
|
75
|
+
exec(model_code, mod.__dict__)
|
|
76
|
+
model_class = getattr(mod, class_name)
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
# Add the new module to sys.modules to make it importable
|
|
80
|
+
# This is necessary to avoid Pydantic errors related to undefined models
|
|
81
|
+
sys.modules[module_name] = mod
|
|
82
|
+
yield model_class
|
|
83
|
+
finally:
|
|
84
|
+
if module_name in sys.modules:
|
|
85
|
+
del sys.modules[module_name]
|
|
86
|
+
|
|
@@ -35,22 +35,44 @@
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
|
-
"
|
|
38
|
+
"tag_with_name_and_toname": {
|
|
39
39
|
"type": "object",
|
|
40
|
-
"
|
|
41
|
-
{
|
|
42
|
-
"required": [
|
|
43
|
-
"@name",
|
|
44
|
-
"@valueList"
|
|
45
|
-
]
|
|
46
|
-
},
|
|
40
|
+
"oneOf": [
|
|
47
41
|
{
|
|
48
42
|
"required": [
|
|
49
43
|
"@name",
|
|
50
|
-
"@
|
|
44
|
+
"@toName"
|
|
51
45
|
]
|
|
52
46
|
}
|
|
53
47
|
],
|
|
48
|
+
"properties": {
|
|
49
|
+
"@name": {
|
|
50
|
+
"$ref": "#/definitions/@name"
|
|
51
|
+
},
|
|
52
|
+
"@toName": {
|
|
53
|
+
"$ref": "#/definitions/@toName"
|
|
54
|
+
},
|
|
55
|
+
"$": {
|
|
56
|
+
"$ref": "#/definitions/$"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"tag_with_value_required_name": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"oneOf": [
|
|
63
|
+
{
|
|
64
|
+
"required": [
|
|
65
|
+
"@name",
|
|
66
|
+
"@value"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"required": [
|
|
71
|
+
"@name",
|
|
72
|
+
"@valueList"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
],
|
|
54
76
|
"properties": {
|
|
55
77
|
"@value": {
|
|
56
78
|
"$ref": "#/definitions/@value"
|
|
@@ -80,6 +102,13 @@
|
|
|
80
102
|
"items": {"$ref": "#/definitions/tag_with_value_required_name"}
|
|
81
103
|
}, {"$ref": "#/definitions/tag_with_value_required_name"}]
|
|
82
104
|
},
|
|
105
|
+
"tags_with_name_and_toname": {
|
|
106
|
+
"anyOf": [{"$ref": "#/definitions/tag_with_name_and_toname"},
|
|
107
|
+
{
|
|
108
|
+
"type": "array",
|
|
109
|
+
"items": {"$ref": "#/definitions/tag_with_name_and_toname"}
|
|
110
|
+
}]
|
|
111
|
+
},
|
|
83
112
|
"View": {
|
|
84
113
|
"type": "object",
|
|
85
114
|
"additionalProperties": true,
|
|
@@ -92,7 +121,8 @@
|
|
|
92
121
|
"Text": {"$ref": "#/definitions/tags_with_value_required_name"},
|
|
93
122
|
"HyperText": {"$ref": "#/definitions/tags_with_value_required_name"},
|
|
94
123
|
"View": {"$ref": "#/definitions/MaybeMultipleView"},
|
|
95
|
-
"TextArea": {"$ref": "#/definitions/MaybeMultipleTextAreas"}
|
|
124
|
+
"TextArea": {"$ref": "#/definitions/MaybeMultipleTextAreas"},
|
|
125
|
+
"Number": {"$ref": "#/definitions/tags_with_name_and_toname"}
|
|
96
126
|
}
|
|
97
127
|
},
|
|
98
128
|
"MaybeMultipleView": {
|
|
@@ -219,7 +249,8 @@
|
|
|
219
249
|
"Image": {"$ref": "#/definitions/tags_with_value_required_name"},
|
|
220
250
|
"Text": {"$ref": "#/definitions/tags_with_value_required_name"},
|
|
221
251
|
"HyperText": {"$ref": "#/definitions/tags_with_value_required_name"},
|
|
222
|
-
"TextArea": {"$ref": "#/definitions/MaybeMultipleTextAreas"}
|
|
252
|
+
"TextArea": {"$ref": "#/definitions/MaybeMultipleTextAreas"},
|
|
253
|
+
"Number": {"$ref": "#/definitions/tags_with_name_and_toname"}
|
|
223
254
|
}
|
|
224
255
|
}
|
|
225
256
|
}
|
{label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/converter.py
RENAMED
|
@@ -10,7 +10,6 @@ from copy import deepcopy
|
|
|
10
10
|
from datetime import datetime
|
|
11
11
|
from enum import Enum
|
|
12
12
|
from glob import glob
|
|
13
|
-
from operator import itemgetter
|
|
14
13
|
from shutil import copy2
|
|
15
14
|
from typing import Optional
|
|
16
15
|
|
|
@@ -282,12 +281,16 @@ class Converter(object):
|
|
|
282
281
|
for name, info in self._schema.items():
|
|
283
282
|
if output_tags is not None and name not in output_tags:
|
|
284
283
|
continue
|
|
285
|
-
|
|
284
|
+
for input_tag in info["inputs"]:
|
|
285
|
+
for value_key_name in ["value", "valueList"]:
|
|
286
|
+
if value_key_name in input_tag:
|
|
287
|
+
data_keys.add(input_tag[value_key_name])
|
|
286
288
|
output_tag_names.append(name)
|
|
287
289
|
|
|
288
290
|
return list(data_keys), output_tag_names
|
|
289
291
|
|
|
290
292
|
def _get_supported_formats(self):
|
|
293
|
+
is_mig = False
|
|
291
294
|
if len(self._data_keys) > 1:
|
|
292
295
|
return [
|
|
293
296
|
Format.JSON.name,
|
|
@@ -300,6 +303,8 @@ class Converter(object):
|
|
|
300
303
|
for info in self._schema.values():
|
|
301
304
|
output_tag_types.add(info["type"])
|
|
302
305
|
for input_tag in info["inputs"]:
|
|
306
|
+
if input_tag.get("valueList"):
|
|
307
|
+
is_mig = True
|
|
303
308
|
if input_tag["type"] == "Text" and input_tag.get("valueType") == "url":
|
|
304
309
|
logger.error('valueType="url" are not supported for text inputs')
|
|
305
310
|
continue
|
|
@@ -308,7 +313,7 @@ class Converter(object):
|
|
|
308
313
|
all_formats = [f.name for f in Format]
|
|
309
314
|
if not ("Text" in input_tag_types and "Labels" in output_tag_types):
|
|
310
315
|
all_formats.remove(Format.CONLL2003.name)
|
|
311
|
-
if not (
|
|
316
|
+
if is_mig or not (
|
|
312
317
|
"Image" in input_tag_types
|
|
313
318
|
and (
|
|
314
319
|
"RectangleLabels" in output_tag_types
|
|
@@ -317,7 +322,7 @@ class Converter(object):
|
|
|
317
322
|
)
|
|
318
323
|
):
|
|
319
324
|
all_formats.remove(Format.VOC.name)
|
|
320
|
-
if not (
|
|
325
|
+
if is_mig or not (
|
|
321
326
|
"Image" in input_tag_types
|
|
322
327
|
and (
|
|
323
328
|
"RectangleLabels" in output_tag_types
|
|
@@ -346,7 +351,7 @@ class Converter(object):
|
|
|
346
351
|
and "TextArea" in output_tag_types
|
|
347
352
|
):
|
|
348
353
|
all_formats.remove(Format.ASR_MANIFEST.name)
|
|
349
|
-
if 'Video' in input_tag_types and 'TimelineLabels' in output_tag_types:
|
|
354
|
+
if is_mig or ('Video' in input_tag_types and 'TimelineLabels' in output_tag_types):
|
|
350
355
|
all_formats.remove(Format.YOLO_OBB.name)
|
|
351
356
|
|
|
352
357
|
return all_formats
|
{label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/client_wrapper.py
RENAMED
|
@@ -17,7 +17,7 @@ class BaseClientWrapper:
|
|
|
17
17
|
headers: typing.Dict[str, str] = {
|
|
18
18
|
"X-Fern-Language": "Python",
|
|
19
19
|
"X-Fern-SDK-Name": "label-studio-sdk",
|
|
20
|
-
"X-Fern-SDK-Version": "1.0.
|
|
20
|
+
"X-Fern-SDK-Version": "1.0.8",
|
|
21
21
|
}
|
|
22
22
|
headers["Authorization"] = f"Token {self.api_key}"
|
|
23
23
|
return headers
|
|
@@ -93,6 +93,15 @@ class ControlTag(LabelStudioTag):
|
|
|
93
93
|
and tag.tag not in _NOT_CONTROL_TAGS
|
|
94
94
|
)
|
|
95
95
|
|
|
96
|
+
def to_json_schema(self):
|
|
97
|
+
"""
|
|
98
|
+
Converts the current ControlTag instance into a JSON Schema.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
dict: A dictionary representing the JSON Schema.
|
|
102
|
+
"""
|
|
103
|
+
return {"type": "string"}
|
|
104
|
+
|
|
96
105
|
@classmethod
|
|
97
106
|
def parse_node(cls, tag: xml.etree.ElementTree.Element, tags_mapping=None) -> "ControlTag":
|
|
98
107
|
"""
|
|
@@ -261,11 +270,11 @@ class ControlTag(LabelStudioTag):
|
|
|
261
270
|
|
|
262
271
|
def _validate_labels(self, labels):
|
|
263
272
|
"""Check that labels is a subset of self.labels, used for
|
|
264
|
-
example when you're validate the
|
|
273
|
+
example when you're validate the annotation or prediction to
|
|
265
274
|
make sure there no undefined labels used.
|
|
266
275
|
|
|
267
276
|
"""
|
|
268
|
-
if not self.labels:
|
|
277
|
+
if not self.labels or not labels:
|
|
269
278
|
return True
|
|
270
279
|
|
|
271
280
|
return set(labels).issubset(set(self.labels))
|
|
@@ -335,10 +344,11 @@ class ControlTag(LabelStudioTag):
|
|
|
335
344
|
|
|
336
345
|
return to_name
|
|
337
346
|
else:
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
347
|
+
# TODO: "Pairwise" tag has multiple to_name
|
|
348
|
+
# if len(self.to_name) > 1:
|
|
349
|
+
# raise Exception(
|
|
350
|
+
# "Multiple to_name in control tag, specify to_name in function"
|
|
351
|
+
# )
|
|
342
352
|
|
|
343
353
|
return self.to_name[0]
|
|
344
354
|
|
|
@@ -415,7 +425,7 @@ class ControlTag(LabelStudioTag):
|
|
|
415
425
|
)
|
|
416
426
|
|
|
417
427
|
kwargs[self._label_attr_name] = label
|
|
418
|
-
|
|
428
|
+
|
|
419
429
|
return self._label_simple(to_name=to_name, **kwargs)
|
|
420
430
|
|
|
421
431
|
def label(
|
|
@@ -446,12 +456,29 @@ class ControlTag(LabelStudioTag):
|
|
|
446
456
|
Region
|
|
447
457
|
A new Region object with the specified label applied.
|
|
448
458
|
"""
|
|
449
|
-
if hasattr(self, "_label_attr_name"):
|
|
459
|
+
if hasattr(self, "_label_attr_name") and label is not None:
|
|
450
460
|
return self._label_with_labels(
|
|
451
461
|
label=label, to_name=to_name, *args, **kwargs
|
|
452
462
|
)
|
|
453
463
|
else:
|
|
454
464
|
return self._label_simple(to_name=to_name, *args, **kwargs)
|
|
465
|
+
|
|
466
|
+
def get_labels(self, regions: List[Dict]):
|
|
467
|
+
"""
|
|
468
|
+
Returns the simplified representation of the label. Sort of a reverse to label() method to retrieve an input `label` from an output regions
|
|
469
|
+
"""
|
|
470
|
+
values = [region.get('value') for region in regions if region.get('from_name') == self.name]
|
|
471
|
+
values = list(filter(lambda x: x is not None, values))
|
|
472
|
+
if not hasattr(self, "_label_attr_name"):
|
|
473
|
+
return values
|
|
474
|
+
labels = []
|
|
475
|
+
for value in values:
|
|
476
|
+
if len(value) == 1 and self._label_attr_name in value:
|
|
477
|
+
v = value[self._label_attr_name]
|
|
478
|
+
labels.append(v[0] if len(v) == 1 else v)
|
|
479
|
+
else:
|
|
480
|
+
labels.append(value)
|
|
481
|
+
return labels[0] if len(labels) == 1 else labels
|
|
455
482
|
|
|
456
483
|
def as_tuple(self):
|
|
457
484
|
""" """
|
|
@@ -485,6 +512,34 @@ class ChoicesTag(ControlTag):
|
|
|
485
512
|
_label_attr_name: str = "choices"
|
|
486
513
|
_value_class: Type[ChoicesValue] = ChoicesValue
|
|
487
514
|
|
|
515
|
+
@property
|
|
516
|
+
def is_multiple_choice(self):
|
|
517
|
+
return self.attr.get("choice") == "multiple"
|
|
518
|
+
|
|
519
|
+
def to_json_schema(self):
|
|
520
|
+
"""
|
|
521
|
+
Converts the current ChoicesTag instance into a JSON Schema.
|
|
522
|
+
|
|
523
|
+
Returns:
|
|
524
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
525
|
+
"""
|
|
526
|
+
if self.is_multiple_choice:
|
|
527
|
+
return {
|
|
528
|
+
"type": "array",
|
|
529
|
+
"items": {
|
|
530
|
+
"type": "string",
|
|
531
|
+
"enum": self.labels,
|
|
532
|
+
},
|
|
533
|
+
"uniqueItems": True,
|
|
534
|
+
"description": f"Choices for {self.to_name[0]}",
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
return {
|
|
538
|
+
"type": "string",
|
|
539
|
+
"enum": self.labels,
|
|
540
|
+
"description": f"Choices for {self.to_name[0]}"
|
|
541
|
+
}
|
|
542
|
+
|
|
488
543
|
|
|
489
544
|
class LabelsValue(SpanSelection):
|
|
490
545
|
labels: List[str]
|
|
@@ -496,6 +551,41 @@ class LabelsTag(ControlTag):
|
|
|
496
551
|
_label_attr_name: str = "labels"
|
|
497
552
|
_value_class: Type[LabelsValue] = LabelsValue
|
|
498
553
|
|
|
554
|
+
def to_json_schema(self):
|
|
555
|
+
"""
|
|
556
|
+
Converts the current LabelsTag instance into a JSON Schema.
|
|
557
|
+
|
|
558
|
+
Returns:
|
|
559
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
560
|
+
"""
|
|
561
|
+
return {
|
|
562
|
+
"type": "array",
|
|
563
|
+
"items": {
|
|
564
|
+
"type": "object",
|
|
565
|
+
"required": ["start", "end", "labels"],
|
|
566
|
+
"properties": {
|
|
567
|
+
"start": {
|
|
568
|
+
"type": "integer",
|
|
569
|
+
"minimum": 0
|
|
570
|
+
},
|
|
571
|
+
"end": {
|
|
572
|
+
"type": "integer",
|
|
573
|
+
"minimum": 0
|
|
574
|
+
},
|
|
575
|
+
"labels": {
|
|
576
|
+
"type": "array",
|
|
577
|
+
"items": {
|
|
578
|
+
"type": "string",
|
|
579
|
+
"enum": self.labels
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"text": {
|
|
583
|
+
"type": "string"
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
"description": f"Labels and span indices for {self.to_name[0]}"
|
|
588
|
+
}
|
|
499
589
|
|
|
500
590
|
## Image tags
|
|
501
591
|
|
|
@@ -684,6 +774,26 @@ class NumberTag(ControlTag):
|
|
|
684
774
|
""" """
|
|
685
775
|
tag: str = "Number"
|
|
686
776
|
_value_class: Type[NumberValue] = NumberValue
|
|
777
|
+
_label_attr_name: str = "number"
|
|
778
|
+
|
|
779
|
+
def to_json_schema(self):
|
|
780
|
+
"""
|
|
781
|
+
Converts the current NumberTag instance into a JSON Schema.
|
|
782
|
+
|
|
783
|
+
Returns:
|
|
784
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
785
|
+
"""
|
|
786
|
+
schema = {
|
|
787
|
+
"type": "number",
|
|
788
|
+
"description": f"Number for {self.to_name[0]}"
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
if 'min' in self.attr:
|
|
792
|
+
schema["minimum"] = float(self.attr['min'])
|
|
793
|
+
if 'max' in self.attr:
|
|
794
|
+
schema["maximum"] = float(self.attr['max'])
|
|
795
|
+
|
|
796
|
+
return schema
|
|
687
797
|
|
|
688
798
|
|
|
689
799
|
class DateTimeValue(BaseModel):
|
|
@@ -694,6 +804,25 @@ class DateTimeTag(ControlTag):
|
|
|
694
804
|
""" """
|
|
695
805
|
tag: str = "DateTime"
|
|
696
806
|
_value_class: Type[DateTimeValue] = DateTimeValue
|
|
807
|
+
_label_attr_name: str = "datetime"
|
|
808
|
+
|
|
809
|
+
def _label_simple(self, to_name: Optional[str] = None, *args, **kwargs) -> Region:
|
|
810
|
+
# TODO: temporary fix to force datetime to be a string
|
|
811
|
+
kwargs['datetime'] = kwargs['datetime'][0]
|
|
812
|
+
return super()._label_simple(to_name, *args, **kwargs)
|
|
813
|
+
|
|
814
|
+
def to_json_schema(self):
|
|
815
|
+
"""
|
|
816
|
+
Converts the current DateTimeTag instance into a JSON Schema.
|
|
817
|
+
|
|
818
|
+
Returns:
|
|
819
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
820
|
+
"""
|
|
821
|
+
return {
|
|
822
|
+
"type": "string",
|
|
823
|
+
"format": "date-time",
|
|
824
|
+
"description": f"Date and time for {self.to_name[0]}"
|
|
825
|
+
}
|
|
697
826
|
|
|
698
827
|
|
|
699
828
|
class HyperTextLabelsValue(SpanSelectionOffsets):
|
|
@@ -715,12 +844,27 @@ class PairwiseTag(ControlTag):
|
|
|
715
844
|
""" """
|
|
716
845
|
tag: str = "Pairwise"
|
|
717
846
|
_value_class: Type[PairwiseValue] = PairwiseValue
|
|
847
|
+
_label_attr_name: str = "selected"
|
|
718
848
|
|
|
719
|
-
def label(self,
|
|
849
|
+
def label(self, label):
|
|
720
850
|
""" """
|
|
721
|
-
value = PairwiseValue(selected=
|
|
851
|
+
value = PairwiseValue(selected=label)
|
|
852
|
+
# <Pairwise> tag has equal from_name and to_name, and string label that's not a list of strings
|
|
722
853
|
return Region(from_tag=self, to_tag=self, value=value)
|
|
723
854
|
|
|
855
|
+
def to_json_schema(self):
|
|
856
|
+
"""
|
|
857
|
+
Converts the current PairwiseTag instance into a JSON Schema.
|
|
858
|
+
|
|
859
|
+
Returns:
|
|
860
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
861
|
+
"""
|
|
862
|
+
return {
|
|
863
|
+
"type": "string",
|
|
864
|
+
"enum": ["left", "right"],
|
|
865
|
+
"description": f"Pairwise selection between {self.to_name[0]} (left) and {self.to_name[1]} (right)"
|
|
866
|
+
}
|
|
867
|
+
|
|
724
868
|
|
|
725
869
|
class ParagraphLabelsValue(SpanSelectionOffsets):
|
|
726
870
|
paragraphlabels: List[str]
|
|
@@ -759,6 +903,22 @@ class RatingTag(ControlTag):
|
|
|
759
903
|
""" """
|
|
760
904
|
tag: str = "Rating"
|
|
761
905
|
_value_class: Type[RatingValue] = RatingValue
|
|
906
|
+
_label_attr_name: str = "rating"
|
|
907
|
+
|
|
908
|
+
def to_json_schema(self):
|
|
909
|
+
"""
|
|
910
|
+
Converts the current RatingTag instance into a JSON Schema.
|
|
911
|
+
|
|
912
|
+
Returns:
|
|
913
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
914
|
+
"""
|
|
915
|
+
max_rating = int(self.attr.get('maxRating', 5)) # Default to 5 if not specified
|
|
916
|
+
return {
|
|
917
|
+
"type": "integer",
|
|
918
|
+
"minimum": 0,
|
|
919
|
+
"maximum": max_rating,
|
|
920
|
+
"description": f"Rating for {self.to_name[0]} (0 to {max_rating})"
|
|
921
|
+
}
|
|
762
922
|
|
|
763
923
|
|
|
764
924
|
class RelationsTag(ControlTag):
|
|
@@ -784,6 +944,27 @@ class TaxonomyTag(ControlTag):
|
|
|
784
944
|
""" """
|
|
785
945
|
tag: str = "Taxonomy"
|
|
786
946
|
_value_class: Type[TaxonomyValue] = TaxonomyValue
|
|
947
|
+
_label_attr_name: str = "taxonomy"
|
|
948
|
+
|
|
949
|
+
def to_json_schema(self):
|
|
950
|
+
"""
|
|
951
|
+
Converts the current TaxonomyTag instance into a JSON Schema.
|
|
952
|
+
|
|
953
|
+
Returns:
|
|
954
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
955
|
+
"""
|
|
956
|
+
return {
|
|
957
|
+
"type": "array",
|
|
958
|
+
"items": {
|
|
959
|
+
"type": "array",
|
|
960
|
+
"items": {
|
|
961
|
+
"type": "string",
|
|
962
|
+
# TODO: enforce the order of the enums according to the taxonomy tree
|
|
963
|
+
"enum": self.labels
|
|
964
|
+
}
|
|
965
|
+
},
|
|
966
|
+
"description": f"Taxonomy for {self.to_name[0]}. Each item is a path from root to selected node."
|
|
967
|
+
}
|
|
787
968
|
|
|
788
969
|
|
|
789
970
|
class TextAreaValue(BaseModel):
|
|
@@ -794,6 +975,20 @@ class TextAreaTag(ControlTag):
|
|
|
794
975
|
""" """
|
|
795
976
|
tag: str = "TextArea"
|
|
796
977
|
_value_class: Type[TextAreaValue] = TextAreaValue
|
|
978
|
+
_label_attr_name: str = "text"
|
|
979
|
+
|
|
980
|
+
def to_json_schema(self):
|
|
981
|
+
"""
|
|
982
|
+
Converts the current TextAreaTag instance into a JSON Schema.
|
|
983
|
+
|
|
984
|
+
Returns:
|
|
985
|
+
dict: A dictionary representing the JSON Schema compatible with OpenAPI 3.
|
|
986
|
+
"""
|
|
987
|
+
return {
|
|
988
|
+
"type": "string",
|
|
989
|
+
"description": f"Text for {self.to_name[0]}"
|
|
990
|
+
}
|
|
991
|
+
|
|
797
992
|
|
|
798
993
|
|
|
799
994
|
class TimeSeriesValue(SpanSelection):
|