label-studio-sdk 1.0.11__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.

Files changed (368) hide show
  1. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/PKG-INFO +2 -2
  2. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/pyproject.toml +2 -2
  3. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/__init__.py +4 -0
  4. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/converter.py +22 -0
  5. label_studio_sdk-1.0.12/src/label_studio_sdk/converter/exports/brush_to_coco.py +332 -0
  6. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/main.py +14 -0
  7. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/jwt_settings/client.py +2 -2
  8. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tokens/client.py +140 -0
  9. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/__init__.py +4 -0
  10. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation.py +2 -1
  11. label_studio_sdk-1.0.12/src/label_studio_sdk/types/annotation_completed_by.py +6 -0
  12. label_studio_sdk-1.0.12/src/label_studio_sdk/types/rotate_token_response.py +22 -0
  13. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/LICENSE +0 -0
  14. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/README.md +0 -0
  15. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/__init__.py +0 -0
  16. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/eval/categorical.py +0 -0
  17. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
  18. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/__init__.py +0 -0
  19. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +0 -0
  20. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/__init__.py +0 -0
  21. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/exceptions.py +0 -0
  22. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +0 -0
  23. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +0 -0
  24. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/params.py +0 -0
  25. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/__init__.py +0 -0
  26. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/beam.py +0 -0
  27. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/example.py +0 -0
  28. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/etl/registry.py +0 -0
  29. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/__init__.py +0 -0
  30. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/video.py +0 -0
  31. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_extensions/pager_ext.py +0 -0
  32. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/__init__.py +0 -0
  33. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/client.py +0 -0
  34. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/exceptions.py +0 -0
  35. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/project.py +0 -0
  36. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/schema/label_config_schema.json +0 -0
  37. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/users.py +0 -0
  38. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/utils.py +0 -0
  39. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/_legacy/workspaces.py +0 -0
  40. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/__init__.py +0 -0
  41. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/client.py +0 -0
  42. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/__init__.py +0 -0
  43. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters.py +0 -0
  44. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_conjunction.py +0 -0
  45. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +0 -0
  46. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_filter.py +0 -0
  47. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_operator.py +0 -0
  48. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +0 -0
  49. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_id.py +0 -0
  50. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_ordering_item.py +0 -0
  51. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items.py +0 -0
  52. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +0 -0
  53. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +0 -0
  54. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/__init__.py +0 -0
  55. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/client.py +0 -0
  56. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/__init__.py +0 -0
  57. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/annotations_create_bulk_request_selected_items.py +0 -0
  58. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +0 -0
  59. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/base_client.py +0 -0
  60. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/client.py +0 -0
  61. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/comments/__init__.py +0 -0
  62. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/comments/client.py +0 -0
  63. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/__init__.py +0 -0
  64. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/audio.py +0 -0
  65. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/brush.py +0 -0
  66. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/__init__.py +0 -0
  67. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/csv.py +0 -0
  68. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/exports/csv2.py +0 -0
  69. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/funsd.py +0 -0
  70. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/__init__.py +0 -0
  71. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/coco.py +0 -0
  72. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/colors.py +0 -0
  73. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/label_config.py +0 -0
  74. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/pathtrack.py +0 -0
  75. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/imports/yolo.py +0 -0
  76. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/converter/utils.py +0 -0
  77. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/__init__.py +0 -0
  78. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/api_error.py +0 -0
  79. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/client_wrapper.py +0 -0
  80. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/datetime_utils.py +0 -0
  81. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/file.py +0 -0
  82. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/http_client.py +0 -0
  83. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/jsonable_encoder.py +0 -0
  84. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/pagination.py +0 -0
  85. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/pydantic_utilities.py +0 -0
  86. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/query_encoder.py +0 -0
  87. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/remove_none_from_dict.py +0 -0
  88. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/request_options.py +0 -0
  89. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/core/serialization.py +0 -0
  90. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/data_manager.py +0 -0
  91. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/environment.py +0 -0
  92. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/__init__.py +0 -0
  93. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/bad_request_error.py +0 -0
  94. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/internal_server_error.py +0 -0
  95. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/not_found_error.py +0 -0
  96. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/errors/unauthorized_error.py +0 -0
  97. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/__init__.py +0 -0
  98. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/__init__.py +0 -0
  99. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/client.py +0 -0
  100. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/__init__.py +0 -0
  101. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/azure_create_response.py +0 -0
  102. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/azure/types/azure_update_response.py +0 -0
  103. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/client.py +0 -0
  104. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/__init__.py +0 -0
  105. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/client.py +0 -0
  106. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/__init__.py +0 -0
  107. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +0 -0
  108. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +0 -0
  109. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/__init__.py +0 -0
  110. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/client.py +0 -0
  111. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/__init__.py +0 -0
  112. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/local_create_response.py +0 -0
  113. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/local/types/local_update_response.py +0 -0
  114. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/__init__.py +0 -0
  115. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/client.py +0 -0
  116. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/__init__.py +0 -0
  117. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/redis_create_response.py +0 -0
  118. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/redis/types/redis_update_response.py +0 -0
  119. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/__init__.py +0 -0
  120. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/client.py +0 -0
  121. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/__init__.py +0 -0
  122. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/s3create_response.py +0 -0
  123. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3/types/s3update_response.py +0 -0
  124. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3s/__init__.py +0 -0
  125. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/s3s/client.py +0 -0
  126. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/types/__init__.py +0 -0
  127. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +0 -0
  128. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/files/__init__.py +0 -0
  129. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/files/client.py +0 -0
  130. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/__init__.py +0 -0
  131. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/__init__.py +0 -0
  132. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/client.py +0 -0
  133. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/__init__.py +0 -0
  134. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/azure_create_response.py +0 -0
  135. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/azure/types/azure_update_response.py +0 -0
  136. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/client.py +0 -0
  137. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/__init__.py +0 -0
  138. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/client.py +0 -0
  139. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/__init__.py +0 -0
  140. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +0 -0
  141. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +0 -0
  142. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/__init__.py +0 -0
  143. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/client.py +0 -0
  144. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/__init__.py +0 -0
  145. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/local_create_response.py +0 -0
  146. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/local/types/local_update_response.py +0 -0
  147. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/__init__.py +0 -0
  148. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/client.py +0 -0
  149. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/__init__.py +0 -0
  150. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/redis_create_response.py +0 -0
  151. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/redis/types/redis_update_response.py +0 -0
  152. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/__init__.py +0 -0
  153. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/client.py +0 -0
  154. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/__init__.py +0 -0
  155. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/s3create_response.py +0 -0
  156. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3/types/s3update_response.py +0 -0
  157. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3s/__init__.py +0 -0
  158. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/s3s/client.py +0 -0
  159. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/types/__init__.py +0 -0
  160. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +0 -0
  161. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/jwt_settings/__init__.py +0 -0
  162. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/__init__.py +0 -0
  163. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/base.py +0 -0
  164. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/control_tags.py +0 -0
  165. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/create.py +0 -0
  166. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/data_examples.json +0 -0
  167. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/interface.py +0 -0
  168. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/label_tags.py +0 -0
  169. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/object_tags.py +0 -0
  170. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/objects.py +0 -0
  171. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/label_interface/region.py +0 -0
  172. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/__init__.py +0 -0
  173. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/client.py +0 -0
  174. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/__init__.py +0 -0
  175. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_request_auth_method.py +0 -0
  176. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_response.py +0 -0
  177. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_create_response_auth_method.py +0 -0
  178. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_request_auth_method.py +0 -0
  179. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_response.py +0 -0
  180. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/ml/types/ml_update_response_auth_method.py +0 -0
  181. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/model_providers/__init__.py +0 -0
  182. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/model_providers/client.py +0 -0
  183. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/predictions/__init__.py +0 -0
  184. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/predictions/client.py +0 -0
  185. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/__init__.py +0 -0
  186. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/client.py +0 -0
  187. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/client_ext.py +0 -0
  188. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/__init__.py +0 -0
  189. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/client.py +0 -0
  190. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/client_ext.py +0 -0
  191. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/__init__.py +0 -0
  192. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/exports_convert_response.py +0 -0
  193. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/exports/types/exports_list_formats_response_item.py +0 -0
  194. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/pauses/__init__.py +0 -0
  195. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/pauses/client.py +0 -0
  196. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/__init__.py +0 -0
  197. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_create_response.py +0 -0
  198. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_import_tasks_response.py +0 -0
  199. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_list_response.py +0 -0
  200. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/projects/types/projects_update_response.py +0 -0
  201. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/__init__.py +0 -0
  202. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/client.py +0 -0
  203. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/indicators/__init__.py +0 -0
  204. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/indicators/client.py +0 -0
  205. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/__init__.py +0 -0
  206. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/client.py +0 -0
  207. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/types/__init__.py +0 -0
  208. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/runs/types/runs_list_request_project_subset.py +0 -0
  209. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/__init__.py +0 -0
  210. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +0 -0
  211. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +0 -0
  212. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +0 -0
  213. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +0 -0
  214. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/versions/__init__.py +0 -0
  215. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/prompts/versions/client.py +0 -0
  216. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/py.typed +0 -0
  217. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/__init__.py +0 -0
  218. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/client.py +0 -0
  219. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/client_ext.py +0 -0
  220. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/__init__.py +0 -0
  221. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/tasks_list_request_fields.py +0 -0
  222. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tasks/types/tasks_list_response.py +0 -0
  223. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tokens/__init__.py +0 -0
  224. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/tokens/client_ext.py +0 -0
  225. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/access_token_response.py +0 -0
  226. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation_filter_options.py +0 -0
  227. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotation_last_action.py +0 -0
  228. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotations_dm_field.py +0 -0
  229. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/annotations_dm_field_last_action.py +0 -0
  230. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/api_token_response.py +0 -0
  231. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_export_storage.py +0 -0
  232. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_export_storage_status.py +0 -0
  233. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_import_storage.py +0 -0
  234. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/azure_blob_import_storage_status.py +0 -0
  235. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task.py +0 -0
  236. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task_file_upload.py +0 -0
  237. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_task_updated_by.py +0 -0
  238. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/base_user.py +0 -0
  239. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/comment.py +0 -0
  240. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/comment_created_by.py +0 -0
  241. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/converted_format.py +0 -0
  242. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/converted_format_status.py +0 -0
  243. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer.py +0 -0
  244. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +0 -0
  245. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +0 -0
  246. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +0 -0
  247. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export.py +0 -0
  248. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_format.py +0 -0
  249. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_snapshot.py +0 -0
  250. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_snapshot_status.py +0 -0
  251. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/export_status.py +0 -0
  252. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/file_upload.py +0 -0
  253. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/filter.py +0 -0
  254. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/filter_group.py +0 -0
  255. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_export_storage.py +0 -0
  256. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_export_storage_status.py +0 -0
  257. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_import_storage.py +0 -0
  258. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/gcs_import_storage_status.py +0 -0
  259. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run.py +0 -0
  260. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_cost_estimate.py +0 -0
  261. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_created_by.py +0 -0
  262. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_organization.py +0 -0
  263. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_project_subset.py +0 -0
  264. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/inference_run_status.py +0 -0
  265. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/jwt_settings_response.py +0 -0
  266. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicator_value.py +0 -0
  267. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators.py +0 -0
  268. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item.py +0 -0
  269. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +0 -0
  270. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +0 -0
  271. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_export_storage.py +0 -0
  272. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_export_storage_status.py +0 -0
  273. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_import_storage.py +0 -0
  274. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/local_files_import_storage_status.py +0 -0
  275. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend.py +0 -0
  276. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend_auth_method.py +0 -0
  277. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/ml_backend_state.py +0 -0
  278. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection.py +0 -0
  279. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_budget_reset_period.py +0 -0
  280. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_created_by.py +0 -0
  281. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_organization.py +0 -0
  282. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_provider.py +0 -0
  283. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/model_provider_connection_scope.py +0 -0
  284. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/pause.py +0 -0
  285. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/pause_paused_by.py +0 -0
  286. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prediction.py +0 -0
  287. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project.py +0 -0
  288. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_import.py +0 -0
  289. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_import_status.py +0 -0
  290. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_label_config.py +0 -0
  291. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_sampling.py +0 -0
  292. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/project_skip_queue.py +0 -0
  293. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt.py +0 -0
  294. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_associated_projects_item.py +0 -0
  295. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_associated_projects_item_id.py +0 -0
  296. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_created_by.py +0 -0
  297. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_organization.py +0 -0
  298. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version.py +0 -0
  299. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_created_by.py +0 -0
  300. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_organization.py +0 -0
  301. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/prompt_version_provider.py +0 -0
  302. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_export_storage.py +0 -0
  303. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_export_storage_status.py +0 -0
  304. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_import_storage.py +0 -0
  305. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/redis_import_storage_status.py +0 -0
  306. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/refined_prompt_response.py +0 -0
  307. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/refined_prompt_response_refinement_status.py +0 -0
  308. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3export_storage.py +0 -0
  309. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3export_storage_status.py +0 -0
  310. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3import_storage.py +0 -0
  311. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3import_storage_status.py +0 -0
  312. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_export_storage.py +0 -0
  313. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_import_storage.py +0 -0
  314. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/s3s_import_storage_status.py +0 -0
  315. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/serialization_option.py +0 -0
  316. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/serialization_options.py +0 -0
  317. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task.py +0 -0
  318. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_annotators_item.py +0 -0
  319. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_comment_authors_item.py +0 -0
  320. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/task_filter_options.py +0 -0
  321. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/user_simple.py +0 -0
  322. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/view.py +0 -0
  323. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook.py +0 -0
  324. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_actions_item.py +0 -0
  325. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_serializer_for_update.py +0 -0
  326. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +0 -0
  327. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/types/workspace.py +0 -0
  328. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/__init__.py +0 -0
  329. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/client.py +0 -0
  330. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/__init__.py +0 -0
  331. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/users_get_token_response.py +0 -0
  332. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/users/types/users_reset_token_response.py +0 -0
  333. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/version.py +0 -0
  334. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/__init__.py +0 -0
  335. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/client.py +0 -0
  336. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/__init__.py +0 -0
  337. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/versions_get_response.py +0 -0
  338. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/versions/types/versions_get_response_edition.py +0 -0
  339. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/__init__.py +0 -0
  340. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/client.py +0 -0
  341. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/__init__.py +0 -0
  342. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data.py +0 -0
  343. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters.py +0 -0
  344. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +0 -0
  345. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +0 -0
  346. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_filter.py +0 -0
  347. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_operator.py +0 -0
  348. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +0 -0
  349. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_create_request_data_ordering_item.py +0 -0
  350. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data.py +0 -0
  351. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters.py +0 -0
  352. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +0 -0
  353. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +0 -0
  354. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_filter.py +0 -0
  355. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_operator.py +0 -0
  356. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +0 -0
  357. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/views/types/views_update_request_data_ordering_item.py +0 -0
  358. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/__init__.py +0 -0
  359. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/client.py +0 -0
  360. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/types/__init__.py +0 -0
  361. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +0 -0
  362. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/__init__.py +0 -0
  363. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/client.py +0 -0
  364. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/__init__.py +0 -0
  365. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/client.py +0 -0
  366. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/types/__init__.py +0 -0
  367. {label_studio_sdk-1.0.11 → label_studio_sdk-1.0.12}/src/label_studio_sdk/workspaces/members/types/members_create_response.py +0 -0
  368. {label_studio_sdk-1.0.11 → 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.11
3
+ Version: 1.0.12
4
4
  Summary:
5
5
  Requires-Python: >=3.9,<4
6
6
  Classifier: Intended Audience :: Developers
@@ -28,7 +28,7 @@ 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,<2.0.0)
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)
@@ -3,7 +3,7 @@ name = "label-studio-sdk"
3
3
 
