clarifai 11.2.3rc4__tar.gz → 11.2.3rc6__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 (243) hide show
  1. {clarifai-11.2.3rc4/clarifai.egg-info → clarifai-11.2.3rc6}/PKG-INFO +1 -1
  2. clarifai-11.2.3rc6/clarifai/__init__.py +1 -0
  3. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/model_class.py +8 -143
  4. clarifai-11.2.3rc6/clarifai/runners/utils/data_utils.py +337 -0
  5. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6/clarifai.egg-info}/PKG-INFO +1 -1
  6. clarifai-11.2.3rc4/clarifai/__init__.py +0 -1
  7. clarifai-11.2.3rc4/clarifai/runners/utils/data_utils.py +0 -180
  8. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/LICENSE +0 -0
  9. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/MANIFEST.in +0 -0
  10. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/README.md +0 -0
  11. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/__pycache__/__init__.cpython-310.pyc +0 -0
  12. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/__pycache__/__init__.cpython-39.pyc +0 -0
  13. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/__pycache__/errors.cpython-310.pyc +0 -0
  14. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/__pycache__/versions.cpython-310.pyc +0 -0
  15. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/README.md +0 -0
  16. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__init__.py +0 -0
  17. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__main__.py +0 -0
  18. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  19. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/base.cpython-310.pyc +0 -0
  20. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/base_cli.cpython-310.pyc +0 -0
  21. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/compute_cluster.cpython-310.pyc +0 -0
  22. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/deployment.cpython-310.pyc +0 -0
  23. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/model.cpython-310.pyc +0 -0
  24. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/model_cli.cpython-310.pyc +0 -0
  25. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/__pycache__/nodepool.cpython-310.pyc +0 -0
  26. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/base.py +0 -0
  27. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/compute_cluster.py +0 -0
  28. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/deployment.py +0 -0
  29. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/model.py +0 -0
  30. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli/nodepool.py +0 -0
  31. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/cli.py +0 -0
  32. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__init__.py +0 -0
  33. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/__init__.cpython-310.pyc +0 -0
  34. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/__init__.cpython-39.pyc +0 -0
  35. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/app.cpython-310.pyc +0 -0
  36. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/app.cpython-39.pyc +0 -0
  37. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/base.cpython-310.pyc +0 -0
  38. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/compute_cluster.cpython-310.pyc +0 -0
  39. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/dataset.cpython-310.pyc +0 -0
  40. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/deployment.cpython-310.pyc +0 -0
  41. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/input.cpython-310.pyc +0 -0
  42. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/lister.cpython-310.pyc +0 -0
  43. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/model.cpython-310.pyc +0 -0
  44. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/module.cpython-310.pyc +0 -0
  45. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/nodepool.cpython-310.pyc +0 -0
  46. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/search.cpython-310.pyc +0 -0
  47. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/user.cpython-310.pyc +0 -0
  48. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/__pycache__/workflow.cpython-310.pyc +0 -0
  49. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/app.py +0 -0
  50. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/__init__.py +0 -0
  51. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/__pycache__/__init__.cpython-310.pyc +0 -0
  52. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/__pycache__/helper.cpython-310.pyc +0 -0
  53. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/__pycache__/register.cpython-310.pyc +0 -0
  54. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/__pycache__/stub.cpython-310.pyc +0 -0
  55. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/helper.py +0 -0
  56. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/register.py +0 -0
  57. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/auth/stub.py +0 -0
  58. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/base.py +0 -0
  59. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/compute_cluster.py +0 -0
  60. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/dataset.py +0 -0
  61. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/deployment.py +0 -0
  62. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/input.py +0 -0
  63. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/lister.py +0 -0
  64. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/model.py +0 -0
  65. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/model_client.py +0 -0
  66. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/module.py +0 -0
  67. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/nodepool.py +0 -0
  68. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/search.py +0 -0
  69. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/user.py +0 -0
  70. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/client/workflow.py +0 -0
  71. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/base.cpython-310.pyc +0 -0
  72. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/dataset.cpython-310.pyc +0 -0
  73. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/input.cpython-310.pyc +0 -0
  74. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/model.cpython-310.pyc +0 -0
  75. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/rag.cpython-310.pyc +0 -0
  76. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/search.cpython-310.pyc +0 -0
  77. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/__pycache__/workflow.cpython-310.pyc +0 -0
  78. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/base.py +0 -0
  79. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/dataset.py +0 -0
  80. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/input.py +0 -0
  81. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/model.py +0 -0
  82. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/rag.py +0 -0
  83. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/search.py +0 -0
  84. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/constants/workflow.py +0 -0
  85. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/__init__.py +0 -0
  86. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/__pycache__/__init__.cpython-310.pyc +0 -0
  87. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
  88. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/export/__init__.py +0 -0
  89. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/export/__pycache__/__init__.cpython-310.pyc +0 -0
  90. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/export/__pycache__/__init__.cpython-39.pyc +0 -0
  91. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/export/__pycache__/inputs_annotations.cpython-310.pyc +0 -0
  92. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/export/inputs_annotations.py +0 -0
  93. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__init__.py +0 -0
  94. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/__init__.cpython-310.pyc +0 -0
  95. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/__init__.cpython-39.pyc +0 -0
  96. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/base.cpython-310.pyc +0 -0
  97. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/features.cpython-310.pyc +0 -0
  98. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/image.cpython-310.pyc +0 -0
  99. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/multimodal.cpython-310.pyc +0 -0
  100. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/text.cpython-310.pyc +0 -0
  101. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/__pycache__/utils.cpython-310.pyc +0 -0
  102. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/base.py +0 -0
  103. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/features.py +0 -0
  104. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/image.py +0 -0
  105. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/README.md +0 -0
  106. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/__init__.py +0 -0
  107. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/__pycache__/__init__.cpython-39.pyc +0 -0
  108. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
  109. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
  110. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
  111. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
  112. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/multimodal.py +0 -0
  113. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/text.py +0 -0
  114. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/datasets/upload/utils.py +0 -0
  115. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/errors.py +0 -0
  116. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/models/__init__.py +0 -0
  117. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/models/__pycache__/__init__.cpython-39.pyc +0 -0
  118. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/models/api.py +0 -0
  119. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/README.md +0 -0
  120. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/__init__.py +0 -0
  121. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/__pycache__/__init__.cpython-39.pyc +0 -0
  122. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/css.py +0 -0
  123. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/pages.py +0 -0
  124. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/modules/style.css +0 -0
  125. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__init__.py +0 -0
  126. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__pycache__/__init__.cpython-310.pyc +0 -0
  127. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__pycache__/__init__.cpython-39.pyc +0 -0
  128. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__pycache__/rag.cpython-310.pyc +0 -0
  129. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__pycache__/rag.cpython-39.pyc +0 -0
  130. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/__pycache__/utils.cpython-310.pyc +0 -0
  131. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/rag.py +0 -0
  132. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/rag/utils.py +0 -0
  133. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/__init__.py +0 -0
  134. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/__pycache__/__init__.cpython-310.pyc +0 -0
  135. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/__pycache__/__init__.cpython-39.pyc +0 -0
  136. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/dockerfile_template/Dockerfile.template +0 -0
  137. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__init__.py +0 -0
  138. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/__init__.cpython-310.pyc +0 -0
  139. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/__init__.cpython-39.pyc +0 -0
  140. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc +0 -0
  141. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/base_typed_model.cpython-39.pyc +0 -0
  142. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/model_class.cpython-310.pyc +0 -0
  143. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/model_run_locally.cpython-310-pytest-7.1.2.pyc +0 -0
  144. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/model_run_locally.cpython-310.pyc +0 -0
  145. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc +0 -0
  146. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/__pycache__/model_upload.cpython-310.pyc +0 -0
  147. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/model_builder.py +0 -0
  148. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/model_run_locally.py +0 -0
  149. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/model_runner.py +0 -0
  150. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/models/model_servicer.py +0 -0
  151. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/server.py +0 -0
  152. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__init__.py +0 -0
  153. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc +0 -0
  154. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/__init__.cpython-38.pyc +0 -0
  155. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  156. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-310.pyc +0 -0
  157. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-38.pyc +0 -0
  158. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-39.pyc +0 -0
  159. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/const.cpython-310.pyc +0 -0
  160. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/constants.cpython-310.pyc +0 -0
  161. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/constants.cpython-38.pyc +0 -0
  162. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/constants.cpython-39.pyc +0 -0
  163. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc +0 -0
  164. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_handler.cpython-38.pyc +0 -0
  165. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_handler.cpython-39.pyc +0 -0
  166. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_utils.cpython-310.pyc +0 -0
  167. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_utils.cpython-38.pyc +0 -0
  168. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/data_utils.cpython-39.pyc +0 -0
  169. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/grpc_server.cpython-310.pyc +0 -0
  170. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/grpc_server.cpython-38.pyc +0 -0
  171. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/grpc_server.cpython-39.pyc +0 -0
  172. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/health.cpython-310.pyc +0 -0
  173. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/health.cpython-38.pyc +0 -0
  174. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/health.cpython-39.pyc +0 -0
  175. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/loader.cpython-310.pyc +0 -0
  176. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/logging.cpython-310.pyc +0 -0
  177. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/logging.cpython-38.pyc +0 -0
  178. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/logging.cpython-39.pyc +0 -0
  179. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/stream_source.cpython-310.pyc +0 -0
  180. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/stream_source.cpython-39.pyc +0 -0
  181. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-310.pyc +0 -0
  182. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-38.pyc +0 -0
  183. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-39.pyc +0 -0
  184. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/code_script.py +0 -0
  185. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/const.py +0 -0
  186. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/data_types.py +0 -0
  187. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/loader.py +0 -0
  188. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/method_signatures.py +0 -0
  189. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/serializers.py +0 -0
  190. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/runners/utils/url_fetcher.py +0 -0
  191. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/schema/__pycache__/search.cpython-310.pyc +0 -0
  192. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/schema/search.py +0 -0
  193. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/urls/__pycache__/helper.cpython-310.pyc +0 -0
  194. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/urls/helper.py +0 -0
  195. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__init__.py +0 -0
  196. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/__init__.cpython-310.pyc +0 -0
  197. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  198. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/cli.cpython-310.pyc +0 -0
  199. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/constants.cpython-310.pyc +0 -0
  200. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/logging.cpython-310.pyc +0 -0
  201. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/misc.cpython-310.pyc +0 -0
  202. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/__pycache__/model_train.cpython-310.pyc +0 -0
  203. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/cli.py +0 -0
  204. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/constants.py +0 -0
  205. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/__init__.py +0 -0
  206. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/__pycache__/__init__.cpython-39.pyc +0 -0
  207. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/__pycache__/main.cpython-39.pyc +0 -0
  208. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/helpers.py +0 -0
  209. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/main.py +0 -0
  210. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
  211. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/logging.py +0 -0
  212. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/misc.py +0 -0
  213. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/utils/model_train.py +0 -0
  214. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/versions.py +0 -0
  215. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__init__.py +0 -0
  216. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__pycache__/__init__.cpython-310.pyc +0 -0
  217. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__pycache__/__init__.cpython-39.pyc +0 -0
  218. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__pycache__/export.cpython-310.pyc +0 -0
  219. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__pycache__/utils.cpython-310.pyc +0 -0
  220. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/__pycache__/validate.cpython-310.pyc +0 -0
  221. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/export.py +0 -0
  222. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/utils.py +0 -0
  223. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai/workflows/validate.py +0 -0
  224. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai.egg-info/SOURCES.txt +0 -0
  225. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai.egg-info/dependency_links.txt +0 -0
  226. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai.egg-info/entry_points.txt +0 -0
  227. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai.egg-info/requires.txt +0 -0
  228. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/clarifai.egg-info/top_level.txt +0 -0
  229. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/pyproject.toml +0 -0
  230. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/requirements.txt +0 -0
  231. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/setup.cfg +0 -0
  232. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/setup.py +0 -0
  233. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_app.py +0 -0
  234. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_auth.py +0 -0
  235. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_data_upload.py +0 -0
  236. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_eval.py +0 -0
  237. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_misc.py +0 -0
  238. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_model_predict.py +0 -0
  239. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_model_train.py +0 -0
  240. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_modules.py +0 -0
  241. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_rag.py +0 -0
  242. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_search.py +0 -0
  243. {clarifai-11.2.3rc4 → clarifai-11.2.3rc6}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: clarifai
