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.
Files changed (339) hide show
  1. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/PKG-INFO +3 -1
  2. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/pyproject.toml +3 -1
  3. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/__init__.py +6 -0
  4. {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
  5. label_studio_sdk-1.0.8/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +86 -0
  6. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/schema/label_config_schema.json +42 -11
  7. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/converter.py +10 -5
  8. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/client_wrapper.py +1 -1
  9. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/control_tags.py +205 -10
  10. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/interface.py +80 -6
  11. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/region.py +1 -10
  12. label_studio_sdk-1.0.8/src/label_studio_sdk/model_providers/client.py +708 -0
  13. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/versions/client.py +125 -0
  14. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/__init__.py +6 -0
  15. label_studio_sdk-1.0.8/src/label_studio_sdk/types/inference_run_cost_estimate.py +57 -0
  16. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection.py +30 -0
  17. label_studio_sdk-1.0.8/src/label_studio_sdk/types/model_provider_connection_budget_reset_period.py +5 -0
  18. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_provider.py +1 -1
  19. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/refined_prompt_response.py +1 -1
  20. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task.py +3 -2
  21. label_studio_sdk-1.0.8/src/label_studio_sdk/types/task_comment_authors_item.py +5 -0
  22. label_studio_sdk-1.0.7/src/label_studio_sdk/model_providers/client.py +0 -190
  23. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/LICENSE +0 -0
  24. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/README.md +0 -0
  25. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/__init__.py +0 -0
  26. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/eval/categorical.py +0 -0
  27. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
  28. {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
  29. {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
  30. {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
  31. {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
  32. {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
  33. {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
  34. {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
  35. {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
  36. {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
  37. {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
  38. {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
  39. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_extensions/pager_ext.py +0 -0
  40. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/__init__.py +0 -0
  41. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/client.py +0 -0
  42. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/exceptions.py +0 -0
  43. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/project.py +0 -0
  44. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/users.py +0 -0
  45. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/utils.py +0 -0
  46. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/_legacy/workspaces.py +0 -0
  47. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/__init__.py +0 -0
  48. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/client.py +0 -0
  49. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/actions/types/__init__.py +0 -0
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/__init__.py +0 -0
  62. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/client.py +0 -0
  63. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/annotations/types/__init__.py +0 -0
  64. {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
  65. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/base_client.py +0 -0
  66. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/client.py +0 -0
  67. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/comments/__init__.py +0 -0
  68. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/comments/client.py +0 -0
  69. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/__init__.py +0 -0
  70. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/audio.py +0 -0
  71. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/brush.py +0 -0
  72. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/__init__.py +0 -0
  73. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/csv.py +0 -0
  74. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/exports/csv2.py +0 -0
  75. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/funsd.py +0 -0
  76. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/__init__.py +0 -0
  77. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/coco.py +0 -0
  78. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/colors.py +0 -0
  79. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/label_config.py +0 -0
  80. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/pathtrack.py +0 -0
  81. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/imports/yolo.py +0 -0
  82. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/main.py +0 -0
  83. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/converter/utils.py +0 -0
  84. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/__init__.py +0 -0
  85. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/api_error.py +0 -0
  86. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/datetime_utils.py +0 -0
  87. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/file.py +0 -0
  88. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/http_client.py +0 -0
  89. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/jsonable_encoder.py +0 -0
  90. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/pagination.py +0 -0
  91. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/pydantic_utilities.py +0 -0
  92. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/query_encoder.py +0 -0
  93. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/remove_none_from_dict.py +0 -0
  94. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/core/request_options.py +0 -0
  95. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/data_manager.py +0 -0
  96. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/environment.py +0 -0
  97. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/__init__.py +0 -0
  98. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/bad_request_error.py +0 -0
  99. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/errors/internal_server_error.py +0 -0
  100. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/__init__.py +0 -0
  101. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/__init__.py +0 -0
  102. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/client.py +0 -0
  103. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/azure/types/__init__.py +0 -0
  104. {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
  105. {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
  106. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/client.py +0 -0
  107. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/__init__.py +0 -0
  108. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/client.py +0 -0
  109. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/gcs/types/__init__.py +0 -0
  110. {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
  111. {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
  112. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/__init__.py +0 -0
  113. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/client.py +0 -0
  114. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/local/types/__init__.py +0 -0
  115. {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
  116. {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
  117. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/__init__.py +0 -0
  118. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/client.py +0 -0
  119. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/redis/types/__init__.py +0 -0
  120. {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
  121. {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
  122. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/__init__.py +0 -0
  123. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/client.py +0 -0
  124. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3/types/__init__.py +0 -0
  125. {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
  126. {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
  127. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3s/__init__.py +0 -0
  128. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/s3s/client.py +0 -0
  129. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/export_storage/types/__init__.py +0 -0
  130. {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
  131. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/files/__init__.py +0 -0
  132. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/files/client.py +0 -0
  133. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/__init__.py +0 -0
  134. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/__init__.py +0 -0
  135. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/client.py +0 -0
  136. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/azure/types/__init__.py +0 -0
  137. {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
  138. {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
  139. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/client.py +0 -0
  140. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/__init__.py +0 -0
  141. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/client.py +0 -0
  142. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/gcs/types/__init__.py +0 -0
  143. {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
  144. {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
  145. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/__init__.py +0 -0
  146. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/client.py +0 -0
  147. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/local/types/__init__.py +0 -0
  148. {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
  149. {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
  150. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/__init__.py +0 -0
  151. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/client.py +0 -0
  152. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/redis/types/__init__.py +0 -0
  153. {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
  154. {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
  155. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/__init__.py +0 -0
  156. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/client.py +0 -0
  157. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3/types/__init__.py +0 -0
  158. {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
  159. {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
  160. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3s/__init__.py +0 -0
  161. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/s3s/client.py +0 -0
  162. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/import_storage/types/__init__.py +0 -0
  163. {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
  164. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/__init__.py +0 -0
  165. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/base.py +0 -0
  166. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/create.py +0 -0
  167. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/data_examples.json +0 -0
  168. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/label_tags.py +0 -0
  169. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/object_tags.py +0 -0
  170. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/label_interface/objects.py +0 -0
  171. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/__init__.py +0 -0
  172. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/client.py +0 -0
  173. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/__init__.py +0 -0
  174. {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
  175. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_create_response.py +0 -0
  176. {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
  177. {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
  178. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/ml/types/ml_update_response.py +0 -0
  179. {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
  180. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/model_providers/__init__.py +0 -0
  181. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/predictions/__init__.py +0 -0
  182. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/predictions/client.py +0 -0
  183. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/__init__.py +0 -0
  184. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/client.py +0 -0
  185. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/client_ext.py +0 -0
  186. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/exports/__init__.py +0 -0
  187. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/exports/client.py +0 -0
  188. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/__init__.py +0 -0
  189. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_create_response.py +0 -0
  190. {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
  191. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_list_response.py +0 -0
  192. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/projects/types/projects_update_response.py +0 -0
  193. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/__init__.py +0 -0
  194. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/client.py +0 -0
  195. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/indicators/__init__.py +0 -0
  196. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/indicators/client.py +0 -0
  197. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/__init__.py +0 -0
  198. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/client.py +0 -0
  199. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/runs/types/__init__.py +0 -0
  200. {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
  201. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/types/__init__.py +0 -0
  202. {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
  203. {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
  204. {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
  205. {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
  206. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/prompts/versions/__init__.py +0 -0
  207. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/py.typed +0 -0
  208. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/__init__.py +0 -0
  209. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/client.py +0 -0
  210. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/client_ext.py +0 -0
  211. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/types/__init__.py +0 -0
  212. {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
  213. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/tasks/types/tasks_list_response.py +0 -0
  214. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation.py +0 -0
  215. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation_filter_options.py +0 -0
  216. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotation_last_action.py +0 -0
  217. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/annotations_dm_field.py +0 -0
  218. {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
  219. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_export_storage.py +0 -0
  220. {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
  221. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/azure_blob_import_storage.py +0 -0
  222. {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
  223. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task.py +0 -0
  224. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task_file_upload.py +0 -0
  225. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_task_updated_by.py +0 -0
  226. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/base_user.py +0 -0
  227. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/comment.py +0 -0
  228. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/comment_created_by.py +0 -0
  229. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/converted_format.py +0 -0
  230. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/converted_format_status.py +0 -0
  231. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/data_manager_task_serializer.py +0 -0
  232. {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
  233. {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
  234. {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
  235. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export.py +0 -0
  236. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_convert.py +0 -0
  237. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_create.py +0 -0
  238. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_create_status.py +0 -0
  239. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/export_status.py +0 -0
  240. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/file_upload.py +0 -0
  241. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/filter.py +0 -0
  242. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/filter_group.py +0 -0
  243. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_export_storage.py +0 -0
  244. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_export_storage_status.py +0 -0
  245. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_import_storage.py +0 -0
  246. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/gcs_import_storage_status.py +0 -0
  247. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run.py +0 -0
  248. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_created_by.py +0 -0
  249. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_organization.py +0 -0
  250. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_project_subset.py +0 -0
  251. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/inference_run_status.py +0 -0
  252. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicator_value.py +0 -0
  253. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators.py +0 -0
  254. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/key_indicators_item.py +0 -0
  255. {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
  256. {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
  257. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_export_storage.py +0 -0
  258. {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
  259. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/local_files_import_storage.py +0 -0
  260. {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
  261. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend.py +0 -0
  262. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend_auth_method.py +0 -0
  263. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/ml_backend_state.py +0 -0
  264. {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
  265. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_organization.py +0 -0
  266. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/model_provider_connection_scope.py +0 -0
  267. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prediction.py +0 -0
  268. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project.py +0 -0
  269. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_import.py +0 -0
  270. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_import_status.py +0 -0
  271. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_label_config.py +0 -0
  272. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_sampling.py +0 -0
  273. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/project_skip_queue.py +0 -0
  274. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt.py +0 -0
  275. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_created_by.py +0 -0
  276. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_organization.py +0 -0
  277. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version.py +0 -0
  278. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_created_by.py +0 -0
  279. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_organization.py +0 -0
  280. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/prompt_version_provider.py +0 -0
  281. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_export_storage.py +0 -0
  282. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_export_storage_status.py +0 -0
  283. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_import_storage.py +0 -0
  284. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/redis_import_storage_status.py +0 -0
  285. {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
  286. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3export_storage.py +0 -0
  287. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3export_storage_status.py +0 -0
  288. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3import_storage.py +0 -0
  289. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3import_storage_status.py +0 -0
  290. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_export_storage.py +0 -0
  291. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_import_storage.py +0 -0
  292. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/s3s_import_storage_status.py +0 -0
  293. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/serialization_option.py +0 -0
  294. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/serialization_options.py +0 -0
  295. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task_annotators_item.py +0 -0
  296. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/task_filter_options.py +0 -0
  297. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/user_simple.py +0 -0
  298. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/view.py +0 -0
  299. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook.py +0 -0
  300. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook_actions_item.py +0 -0
  301. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/webhook_serializer_for_update.py +0 -0
  302. {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
  303. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/types/workspace.py +0 -0
  304. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/__init__.py +0 -0
  305. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/client.py +0 -0
  306. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/users/types/__init__.py +0 -0
  307. {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
  308. {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
  309. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/version.py +0 -0
  310. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/__init__.py +0 -0
  311. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/client.py +0 -0
  312. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/views/types/__init__.py +0 -0
  313. {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
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/__init__.py +0 -0
  330. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/client.py +0 -0
  331. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/webhooks/types/__init__.py +0 -0
  332. {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
  333. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/__init__.py +0 -0
  334. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/client.py +0 -0
  335. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/__init__.py +0 -0
  336. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/client.py +0 -0
  337. {label_studio_sdk-1.0.7 → label_studio_sdk-1.0.8}/src/label_studio_sdk/workspaces/members/types/__init__.py +0 -0
  338. {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
  339. {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.7
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.7"
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):
@@ -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
- "tag_with_value_required_name": {
38
+ "tag_with_name_and_toname": {
39
39
  "type": "object",
40
- "anyOf": [
41
- {
42
- "required": [
43
- "@name",
44
- "@valueList"
45
- ]
46
- },
40
+ "oneOf": [
47
41
  {
48
42
  "required": [
49
43
  "@name",
50
- "@value"
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
  }
@@ -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
- data_keys |= set(map(itemgetter("value"), info["inputs"]))
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
@@ -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.6",
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 annotaion or prediction to
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
- if len(self.to_name) > 1:
339
- raise Exception(
340
- "Multiple to_name in control tag, specify to_name in function"
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, side):
849
+ def label(self, label):
720
850
  """ """
721
- value = PairwiseValue(selected=side)
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):