4
4
  [tool.poetry]
5
5
  name = "label-studio-sdk"
6
- version = "1.0.11"
6
+ version = "1.0.12"
7
7
  description = ""
8
8
  readme = "README.md"
9
9
  authors = []
@@ -44,7 +44,7 @@ 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,<2.0.0"
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"
@@ -3,6 +3,7 @@
3
3
  from .types import (
4
4
  AccessTokenResponse,
5
5
  Annotation,
6
+ AnnotationCompletedBy,
6
7
  AnnotationFilterOptions,
7
8
  AnnotationLastAction,
8
9
  AnnotationsDmField,
@@ -85,6 +86,7 @@ from .types import (
85
86
  RedisImportStorageStatus,
86
87
  RefinedPromptResponse,
87
88
  RefinedPromptResponseRefinementStatus,
89
+ RotateTokenResponse,
88
90
  S3ExportStorage,
89
91
  S3ExportStorageStatus,
90
92
  S3ImportStorage,
@@ -200,6 +202,7 @@ __all__ = [
200
202
  "ActionsCreateRequestSelectedItemsExcluded",
201
203
  "ActionsCreateRequestSelectedItemsIncluded",
202
204
  "Annotation",
205
+ "AnnotationCompletedBy",
203
206
  "AnnotationFilterOptions",
204
207
  "AnnotationLastAction",
205
208
  "AnnotationsCreateBulkRequestSelectedItems",
@@ -307,6 +310,7 @@ __all__ = [
307
310
  "RedisImportStorageStatus",
308
311
  "RefinedPromptResponse",
309
312
  "RefinedPromptResponseRefinementStatus",
313
+ "RotateTokenResponse",
310
314
  "S3ExportStorage",
311
315
  "S3ExportStorageStatus",
312
316
  "S3ImportStorage",
@@ -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
 
@@ -19,7 +19,7 @@ class JwtSettingsClient:
19
19
 
20
20
  def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> JwtSettingsResponse:
21
21
  """
22
- Retrieve JWT settings for the currently active organization.
22
+ Retrieve JWT settings for the currently-active organization.
23
23
 
24
24
  Parameters
25
25
  ----------
@@ -134,7 +134,7 @@ class AsyncJwtSettingsClient:
134
134
 
135
135
  async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> JwtSettingsResponse:
136
136
  """
137
- Retrieve JWT settings for the currently active organization.
137
+ Retrieve JWT settings for the currently-active organization.
138
138
 
139
139
  Parameters
140
140
  ----------
@@ -10,6 +10,8 @@ from ..core.api_error import ApiError
10
10
  from ..types.api_token_response import ApiTokenResponse
11
11
  from ..types.access_token_response import AccessTokenResponse
12
12
  from ..errors.unauthorized_error import UnauthorizedError
13
+ from ..types.rotate_token_response import RotateTokenResponse
14
+ from ..errors.bad_request_error import BadRequestError
13
15
  from ..core.client_wrapper import AsyncClientWrapper
14
16
 
15
17
  # this is used as the default value for optional parameters
@@ -225,6 +227,70 @@ class TokensClient:
225
227
  raise ApiError(status_code=_response.status_code, body=_response.text)
226
228
  raise ApiError(status_code=_response.status_code, body=_response_json)
227
229
 
230
+ def rotate(self, *, refresh: str, request_options: typing.Optional[RequestOptions] = None) -> RotateTokenResponse:
231
+ """
232
+ Blacklist existing refresh token, and get a new refresh token.
233
+
234
+ Parameters
235
+ ----------
236
+ refresh : str
237
+ JWT refresh token
238
+
239
+ request_options : typing.Optional[RequestOptions]
240
+ Request-specific configuration.
241
+
242
+ Returns
243
+ -------
244
+ RotateTokenResponse
245
+ Refresh token successfully rotated
246
+
247
+ Examples
248
+ --------
249
+ from label_studio_sdk import LabelStudio
250
+
251
+ client = LabelStudio(
252
+ api_key="YOUR_API_KEY",
253
+ )
254
+ client.tokens.rotate(
255
+ refresh="refresh",
256
+ )
257
+ """
258
+ _response = self._client_wrapper.httpx_client.request(
259
+ "api/token/rotate",
260
+ method="POST",
261
+ json={
262
+ "refresh": refresh,
263
+ },
264
+ headers={
265
+ "content-type": "application/json",
266
+ },
267
+ request_options=request_options,
268
+ omit=OMIT,
269
+ )
270
+ try:
271
+ if 200 <= _response.status_code < 300:
272
+ return typing.cast(
273
+ RotateTokenResponse,
274
+ parse_obj_as(
275
+ type_=RotateTokenResponse, # type: ignore
276
+ object_=_response.json(),
277
+ ),
278
+ )
279
+ if _response.status_code == 400:
280
+ raise BadRequestError(
281
+ typing.cast(
282
+ typing.Optional[typing.Any],
283
+ parse_obj_as(
284
+ type_=typing.Optional[typing.Any], # type: ignore
285
+ object_=_response.json(),
286
+ ),
287
+ )
288
+ )
289
+ _response_json = _response.json()
290
+ except JSONDecodeError:
291
+ raise ApiError(status_code=_response.status_code, body=_response.text)
292
+ raise ApiError(status_code=_response.status_code, body=_response_json)
293
+
228
294
 
229
295
  class AsyncTokensClient:
230
296
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -468,3 +534,77 @@ class AsyncTokensClient:
468
534
  except JSONDecodeError:
469
535
  raise ApiError(status_code=_response.status_code, body=_response.text)
470
536
  raise ApiError(status_code=_response.status_code, body=_response_json)
537
+
538
+ async def rotate(
539
+ self, *, refresh: str, request_options: typing.Optional[RequestOptions] = None
540
+ ) -> RotateTokenResponse:
541
+ """
542
+ Blacklist existing refresh token, and get a new refresh token.
543
+
544
+ Parameters
545
+ ----------
546
+ refresh : str
547
+ JWT refresh token
548
+
549
+ request_options : typing.Optional[RequestOptions]
550
+ Request-specific configuration.
551
+
552
+ Returns
553
+ -------
554
+ RotateTokenResponse
555
+ Refresh token successfully rotated
556
+
557
+ Examples
558
+ --------
559
+ import asyncio
560
+
561
+ from label_studio_sdk import AsyncLabelStudio
562
+
563
+ client = AsyncLabelStudio(
564
+ api_key="YOUR_API_KEY",
565
+ )
566
+
567
+
568
+ async def main() -> None:
569
+ await client.tokens.rotate(
570
+ refresh="refresh",
571
+ )
572
+
573
+
574
+ asyncio.run(main())
575
+ """
576
+ _response = await self._client_wrapper.httpx_client.request(
577
+ "api/token/rotate",
578
+ method="POST",
579
+ json={
580
+ "refresh": refresh,
581
+ },
582
+ headers={
583
+ "content-type": "application/json",
584
+ },
585
+ request_options=request_options,
586
+ omit=OMIT,
587
+ )
588
+ try:
589
+ if 200 <= _response.status_code < 300:
590
+ return typing.cast(
591
+ RotateTokenResponse,
592
+ parse_obj_as(
593
+ type_=RotateTokenResponse, # type: ignore
594
+ object_=_response.json(),
595
+ ),
596
+ )
597
+ if _response.status_code == 400:
598
+ raise BadRequestError(
599
+ typing.cast(
600
+ typing.Optional[typing.Any],
601
+ parse_obj_as(
602
+ type_=typing.Optional[typing.Any], # type: ignore
603
+ object_=_response.json(),
604
+ ),
605
+ )
606
+ )
607
+ _response_json = _response.json()
608
+ except JSONDecodeError:
609
+ raise ApiError(status_code=_response.status_code, body=_response.text)
610
+ raise ApiError(status_code=_response.status_code, body=_response_json)
@@ -2,6 +2,7 @@
2
2
 
3
3
  from .access_token_response import AccessTokenResponse
4
4
  from .annotation import Annotation
5
+ from .annotation_completed_by import AnnotationCompletedBy
5
6
  from .annotation_filter_options import AnnotationFilterOptions
6
7
  from .annotation_last_action import AnnotationLastAction
7
8
  from .annotations_dm_field import AnnotationsDmField
@@ -84,6 +85,7 @@ from .redis_import_storage import RedisImportStorage
84
85
  from .redis_import_storage_status import RedisImportStorageStatus
85
86
  from .refined_prompt_response import RefinedPromptResponse
86
87
  from .refined_prompt_response_refinement_status import RefinedPromptResponseRefinementStatus
88
+ from .rotate_token_response import RotateTokenResponse
87
89
  from .s3export_storage import S3ExportStorage
88
90
  from .s3export_storage_status import S3ExportStorageStatus
89
91
  from .s3import_storage import S3ImportStorage
@@ -108,6 +110,7 @@ from .workspace import Workspace
108
110
  __all__ = [
109
111
  "AccessTokenResponse",
110
112
  "Annotation",
113
+ "AnnotationCompletedBy",
111
114
  "AnnotationFilterOptions",
112
115
  "AnnotationLastAction",
113
116
  "AnnotationsDmField",
@@ -190,6 +193,7 @@ __all__ = [
190
193
  "RedisImportStorageStatus",
191
194
  "RefinedPromptResponse",
192
195
  "RefinedPromptResponseRefinementStatus",
196
+ "RotateTokenResponse",
193
197
  "S3ExportStorage",
194
198
  "S3ExportStorageStatus",
195
199
  "S3ImportStorage",