3
- Version: 11.2.3rc4
3
+ Version: 11.2.3rc6
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -0,0 +1 @@
1
+ __version__ = "11.2.3rc6"
@@ -1,6 +1,5 @@
1
1
  import inspect
2
2
  import itertools
3
- import json
4
3
  import logging
5
4
  import os
6
5
  import traceback
@@ -12,6 +11,7 @@ from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
12
11
  from google.protobuf import json_format
13
12
 
14
13
  from clarifai.runners.utils import data_types
14
+ from clarifai.runners.utils.data_utils import DataConverter
15
15
  from clarifai.runners.utils.method_signatures import (build_function_signature, deserialize,
16
16
  get_stream_from_signature, serialize,
17
17
  signatures_to_json)
@@ -71,141 +71,6 @@ class ModelClass(ABC):
71
71
  output.data.text.raw = signatures_to_json(signatures)
72
72
  return resp
73
73
 
74
- def _convert_input_data_to_new_format(
75
- self, data: resources_pb2.Data,
76
- input_fields: List[resources_pb2.ModelTypeField]) -> resources_pb2.Data:
77
- """Convert input data to new format."""
78
- new_data = resources_pb2.Data()
79
- for field in input_fields:
80
- part_data = self._convert_field(data, field)
81
- part = new_data.parts.add()
82
- part.id = field.name
83
- part.data.CopyFrom(part_data)
84
- return new_data
85
-
86
- def _convert_field(self, old_data: resources_pb2.Data,
87
- field: resources_pb2.ModelTypeField) -> resources_pb2.Data:
88
- data_type = field.type
89
- if data_type == resources_pb2.ModelTypeField.DataType.STR:
90
- new_data = resources_pb2.Data()
91
- new_data.string_value = old_data.text.raw
92
- return new_data
93
- elif data_type == resources_pb2.ModelTypeField.DataType.IMAGE:
94
- new_data = resources_pb2.Data()
95
- new_data.image.CopyFrom(old_data.image)
96
- return new_data
97
- elif data_type == resources_pb2.ModelTypeField.DataType.VIDEO:
98
- new_data = resources_pb2.Data()
99
- new_data.video.CopyFrom(old_data.video)
100
- return new_data
101
- elif data_type == resources_pb2.ModelTypeField.DataType.BOOL:
102
- new_data = resources_pb2.Data()
103
- new_data.bool_value = old_data.bool_value
104
- return new_data
105
- elif data_type == resources_pb2.ModelTypeField.DataType.INT:
106
- new_data = resources_pb2.Data()
107
- new_data.int_value = old_data.int_value
108
- return new_data
109
- elif data_type == resources_pb2.ModelTypeField.DataType.FLOAT:
110
- new_data = resources_pb2.Data()
111
- new_data.float_value = old_data.float_value
112
- return new_data
113
- elif data_type == resources_pb2.ModelTypeField.DataType.BYTES:
114
- new_data = resources_pb2.Data()
115
- new_data.bytes_value = old_data.bytes_value
116
- return new_data
117
- elif data_type == resources_pb2.ModelTypeField.DataType.NDARRAY:
118
- new_data = resources_pb2.Data()
119
- new_data.ndarray.CopyFrom(old_data.ndarray)
120
- return new_data
121
- elif data_type == resources_pb2.ModelTypeField.DataType.JSON_DATA:
122
- new_data = resources_pb2.Data()
123
- struct_dict = old_data.text.raw
124
- new_data.string_value = json.dumps(struct_dict)
125
- return new_data
126
- elif data_type == resources_pb2.ModelTypeField.DataType.TEXT:
127
- new_data = resources_pb2.Data()
128
- new_data.text.CopyFrom(old_data.text)
129
- return new_data
130
- elif data_type == resources_pb2.ModelTypeField.DataType.CONCEPT:
131
- new_data = resources_pb2.Data()
132
- new_data.concepts.extend(old_data.concepts)
133
- return new_data
134
- elif data_type == resources_pb2.ModelTypeField.DataType.REGION:
135
- new_data = resources_pb2.Data()
136
- new_data.regions.extend(old_data.regions)
137
- return new_data
138
- elif data_type == resources_pb2.ModelTypeField.DataType.FRAME:
139
- new_data = resources_pb2.Data()
140
- new_data.frames.extend(old_data.frames)
141
- return new_data
142
- elif data_type == resources_pb2.ModelTypeField.DataType.AUDIO:
143
- new_data = resources_pb2.Data()
144
- new_data.audio.CopyFrom(old_data.audio)
145
- return new_data
146
- elif data_type == resources_pb2.ModelTypeField.DataType.LIST:
147
- new_data = resources_pb2.Data()
148
- if not field.type_args:
149
- raise ValueError("LIST type requires type_args")
150
- element_field = field.type_args[0]
151
- element_data = self._convert_field(old_data, element_field)
152
- part = new_data.parts.add()
153
- part.data.CopyFrom(element_data)
154
- return new_data
155
- elif data_type == resources_pb2.ModelTypeField.DataType.TUPLE:
156
- new_data = resources_pb2.Data()
157
- for element_field in field.type_args:
158
- element_data = self._convert_field(old_data, element_field)
159
- part = new_data.parts.add()
160
- part.data.CopyFrom(element_data)
161
- return new_data
162
- elif data_type == resources_pb2.ModelTypeField.DataType.NAMED_FIELDS:
163
- new_data = resources_pb2.Data()
164
- for named_field in field.type_args:
165
- part_data = self._convert_field(old_data, named_field)
166
- part = new_data.parts.add()
167
- part.id = named_field.name
168
- part.data.CopyFrom(part_data)
169
- return new_data
170
- else:
171
- raise ValueError(f"Unsupported data type: {data_type}")
172
-
173
- def is_old_format(self, data: resources_pb2.Data) -> bool:
174
- """Check if the Data proto is in the old format (without parts)."""
175
- if len(data.parts) > 0:
176
- return False # New format uses parts
177
-
178
- # Check if any singular field is set
179
- singular_fields = [
180
- 'image', 'video', 'metadata', 'geo', 'text', 'audio', 'ndarray', 'int_value',
181
- 'float_value', 'bytes_value', 'bool_value', 'string_value'
182
- ]
183
- for field in singular_fields:
184
- if data.HasField(field):
185
- return True
186
-
187
- # Check if any repeated field has elements
188
- repeated_fields = [
189
- 'concepts', 'colors', 'clusters', 'embeddings', 'regions', 'frames', 'tracks',
190
- 'time_segments', 'hits', 'heatmaps'
191
- ]
192
- for field in repeated_fields:
193
- if getattr(data, field):
194
- return True
195
-
196
- return False
197
-
198
- def _convert_output_data_to_old_format(self, data: resources_pb2.Data) -> resources_pb2.Data:
199
- """Convert output data to old format."""
200
- old_data = resources_pb2.Data()
201
- part_data = data.parts[0].data
202
- # Handle text.raw specially (common case for text outputs)
203
- old_data = part_data
204
- if old_data.string_value:
205
- old_data.text.raw = old_data.string_value
206
-
207
- return old_data
208
-
209
74
  def _batch_predict(self, method, inputs: List[Dict[str, Any]]) -> List[Any]:
210
75
  """Batch predict method for multiple inputs."""
211
76
  outputs = []
@@ -239,10 +104,10 @@ class ModelClass(ABC):
239
104
  python_param_types = method_info.python_param_types
240
105
  for input in request.inputs:
241
106
  # check if input is in old format
242
- is_convert = self.is_old_format(input.data)
107
+ is_convert = DataConverter.is_old_format(input.data)
243
108
  if is_convert:
244
109
  # convert to new format
245
- new_data = self._convert_input_data_to_new_format(input.data, signature.input_fields)
110
+ new_data = DataConverter.convert_input_data_to_new_format(input.data, signature.input_fields)
246
111
  input.data.CopyFrom(new_data)
247
112
  # convert inputs to python types
248
113
  inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
@@ -285,10 +150,10 @@ class ModelClass(ABC):
285
150
  python_param_types = method_info.python_param_types
286
151
  for input in request.inputs:
287
152
  # check if input is in old format
288
- is_convert = self.is_old_format(input.data)
153
+ is_convert = DataConverter.is_old_format(input.data)
289
154
  if is_convert:
290
155
  # convert to new format
291
- new_data = self._convert_input_data_to_new_format(input.data, signature.input_fields)
156
+ new_data = DataConverter.convert_input_data_to_new_format(input.data, signature.input_fields)
292
157
  input.data.CopyFrom(new_data)
