superb-ai-onprem 0.5.10__tar.gz → 0.5.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 superb-ai-onprem might be problematic. Click here for more details.

Files changed (173) hide show
  1. superb_ai_onprem-0.5.12/.github/workflows/tests.yml +42 -0
  2. {superb_ai_onprem-0.5.10/superb_ai_onprem.egg-info → superb_ai_onprem-0.5.12}/PKG-INFO +1 -1
  3. superb_ai_onprem-0.5.12/requirements-test.txt +7 -0
  4. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/__init__.py +9 -0
  5. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/_version.py +3 -3
  6. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/service.py +1 -2
  7. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/params/__init__.py +2 -0
  8. superb_ai_onprem-0.5.12/spb_onprem/contents/params/delete_content.py +10 -0
  9. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/queries.py +11 -0
  10. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/service.py +19 -0
  11. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/__init__.py +8 -0
  12. superb_ai_onprem-0.5.12/spb_onprem/data/params/get_data_detail.py +14 -0
  13. superb_ai_onprem-0.5.12/spb_onprem/data/params/get_evaluation_value_list.py +36 -0
  14. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/queries.py +70 -0
  15. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/service.py +106 -4
  16. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/params/__init__.py +2 -0
  17. superb_ai_onprem-0.5.12/spb_onprem/datasets/params/delete_dataset.py +12 -0
  18. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/queries.py +11 -0
  19. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/service.py +18 -0
  20. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/entities.py +4 -0
  21. superb_ai_onprem-0.5.12/spb_onprem/inferences/__init__.py +5 -0
  22. superb_ai_onprem-0.5.12/spb_onprem/inferences/service.py +56 -0
  23. superb_ai_onprem-0.5.12/spb_onprem/models/__init__.py +7 -0
  24. superb_ai_onprem-0.5.12/spb_onprem/models/entities.py +9 -0
  25. superb_ai_onprem-0.5.12/spb_onprem/models/params/__init__.py +7 -0
  26. superb_ai_onprem-0.5.12/spb_onprem/models/params/delete_model.py +14 -0
  27. superb_ai_onprem-0.5.12/spb_onprem/models/params/get_models.py +29 -0
  28. superb_ai_onprem-0.5.12/spb_onprem/models/queries.py +33 -0
  29. superb_ai_onprem-0.5.12/spb_onprem/models/service.py +76 -0
  30. superb_ai_onprem-0.5.12/spb_onprem/predictions/__init__.py +7 -0
  31. superb_ai_onprem-0.5.12/spb_onprem/predictions/entities.py +11 -0
  32. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/__init__.py +15 -0
  33. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/create_prediction_set.py +44 -0
  34. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/delete_prediction_from_data.py +20 -0
  35. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/delete_prediction_set.py +14 -0
  36. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/get_prediction_set.py +14 -0
  37. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/get_prediction_sets.py +29 -0
  38. superb_ai_onprem-0.5.12/spb_onprem/predictions/params/update_prediction_set_data_info.py +28 -0
  39. superb_ai_onprem-0.5.12/spb_onprem/predictions/queries.py +110 -0
  40. superb_ai_onprem-0.5.12/spb_onprem/predictions/service.py +225 -0
  41. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12/superb_ai_onprem.egg-info}/PKG-INFO +1 -1
  42. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/superb_ai_onprem.egg-info/SOURCES.txt +36 -1
  43. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/activities/test_params.py +2 -2
  44. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/activities/test_service.py +28 -38
  45. superb_ai_onprem-0.5.12/tests/contents/test_content_service.py +99 -0
  46. superb_ai_onprem-0.5.12/tests/data/__init__.py +0 -0
  47. superb_ai_onprem-0.5.12/tests/data/test_data_service.py +504 -0
  48. superb_ai_onprem-0.5.12/tests/datasets/__init__.py +1 -0
  49. superb_ai_onprem-0.5.12/tests/datasets/test_dataset_service.py +135 -0
  50. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/test_service.py +1 -0
  51. superb_ai_onprem-0.5.12/tests/models/__init__.py +1 -0
  52. superb_ai_onprem-0.5.12/tests/models/test_model_service.py +249 -0
  53. superb_ai_onprem-0.5.12/tests/predictions/__init__.py +1 -0
  54. superb_ai_onprem-0.5.12/tests/predictions/test_prediction_service.py +359 -0
  55. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/.github/workflows/publish.yml +0 -0
  56. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/.gitignore +0 -0
  57. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/LICENSE +0 -0
  58. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/Pipfile +0 -0
  59. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/Pipfile.lock +0 -0
  60. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/README.md +0 -0
  61. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/pyproject.toml +0 -0
  62. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/setup.cfg +0 -0
  63. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/setup.py +0 -0
  64. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/__init__.py +0 -0
  65. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/entities/__init__.py +0 -0
  66. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/entities/activity.py +0 -0
  67. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/entities/activity_history.py +0 -0
  68. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/__init__.py +0 -0
  69. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/activities.py +0 -0
  70. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/activity.py +0 -0
  71. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/create_activity.py +0 -0
  72. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/delete_activity.py +0 -0
  73. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/get_activity_history.py +0 -0
  74. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/start_activity.py +0 -0
  75. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/update_activity.py +0 -0
  76. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/params/update_activity_history.py +0 -0
  77. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/activities/queries.py +0 -0
  78. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/base_model.py +0 -0
  79. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/base_service.py +0 -0
  80. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/base_types.py +0 -0
  81. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/__init__.py +0 -0
  82. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/entities/__init__.py +0 -0
  83. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/entities/base_content.py +0 -0
  84. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/entities/content.py +0 -0
  85. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/params/create.py +0 -0
  86. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/contents/params/get_download_url.py +0 -0
  87. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/__init__.py +0 -0
  88. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/__init__.py +0 -0
  89. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/annotation.py +0 -0
  90. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/data.py +0 -0
  91. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/data_meta.py +0 -0
  92. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/data_slice.py +0 -0
  93. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/frame.py +0 -0
  94. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/prediction.py +0 -0
  95. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/entities/scene.py +0 -0
  96. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/enums/__init__.py +0 -0
  97. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/enums/data_meta_type.py +0 -0
  98. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/enums/data_status.py +0 -0
  99. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/enums/data_type.py +0 -0
  100. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/enums/scene_type.py +0 -0
  101. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/change_data_labeler.py +0 -0
  102. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/change_data_reviewer.py +0 -0
  103. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/change_data_status.py +0 -0
  104. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/create_data.py +0 -0
  105. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/data.py +0 -0
  106. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/data_list.py +0 -0
  107. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/delete_annotation_version.py +0 -0
  108. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/delete_data.py +0 -0
  109. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/delete_prediction.py +0 -0
  110. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/delete_scene.py +0 -0
  111. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/delete_slice_annotation_version.py +0 -0
  112. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/insert_annotation_version.py +0 -0
  113. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/insert_data_to_slice.py +0 -0
  114. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/insert_prediction.py +0 -0
  115. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/insert_scene.py +0 -0
  116. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/insert_slice_annotation_version.py +0 -0
  117. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/remove_data_from_slice.py +0 -0
  118. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/remove_data_meta.py +0 -0
  119. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_annotation.py +0 -0
  120. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_data.py +0 -0
  121. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_data_slice.py +0 -0
  122. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_frames.py +0 -0
  123. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_scene.py +0 -0
  124. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_slice_annotation.py +0 -0
  125. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/update_slice_annotation_version.py +0 -0
  126. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/data/params/upsert_data_meta.py +0 -0
  127. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/__init__.py +0 -0
  128. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/entities/__init__.py +0 -0
  129. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/entities/dataset.py +0 -0
  130. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/params/create_dataset.py +0 -0
  131. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/params/dataset.py +0 -0
  132. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/params/datasets.py +0 -0
  133. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/datasets/params/update_dataset.py +0 -0
  134. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exceptions.py +0 -0
  135. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/__init__.py +0 -0
  136. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/entities/__init__.py +0 -0
  137. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/entities/export.py +0 -0
  138. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/__init__.py +0 -0
  139. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/create_export.py +0 -0
  140. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/delete_export.py +0 -0
  141. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/export.py +0 -0
  142. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/exports.py +0 -0
  143. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/params/update_export.py +0 -0
  144. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/queries/get_exports.py +0 -0
  145. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/queries.py +0 -0
  146. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/exports/service.py +0 -0
  147. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/searches.py +0 -0
  148. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/__init__.py +0 -0
  149. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/entities/__init__.py +0 -0
  150. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/entities/slice.py +0 -0
  151. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/__init__.py +0 -0
  152. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/create_slice.py +0 -0
  153. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/delete_slice.py +0 -0
  154. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/slice.py +0 -0
  155. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/slices.py +0 -0
  156. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/params/update_slice.py +0 -0
  157. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/queries.py +0 -0
  158. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/slices/service.py +0 -0
  159. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/users/__init__.py +0 -0
  160. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/users/entities/__init__.py +0 -0
  161. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/spb_onprem/users/entities/auth.py +0 -0
  162. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/superb_ai_onprem.egg-info/dependency_links.txt +0 -0
  163. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/superb_ai_onprem.egg-info/requires.txt +0 -0
  164. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/superb_ai_onprem.egg-info/top_level.txt +0 -0
  165. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/__init__.py +0 -0
  166. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/activities/__init__.py +0 -0
  167. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/activities/real_test.py +0 -0
  168. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/activities/test_get_activity_history.py +0 -0
  169. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/__init__.py +0 -0
  170. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/real_test.py +0 -0
  171. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/test_entities.py +0 -0
  172. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/test_integration.py +0 -0
  173. {superb_ai_onprem-0.5.10 → superb_ai_onprem-0.5.12}/tests/exports/test_params.py +0 -0
@@ -0,0 +1,42 @@
1
+ name: CI - Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ tests:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v4
20
+
21
+ - name: Set up Python 3.11
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: '3.11'
25
+
26
+ - name: Cache pip dependencies
27
+ uses: actions/cache@v4
28
+ with:
29
+ path: ~/.cache/pip
30
+ key: pip-${{ runner.os }}-3.11-${{ hashFiles('setup.py', 'requirements-test.txt') }}
31
+ restore-keys: |
32
+ pip-${{ runner.os }}-3.11-
33
+
34
+ - name: Install dependencies
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install -e .
38
+ pip install -r requirements-test.txt
39
+
40
+ - name: Run tests
41
+ run: |
42
+ pytest tests/ -v --ignore=tests/activities/real_test.py --ignore=tests/exports/real_test.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superb-ai-onprem
3
- Version: 0.5.10
3
+ Version: 0.5.12
4
4
  Summary: Python SDK for Superb AI On-premise
5
5
  Home-page: https://github.com/Superb-AI-Suite/superb-ai-onprem-python
6
6
  Author: Superb AI
@@ -0,0 +1,7 @@
1
+ # Test dependencies for superb-ai-onprem-python SDK
2
+ pytest>=7.0.0
3
+ pytest-cov>=4.0.0
4
+ pytest-mock>=3.10.0
5
+
6
+ # Additional testing utilities
7
+ coverage>=7.0.0
@@ -10,6 +10,9 @@ from .slices.service import SliceService
10
10
  from .activities.service import ActivityService