293
158
  inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
294
159
  signature.input_fields, python_param_types)
@@ -346,10 +211,10 @@ class ModelClass(ABC):
346
211
 
347
212
  for input in request.inputs:
348
213
  # check if input is in old format
349
- is_convert = self.is_old_format(input.data)
214
+ is_convert = DataConverter.is_old_format(input.data)
350
215
  if is_convert:
351
216
  # convert to new format
352
- new_data = self._convert_input_data_to_new_format(input.data, signature.input_fields)
217
+ new_data = DataConverter.convert_input_data_to_new_format(input.data, signature.input_fields)
353
218
  input.data.CopyFrom(new_data)
354
219
  # convert all inputs for the first request, including the first stream value
355
220
  inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
@@ -423,7 +288,7 @@ class ModelClass(ABC):
423
288
  serialize({'return': output}, variables_signature, proto.data, is_output=True)
424
289
  if convert_old_format:
425
290
  # convert to old format
426
- data = self._convert_output_data_to_old_format(proto.data)
291
+ data = DataConverter.convert_output_data_to_old_format(proto.data)
427
292
  proto.data.CopyFrom(data)
428
293
  proto.status.code = status_code_pb2.SUCCESS
429
294
  if hasattr(self, "_prompt_tokens") and self._prompt_tokens is not None:
@@ -0,0 +1,337 @@
1
+ from io import BytesIO
2
+
3
+ from clarifai_grpc.grpc.api.resources_pb2 import ModelTypeEnumOption
4
+ from clarifai_grpc.grpc.api.resources_pb2 import ModelTypeField as InputFieldProto
5
+ from clarifai_grpc.grpc.api.resources_pb2 import ModelTypeRangeInfo
6
+ from PIL import Image
7
+
8
+ from clarifai.runners.utils.data_types import MessageData
9
+ from clarifai_grpc.grpc.api import resources_pb2
10
+ from typing import List
11
+
12
+
13
+ def image_to_bytes(img: Image.Image, format="JPEG") -> bytes:
14
+ buffered = BytesIO()
15
+ img.save(buffered, format=format)
16
+ img_str = buffered.getvalue()
17
+ return img_str
18
+
19
+
20
+ def bytes_to_image(bytes_img) -> Image.Image:
21
+ img = Image.open(BytesIO(bytes_img))
22
+ return img
23
+
24
+
25
+ def is_openai_chat_format(messages):
26
+ """
27
+ Verify if the given argument follows the OpenAI chat messages format.
28
+
29
+ Args:
30
+ messages (list): A list of dictionaries representing chat messages.
31
+
32
+ Returns:
33
+ bool: True if valid, False otherwise.
34
+ """
35
+ if not isinstance(messages, list):
36
+ return False
37
+
38
+ valid_roles = {"system", "user", "assistant", "function"}
39
+
40
+ for msg in messages:
41
+ if not isinstance(msg, dict):
42
+ return False
43
+ if "role" not in msg or "content" not in msg:
44
+ return False
45
+ if msg["role"] not in valid_roles:
46
+ return False
47
+
48
+ content = msg["content"]
49
+
50
+ # Content should be either a string (text message) or a multimodal list
51
+ if isinstance(content, str):
52
+ continue # Valid text message
53
+
54
+ elif isinstance(content, list):
55
+ for item in content:
56
+ if not isinstance(item, dict):
57
+ return False
58
+ return True
59
+
60
+
61
+ class InputField(MessageData):
62
+ """A field that can be used to store input data."""
63
+
64
+ def __init__(
65
+ self,
66
+ default=None,
67
+ description=None,
68
+ min_value=None,
69
+ max_value=None,
70
+ choices=None,
71
+ # is_param=True
72
+ ):
73
+ self.default = default
74
+ self.description = description
75
+ self.min_value = min_value
76
+ self.max_value = max_value
77
+ self.choices = choices
78
+ # self.is_param = is_param
79
+
80
+ def __repr__(self) -> str:
81
+ attrs = []
82
+ if self.default is not None:
83
+ attrs.append(f"default={self.default!r}")
84
+ if self.description is not None:
85
+ attrs.append(f"description={self.description!r}")
86
+ if self.min_value is not None:
87
+ attrs.append(f"min_value={self.min_value!r}")
88
+ if self.max_value is not None:
89
+ attrs.append(f"max_value={self.max_value!r}")
90
+ if self.choices is not None:
91
+ attrs.append(f"choices={self.choices!r}")
92
+ # attrs.append(f"is_param={self.is_param!r}")
93
+ return f"InputField({', '.join(attrs)})"
94
+
95
+ def to_proto(self, proto=None) -> InputFieldProto:
96
+ if proto is None:
97
+ proto = InputFieldProto()
98
+ if self.description is not None:
99
+ proto.description = self.description
100
+
101
+ if self.choices is not None:
102
+ for choice in self.choices:
103
+ option = ModelTypeEnumOption(id=str(choice))
104
+ proto.model_type_enum_options.append(option)
105
+
106
+ proto.required = self.default is None
107
+
108
+ if self.min_value is not None or self.max_value is not None:
109
+ range_info = ModelTypeRangeInfo()
110
+ if self.min_value is not None:
111
+ range_info.min = float(self.min_value)
112
+ if self.max_value is not None:
113
+ range_info.max = float(self.max_value)
114
+ proto.model_type_range_info.CopyFrom(range_info)
115
+ # proto.is_param = self.is_param
116
+
117
+ if self.default is not None:
118
+ if isinstance(self.default, str) or isinstance(self.default, bool) or isinstance(
119
+ self.default, (int, float)):
120
+ proto.default = str(self.default)
121
+ else:
122
+ import json
123
+ proto.default = json.dumps(self.default)
124
+
125
+ return proto
126
+
127
+ @classmethod
128
+ def from_proto(cls, proto):
129
+ default = None
130
+ if proto.HasField('default'):
131
+ pb_value = proto.default
132
+ if pb_value.HasField('string_value'):
133
+ default = pb_value.string_value
134
+ try:
135
+ import json
136
+ default = json.loads(default)
137
+ except json.JSONDecodeError:
138
+ pass
139
+ elif pb_value.HasField('number_value'):
140
+ default = pb_value.number_value
141
+ if default.is_integer():
142
+ default = int(default)
143
+ else:
144
+ default = float(default)
145
+ elif pb_value.HasField('bool_value'):
146
+ default = pb_value.bool_value
147
+
148
+ choices = [option.id for option in proto.model_type_enum_options
149
+ ] if proto.model_type_enum_options else None
150
+
151
+ min_value = None
152
+ max_value = None
153
+ if proto.HasField('model_type_range_info'):
154
+ min_value = proto.model_type_range_info.min
155
+ max_value = proto.model_type_range_info.max
156
+ if min_value.is_integer():
157
+ min_value = int(min_value)
158
+ if max_value.is_integer():
159
+ max_value = int(max_value)
160
+
161
+ return cls(
162
+ default=default,
163
+ description=proto.description if proto.description else None,
164
+ min_value=min_value,
165
+ max_value=max_value,
166
+ choices=choices,
167
+ # is_param=proto.is_param
168
+ )
169
+
170
+ @classmethod
171
+ def set_default(cls, proto=None, default=None):
172
+
173
+ if proto is None:
174
+ proto = InputFieldProto()
175
+ if default is not None:
176
+ if isinstance(default, str) or isinstance(default, bool) or isinstance(
177
+ default, (int, float)):
178
+ proto.default = str(default)
179
+ else:
180
+ import json
181
+ proto.default = json.dumps(default)
182
+ return proto
183
+
184
+
185
+ class DataConverter:
186
+ """A class that can be used to convert data to and from a specific format."""
187
+
188
+ @classmethod
189
+ def convert_input_data_to_new_format(
190
+ cls, data: resources_pb2.Data,
191
+ input_fields: List[resources_pb2.ModelTypeField]) -> resources_pb2.Data:
192
+ """Convert input data to new format."""
193
+ new_data = resources_pb2.Data()
194
+ for field in input_fields:
195
+ part_data = cls._convert_field(data, field)
196
+ if cls._is_data_set(part_data):
197
+ # if the field is set, add it to the new data part
198
+ part = new_data.parts.add()
199
+ part.id = field.name
200
+ part.data.CopyFrom(part_data)
201
+ else:
202
+ if field.required:
203
+ raise ValueError(f"Field {field.name} is required but not set")
204
+ return new_data
205
+
206
+ @classmethod
207
+ def _convert_field(cls, old_data: resources_pb2.Data,
208
+ field: resources_pb2.ModelTypeField) -> resources_pb2.Data:
209
+ data_type = field.type
210
+ new_data = resources_pb2.Data()
211
+ if data_type == resources_pb2.ModelTypeField.DataType.STR:
212
+ if old_data.HasField('text'):
213
+ new_data.string_value = old_data.text.raw
214
+ return new_data
215
+ elif data_type == resources_pb2.ModelTypeField.DataType.IMAGE:
216
+ if old_data.HasField('image'):
217
+ new_data.image.CopyFrom(old_data.image)
218
+ return new_data
219
+ elif data_type == resources_pb2.ModelTypeField.DataType.VIDEO:
220
+ if old_data.HasField('video'):
221
+ new_data.video.CopyFrom(old_data.video)
222
+ return new_data
223
+ elif data_type == resources_pb2.ModelTypeField.DataType.BOOL:
224
+ if old_data.HasField('bool_value'):
225
+ new_data.bool_value = old_data.bool_value
226
+ return new_data
227
+ elif data_type == resources_pb2.ModelTypeField.DataType.INT:
228
+ if old_data.HasField('int_value'):
229
+ new_data.int_value = old_data.int_value
230
+ return new_data
231
+ elif data_type == resources_pb2.ModelTypeField.DataType.FLOAT:
232
+ if old_data.HasField('float_value'):
233
+ new_data.float_value = old_data.float_value
234
+ return new_data
235
+ elif data_type == resources_pb2.ModelTypeField.DataType.BYTES:
236
+ if old_data.HasField('bytes_value'):
237
+ new_data.bytes_value = old_data.bytes_value
238
+ return new_data
239
+ elif data_type == resources_pb2.ModelTypeField.DataType.NDARRAY:
240
+ if old_data.HasField('ndarray'):
241
+ new_data.ndarray.CopyFrom(old_data.ndarray)
242
+ return new_data
243
+ elif data_type == resources_pb2.ModelTypeField.DataType.TEXT:
244
+ if old_data.HasField('text'):
245
+ new_data.text.CopyFrom(old_data.text)
246
+ return new_data
247
+ elif data_type == resources_pb2.ModelTypeField.DataType.AUDIO:
248
+ if old_data.HasField('audio'):
249
+ new_data.audio.CopyFrom(old_data.audio)
250
+ return new_data
251
+ elif data_type == resources_pb2.ModelTypeField.DataType.CONCEPT:
252
+ if old_data.concepts:
253
+ new_data.concepts.extend(old_data.concepts)
254
+ return new_data
255
+ elif data_type == resources_pb2.ModelTypeField.DataType.REGION:
256
+ if old_data.regions:
257
+ new_data.regions.extend(old_data.regions)
258
+ return new_data
259
+ elif data_type == resources_pb2.ModelTypeField.DataType.FRAME:
260
+ if old_data.frames:
261
+ new_data.frames.extend(old_data.frames)
262
+ return new_data
263
+ elif data_type == resources_pb2.ModelTypeField.DataType.LIST:
264
+ if not field.type_args:
265
+ raise ValueError("LIST type requires type_args")
266
+ element_field = field.type_args[0]
267
+ if element_field in (resources_pb2.ModelTypeField.DataType.CONCEPT,
268
+ resources_pb2.ModelTypeField.DataType.REGION,
269
+ resources_pb2.ModelTypeField.DataType.FRAME):
270
+ # convert to new format
271
+ new_data = cls._convert_field(old_data, element_field)
272
+ return new_data
273
+ else:
274
+ return new_data
275
+ # raise ValueError(f"Unsupported data type: {data_type}")
276
+
277
+ @classmethod
278
+ def is_old_format(cls, data: resources_pb2.Data) -> bool:
279
+ """Check if the Data proto is in the old format (without parts)."""
280
+ if len(data.parts) > 0:
281
+ return False # New format uses parts
282
+
283
+ # Check if any singular field is set
284
+ singular_fields = [
285
+ 'image', 'video', 'metadata', 'geo', 'text', 'audio', 'ndarray', 'int_value',
286
+ 'float_value', 'bytes_value', 'bool_value', 'string_value'
287
+ ]
288
+ for field in singular_fields:
289
+ if data.HasField(field):
290
+ return True
291
+
292
+ # Check if any repeated field has elements
293
+ repeated_fields = [
294
+ 'concepts', 'colors', 'clusters', 'embeddings', 'regions', 'frames', 'tracks',
295
+ 'time_segments', 'hits', 'heatmaps'
296
+ ]
297
+ for field in repeated_fields:
298
+ if getattr(data, field):
299
+ return True
300
+
301
+ return False
302
+
303
+ @classmethod
304
+ def convert_output_data_to_old_format(cls, data: resources_pb2.Data) -> resources_pb2.Data:
305
+ """Convert output data to old format."""
306
+ old_data = resources_pb2.Data()
307
+ part_data = data.parts[0].data
308
+ # Handle text.raw specially (common case for text outputs)
309
+ old_data = part_data
310
+ if old_data.string_value:
311
+ old_data.text.raw = old_data.string_value
312
+
313
+ return old_data
314
+
315
+ @classmethod
316
+ def _is_data_set(cls, data_msg):
317
+ # Singular message fields
318
+ singular_fields = ["image", "video", "metadata", "geo", "text", "audio", "ndarray"]
319
+ for field in singular_fields:
320
+ if data_msg.HasField(field):
321
+ return True
322
+
323
+ # Repeated fields
324
+ repeated_fields = [
325
+ "concepts", "colors", "clusters", "embeddings", "regions", "frames", "tracks",
326
+ "time_segments", "hits", "heatmaps", "parts"
327
+ ]
328
+ for field in repeated_fields:
329
+ if getattr(data_msg, field): # checks if the list is not empty
330
+ return True
331
+
332
+ # Scalar fields (proto3 default: 0 for numbers, empty for strings/bytes, False for bool)
333
+ if (data_msg.int_value != 0 or data_msg.float_value != 0.0 or data_msg.bytes_value != b"" or
334
+ data_msg.bool_value is True or data_msg.string_value != ""):
335
+ return True
336
+
337
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: clarifai
3
- Version: 11.2.3rc4
3
+ Version: 11.2.3rc6
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -1 +0,0 @@
1
- __version__ = "11.2.3rc4"