11
11
  from .exports.service import ExportService
12
12
  from .contents.service import ContentService
13
+ from .predictions.service import PredictionService
14
+ from .models.service import ModelService
15
+ from .inferences.service import InferService
13
16
 
14
17
  # Core Entities and Enums
15
18
  from .entities import (
@@ -28,6 +31,7 @@ from .entities import (
28
31
  Export,
29
32
  Content,
30
33
  Frame,
34
+ Model,
31
35
 
32
36
  # Enums
33
37
  DataType,
@@ -77,6 +81,9 @@ __all__ = (
77
81
  "ActivityService",
78
82
  "ExportService",
79
83
  "ContentService",
84
+ "PredictionService",
85
+ "ModelService",
86
+ "InferService",
80
87
 
81
88
  # Core Entities
82
89
  "Data",
@@ -93,6 +100,8 @@ __all__ = (
93
100
  "Export",
94
101
  "Content",
95
102
  "Frame",
103
+ "PredictionSet",
104
+ "Model",
96
105
 
97
106
  # Enums
98
107
  "DataType",
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.5.10'
32
- __version_tuple__ = version_tuple = (0, 5, 10)
31
+ __version__ = version = '0.5.12'
32
+ __version_tuple__ = version_tuple = (0, 5, 12)
33
33
 
34
- __commit_id__ = commit_id = 'ge197536ed'
34
+ __commit_id__ = commit_id = 'gc8b88fc93'
@@ -65,8 +65,7 @@ class ActivityService(BaseService):
65
65
  meta=meta,
66
66
  )
67
67
  )
68
- activity_dict = response
69
- return Activity.model_validate(activity_dict)
68
+ return Activity.model_validate(response)
70
69
 
71
70
  def get_activities(
72
71
  self,
@@ -1,8 +1,10 @@
1
1
 
2
2
  from .create import create_variables
3
3
  from .get_download_url import get_download_url_params
4
+ from .delete_content import delete_content_params
4
5
 
5
6
  __all__ = (
6
7
  "create_variables",
7
8
  "get_download_url_params",
9
+ "delete_content_params",
8
10
  )
@@ -0,0 +1,10 @@
1
+ def delete_content_params(content_id: str):
2
+ """Generate variables for delete content GraphQL mutation.
3
+
4
+ Args:
5
+ content_id (str): The ID of the content to delete.
6
+
7
+ Returns:
8
+ dict: Variables dictionary for the GraphQL query.
9
+ """
10
+ return {"id": content_id}
@@ -1,6 +1,7 @@
1
1
  from .params import (
2
2
  create_variables,
3
3
  get_download_url_params,
4
+ delete_content_params,
4
5
  )
5
6
 
6
7
  class Queries:
@@ -33,3 +34,13 @@ class Queries:
33
34
  ''',
34
35
  "variables": get_download_url_params
35
36
  }
37
+
38
+ DELETE = {
39
+ "name": "deleteContent",
40
+ "query": '''
41
+ mutation DeleteContent($id: ID!) {
42
+ deleteContent(id: $id)
43
+ }
44
+ ''',
45
+ "variables": delete_content_params
46
+ }
@@ -176,3 +176,22 @@ class ContentService(BaseService):
176
176
  variables=Queries.GET_DOWNLOAD_URL["variables"](content_id)
177
177
  )
178
178
  return response
179
+
180
+ def delete_content(
181
+ self,
182
+ content_id: str,
183
+ ) -> bool:
184
+ '''
185
+ Delete a content by ID.
186
+
187
+ Args:
188
+ content_id (str): The ID of the content to delete.
189
+
190
+ Returns:
191
+ bool: True if deletion was successful.
192
+ '''
193
+ response = self.request_gql(
194
+ query=Queries.DELETE,
195
+ variables=Queries.DELETE["variables"](content_id)
196
+ )
197
+ return response.get("deleteContent", False)
@@ -15,6 +15,12 @@ from .data_list import (
15
15
  DataFilterOptions,
16
16
  DataListFilter,
17
17
  )
18
+ from .get_data_detail import (
19
+ get_data_detail_params,
20
+ )
21
+ from .get_evaluation_value_list import (
22
+ get_evaluation_value_list_params,
23
+ )
18
24
  from .remove_data_from_slice import (
19
25
  remove_data_from_slice_params
20
26
  )
@@ -73,6 +79,8 @@ __all__ = [
73
79
  "get_params",
74
80
  "get_data_id_list_params",
75
81
  "get_data_list_params",
82
+ "get_data_detail_params",
83
+ "get_evaluation_value_list_params",
76
84
  "AnnotationFilter",
77
85
  "AnnotationRangeFilter",
78
86
  "DataFilterOptions",
@@ -0,0 +1,14 @@
1
+ def get_data_detail_params(dataset_id: str, data_id: str):
2
+ """Generate variables for get data detail GraphQL query.
3
+
4
+ Args:
5
+ dataset_id (str): The ID of the dataset.
6
+ data_id (str): The ID of the data.
7
+
8
+ Returns:
9
+ dict: Variables dictionary for the GraphQL query.
10
+ """
11
+ return {
12
+ "datasetId": dataset_id,
13
+ "id": data_id
14
+ }
@@ -0,0 +1,36 @@
1
+ from typing import Union
2
+ from spb_onprem.base_types import UndefinedType, Undefined
3
+
4
+
5
+ def get_evaluation_value_list_params(
6
+ dataset_id: str,
7
+ prediction_set_id: str,
8
+ filter: Union[UndefinedType, dict] = Undefined,
9
+ length: int = 50,
10
+ cursor: Union[UndefinedType, str] = Undefined
11
+ ):
12
+ """Generate variables for get evaluation value list GraphQL query.
13
+
14
+ Args:
15
+ dataset_id (str): The ID of the dataset.
16
+ prediction_set_id (str): The ID of the prediction set.
17
+ filter (Union[UndefinedType, dict], optional): Diagnosis filter for evaluation values.
18
+ length (int): Number of items to retrieve per page.
19
+ cursor (Union[UndefinedType, str], optional): Cursor for pagination.
20
+
21
+ Returns:
22
+ dict: Variables dictionary for the GraphQL query.
23
+ """
24
+ params = {
25
+ "datasetId": dataset_id,
26
+ "predictionSetId": prediction_set_id,
27
+ "length": length
28
+ }
29
+
30
+ if filter is not Undefined:
31
+ params["filter"] = filter
32
+
33
+ if cursor is not Undefined:
34
+ params["cursor"] = cursor
35
+
36
+ return params
@@ -4,6 +4,8 @@ from .params import (
4
4
  get_params,
5
5
  get_data_id_list_params,
6
6
  get_data_list_params,
7
+ get_data_detail_params,
8
+ get_evaluation_value_list_params,
7
9
  remove_data_from_slice_params,
8
10
  insert_data_to_slice_params,
9
11
  delete_data_params,
@@ -106,6 +108,34 @@ class Schemas:
106
108
  {DATA}
107
109
  }}
108
110
  '''
111
+
112
+ DATA_DETAIL = '''
113
+ id
114
+ datasetId
115
+ scene {
116
+ id
117
+ content {
118
+ id
119
+ }
120
+ }
121
+ annotation {
122
+ versions {
123
+ id
124
+ content {
125
+ id
126
+ }
127
+ }
128
+ }
129
+ predictions {
130
+ id
131
+ content {
132
+ id
133
+ }
134
+ }
135
+ thumbnail {
136
+ id
137
+ }
138
+ '''
109
139
 
110
140
 
111
141
  class Queries():
@@ -590,3 +620,43 @@ class Queries():
590
620
  ''',
591
621
  "variables": update_frames_params,
592
622
  }
623
+
624
+ GET_DETAIL = {
625
+ "name": "getDataDetail",
626
+ "query": f'''
627
+ query GetDataDetail($datasetId: ID!, $id: ID!) {{
628
+ data(datasetId: $datasetId, id: $id) {{
629
+ {Schemas.DATA_DETAIL}
630
+ }}
631
+ }}
632
+ ''',
633
+ "variables": get_data_detail_params
634
+ }
635
+
636
+ GET_EVALUATION_VALUE_LIST = {
637
+ "name": "getEvaluationValueList",
638
+ "query": '''
639
+ query GetEvaluationValueList(
640
+ $datasetId: String!,
641
+ $predictionSetId: String!,
642
+ $filter: DiagnosisFilter,
643
+ $length: Int,
644
+ $cursor: String
645
+ ) {
646
+ evaluationValueList(
647
+ datasetId: $datasetId,
648
+ predictionSetId: $predictionSetId,
649
+ filter: $filter,
650
+ length: $length,
651
+ cursor: $cursor
652
+ ) {
653
+ totalCount
654
+ next
655
+ data {
656
+ dataId
657
+ }
658
+ }
659
+ }
660
+ ''',
661
+ "variables": get_evaluation_value_list_params
662
+ }
@@ -269,7 +269,7 @@ class DataService(BaseService):
269
269
  self,
270
270
  dataset_id: str,
271
271
  data_id: str,
272
- ):
272
+ ) -> bool:
273
273
  """Delete a data.
274
274
 
275
275
  Args:
@@ -277,14 +277,21 @@ class DataService(BaseService):
277
277
  data_id (str): The data id.
278
278
 
279
279
  Returns:
280
- Data: The deleted data.
280
+ bool: True if deletion was successful.
281
+
282
+ Raises:
283
+ BadParameterError: If required parameters are missing.
281
284
  """
285
+ if dataset_id is None:
286
+ raise BadParameterError("dataset_id is required.")
287
+ if data_id is None:
288
+ raise BadParameterError("data_id is required.")
289
+
282
290
  response = self.request_gql(
283
291
  Queries.DELETE,
284
292
  Queries.DELETE["variables"](dataset_id=dataset_id, data_id=data_id)
285
293
  )
286
- data = Data.model_validate(response)
287
- return data
294
+ return response.get("deleteData", False)
288
295
 
289
296
  def insert_prediction(
290
297
  self,
@@ -769,3 +776,98 @@ class DataService(BaseService):
769
776
  )
770
777
  data = Data.model_validate(response)
771
778
  return data
779
+
780
+ def get_data_detail(
781
+ self,
782
+ dataset_id: str,
783
+ data_id: str,
784
+ ) -> Data:
785
+ """Get detailed data information including all nested relationships.
786
+
787
+ This method retrieves comprehensive data information including:
788
+ - Scene content references
789
+ - Annotation versions with content references
790
+ - Predictions with content references
791
+ - Thumbnail references
792
+
793
+ Args:
794
+ dataset_id (str): The dataset ID.
795
+ data_id (str): The data ID.
796
+
797
+ Returns:
798
+ Data: The data object with all nested relationships.
799
+ """
800
+ if dataset_id is None:
801
+ raise BadParameterError("dataset_id is required.")
802
+ if data_id is None:
803
+ raise BadParameterError("data_id is required.")
804
+
805
+ response = self.request_gql(
806
+ Queries.GET_DETAIL,
807
+ Queries.GET_DETAIL["variables"](dataset_id, data_id)
808
+ )
809
+ data_dict = response.get("data", {})
810
+ return Data.model_validate(data_dict)
811
+
812
+ def get_evaluation_value_list(
813
+ self,
814
+ dataset_id: str,
815
+ prediction_set_id: str,
816
+ filter: Union[UndefinedType, dict] = Undefined,
817
+ length: int = 50,
818
+ cursor: Union[UndefinedType, str] = Undefined
819
+ ) -> dict:
820
+ """Get evaluation values list for diagnosis filtering.
821
+
822
+ Retrieves evaluation values for diagnosis filtering with pagination support.
823
+
824
+ Args:
825
+ dataset_id (str): The dataset ID.
826
+ prediction_set_id (str): The prediction set ID.
827
+ filter (Union[UndefinedType, dict]): Diagnosis filter for evaluation values.
828
+ length (int): Number of items to retrieve per page.
829
+ cursor (Union[UndefinedType, str]): Cursor for pagination.
830
+
831
+ Returns:
832
+ dict: Response containing totalCount, next cursor, and data list with dataId fields.
833
+ """
834
+ if dataset_id is None:
835
+ raise BadParameterError("dataset_id is required.")
836
+ if prediction_set_id is None:
837
+ raise BadParameterError("prediction_set_id is required.")
838
+
839
+ response = self.request_gql(
840
+ Queries.GET_EVALUATION_VALUE_LIST,
841
+ Queries.GET_EVALUATION_VALUE_LIST["variables"](
842
+ dataset_id=dataset_id,
843
+ prediction_set_id=prediction_set_id,
844
+ filter=filter,
845
+ length=length,
846
+ cursor=cursor
847
+ )
848
+ )
849
+ return response.get("evaluationValueList", {})
850
+
851
+ def get_total_data_id_count_in_evaluation_value(
852
+ self,
853
+ dataset_id: str,
854
+ prediction_set_id: str,
855
+ filter: Union[UndefinedType, dict] = Undefined
856
+ ) -> int:
857
+ """Get total count of data IDs in evaluation values for diagnosis filtering.
858
+
859
+ Args:
860
+ dataset_id (str): The dataset ID.
861
+ prediction_set_id (str): The prediction set ID.
862
+ filter (Union[UndefinedType, dict]): Diagnosis filter for evaluation values.
863
+
864
+ Returns:
865
+ int: Total count of evaluation values.
866
+ """
867
+ result = self.get_evaluation_value_list(
868
+ dataset_id=dataset_id,
869
+ prediction_set_id=prediction_set_id,
870
+ filter=filter,
871
+ length=1
872
+ )
873
+ return result.get("totalCount", 0)
@@ -2,10 +2,12 @@ from .dataset import dataset_params
2
2
  from .datasets import datasets_params
3
3
  from .create_dataset import create_dataset_params
4
4
  from .update_dataset import update_dataset_params
5
+ from .delete_dataset import delete_dataset_params
5
6
 
6
7
  __all__ = (
7
8
  "dataset_params",
8
9
  "datasets_params",
9
10
  "create_dataset_params",
10
11
  "update_dataset_params",
12
+ "delete_dataset_params",
11
13
  )
@@ -0,0 +1,12 @@
1
+ def delete_dataset_params(dataset_id: str):
2
+ """Generate variables for delete dataset GraphQL mutation.
3
+
4
+ Args:
5
+ dataset_id (str): The ID of the dataset to delete.
6
+
7
+ Returns:
8
+ dict: Variables dictionary for the GraphQL mutation.
9
+ """
10
+ return {
11
+ "dataset_id": dataset_id
12
+ }
@@ -3,6 +3,7 @@ from spb_onprem.datasets.params import (
3
3
  datasets_params,
4
4
  create_dataset_params,
5
5
  update_dataset_params,
6
+ delete_dataset_params,
6
7
  )
7
8
 
8
9
  class Schemas:
@@ -77,3 +78,13 @@ class Queries():
77
78
  ''',
78
79
  "variables": update_dataset_params,
79
80
  }
81
+
82
+ DELETE_DATASET = {
83
+ "name": "deleteDataset",
84
+ "query": '''
85
+ mutation DeleteDataset($dataset_id: ID!) {
86
+ deleteDataset(datasetId: $dataset_id)
87
+ }
88
+ ''',
89
+ "variables": delete_dataset_params,
90
+ }
@@ -130,3 +130,21 @@ class DatasetService(BaseService):
130
130
  ),
131
131
  )
132
132
  return Dataset.model_validate(response)
133
+
134
+ def delete_dataset(self, dataset_id: str) -> bool:
135
+ """Delete the dataset.
136
+
137
+ Args:
138
+ dataset_id (str): The ID of the dataset to delete.
139
+
140
+ Returns:
141
+ bool: True if deletion was successful.
142
+ """
143
+ if dataset_id is None:
144
+ raise BadParameterError("dataset_id is required.")
145
+
146
+ response = self.request_gql(
147
+ Queries.DELETE_DATASET,
148
+ Queries.DELETE_DATASET["variables"](dataset_id=dataset_id)
149
+ )
150
+ return response.get("deleteDataset", False)
@@ -26,6 +26,8 @@ from .activities.entities import (
26
26
  )
27
27
  from .exports.entities import Export
28
28
  from .contents.entities import Content
29
+ from .predictions.entities import PredictionSet
30
+ from .models.entities import Model
29
31
 
30
32
  __all__ = [
31
33
  # Core Entities
@@ -43,6 +45,8 @@ __all__ = [
43
45
  "Export",
44
46
  "Content",
45
47
  "Frame",
48
+ "PredictionSet",
49
+ "Model",
46
50
 
47
51
  # Enums
48
52
  "DataType",
@@ -0,0 +1,5 @@
1
+ from .service import InferService
2
+
3
+ __all__ = [
4
+ "InferService",
5
+ ]
@@ -0,0 +1,56 @@
1
+ import os
2
+ from typing import Dict, Any
3
+
4
+ from spb_onprem.base_service import BaseService
5
+ from spb_onprem.exceptions import BadParameterError
6
+
7
+
8
+ class InferService(BaseService):
9
+ """Service class for handling inference operations."""
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.model_endpoint_url = os.environ.get("MODEL_ENDPOINT_URL")
14
+ if not self.model_endpoint_url:
15
+ raise ValueError("MODEL_ENDPOINT_URL environment variable is required")
16
+
17
+ def infer_data(
18
+ self,
19
+ model_id: str,
20
+ base64_image: str
21
+ ) -> Dict[str, Any]:
22
+ """Perform inference on image data using the specified model.
23
+
24
+ Args:
25
+ model_id (str): The model ID to use for inference.
26
+ base64_image (str): Base64 encoded image data.
27
+
28
+ Returns:
29
+ Dict[str, Any]: The inference result.
30
+
31
+ Raises:
32
+ BadParameterError: If required parameters are missing.
33
+ """
34
+ if model_id is None:
35
+ raise BadParameterError("model_id is required.")
36
+ if base64_image is None:
37
+ raise BadParameterError("base64_image is required.")
38
+
39
+ payload = {
40
+ "model_id": model_id,
41
+ "base64_image": base64_image,
42
+ }
43
+
44
+ try:
45
+ response = self.request(
46
+ method="POST",
47
+ url=self.model_endpoint_url,
48
+ json_data=payload,
49
+ headers={
50
+ "Content-Type": "application/json"
51
+ }
52
+ )
53
+ return response
54
+ except Exception as e:
55
+ print(f"Failed to fetch inference result: {e}")
56
+ raise
@@ -0,0 +1,7 @@
1
+ from .service import ModelService
2
+ from .entities import Model
3
+
4
+ __all__ = [
5
+ "ModelService",
6
+ "Model",
7
+ ]
@@ -0,0 +1,9 @@
1
+ from typing import Optional
2
+ from spb_onprem.base_model import BaseModel
3
+
4
+
5
+ class Model(BaseModel):
6
+ """Model entity representing a model in the dataset."""
7
+
8
+ id: str
9
+ name: Optional[str] = None
@@ -0,0 +1,7 @@
1
+ from .get_models import get_models_params
2
+ from .delete_model import delete_model_params
3
+
4
+ __all__ = [
5
+ "get_models_params",
6
+ "delete_model_params",
7
+ ]
@@ -0,0 +1,14 @@
1
+ def delete_model_params(dataset_id: str, model_id: str):
2
+ """Generate variables for delete model GraphQL mutation.
3
+
4
+ Args:
5
+ dataset_id (str): The ID of the dataset.
6
+ model_id (str): The ID of the model to delete.
7
+
8
+ Returns:
9
+ dict: Variables dictionary for the GraphQL mutation.
10
+ """
11
+ return {
12
+ "dataset_id": dataset_id,
13
+ "id": model_id
14
+ }