clarifai 11.2.4rc1__tar.gz → 11.2.4rc3__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 (245) hide show
  1. {clarifai-11.2.4rc1/clarifai.egg-info → clarifai-11.2.4rc3}/PKG-INFO +2 -13
  2. clarifai-11.2.4rc3/clarifai/__init__.py +1 -0
  3. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/model_builder.py +0 -55
  4. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/model_class.py +0 -5
  5. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/data_utils.py +46 -46
  6. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/method_signatures.py +8 -2
  7. clarifai-11.2.4rc3/clarifai/runners/utils/openai_convertor.py +167 -0
  8. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3/clarifai.egg-info}/PKG-INFO +2 -13
  9. clarifai-11.2.4rc1/clarifai/__init__.py +0 -1
  10. clarifai-11.2.4rc1/clarifai/runners/utils/openai_convertor.py +0 -227
  11. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/LICENSE +0 -0
  12. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/MANIFEST.in +0 -0
  13. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/README.md +0 -0
  14. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/__pycache__/__init__.cpython-310.pyc +0 -0
  15. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/__pycache__/__init__.cpython-39.pyc +0 -0
  16. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/__pycache__/errors.cpython-310.pyc +0 -0
  17. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/__pycache__/versions.cpython-310.pyc +0 -0
  18. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/README.md +0 -0
  19. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__init__.py +0 -0
  20. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__main__.py +0 -0
  21. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/__init__.cpython-310.pyc +0 -0
  22. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/base.cpython-310.pyc +0 -0
  23. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/base_cli.cpython-310.pyc +0 -0
  24. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/compute_cluster.cpython-310.pyc +0 -0
  25. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/deployment.cpython-310.pyc +0 -0
  26. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/model.cpython-310.pyc +0 -0
  27. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/model_cli.cpython-310.pyc +0 -0
  28. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/__pycache__/nodepool.cpython-310.pyc +0 -0
  29. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/base.py +0 -0
  30. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/compute_cluster.py +0 -0
  31. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/deployment.py +0 -0
  32. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/model.py +0 -0
  33. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli/nodepool.py +0 -0
  34. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/cli.py +0 -0
  35. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__init__.py +0 -0
  36. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/__init__.cpython-310.pyc +0 -0
  37. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/__init__.cpython-39.pyc +0 -0
  38. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/app.cpython-310.pyc +0 -0
  39. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/app.cpython-39.pyc +0 -0
  40. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/base.cpython-310.pyc +0 -0
  41. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/compute_cluster.cpython-310.pyc +0 -0
  42. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/dataset.cpython-310.pyc +0 -0
  43. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/deployment.cpython-310.pyc +0 -0
  44. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/input.cpython-310.pyc +0 -0
  45. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/lister.cpython-310.pyc +0 -0
  46. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/model.cpython-310.pyc +0 -0
  47. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/module.cpython-310.pyc +0 -0
  48. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/nodepool.cpython-310.pyc +0 -0
  49. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/search.cpython-310.pyc +0 -0
  50. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/user.cpython-310.pyc +0 -0
  51. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/__pycache__/workflow.cpython-310.pyc +0 -0
  52. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/app.py +0 -0
  53. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/__init__.py +0 -0
  54. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/__pycache__/__init__.cpython-310.pyc +0 -0
  55. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/__pycache__/helper.cpython-310.pyc +0 -0
  56. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/__pycache__/register.cpython-310.pyc +0 -0
  57. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/__pycache__/stub.cpython-310.pyc +0 -0
  58. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/helper.py +0 -0
  59. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/register.py +0 -0
  60. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/auth/stub.py +0 -0
  61. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/base.py +0 -0
  62. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/compute_cluster.py +0 -0
  63. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/dataset.py +0 -0
  64. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/deployment.py +0 -0
  65. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/input.py +0 -0
  66. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/lister.py +0 -0
  67. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/model.py +0 -0
  68. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/model_client.py +0 -0
  69. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/module.py +0 -0
  70. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/nodepool.py +0 -0
  71. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/search.py +0 -0
  72. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/user.py +0 -0
  73. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/client/workflow.py +0 -0
  74. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/base.cpython-310.pyc +0 -0
  75. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/dataset.cpython-310.pyc +0 -0
  76. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/input.cpython-310.pyc +0 -0
  77. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/model.cpython-310.pyc +0 -0
  78. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/rag.cpython-310.pyc +0 -0
  79. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/search.cpython-310.pyc +0 -0
  80. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/__pycache__/workflow.cpython-310.pyc +0 -0
  81. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/base.py +0 -0
  82. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/dataset.py +0 -0
  83. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/input.py +0 -0
  84. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/model.py +0 -0
  85. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/rag.py +0 -0
  86. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/search.py +0 -0
  87. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/constants/workflow.py +0 -0
  88. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/__init__.py +0 -0
  89. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/__pycache__/__init__.cpython-310.pyc +0 -0
  90. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
  91. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/export/__init__.py +0 -0
  92. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/export/__pycache__/__init__.cpython-310.pyc +0 -0
  93. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/export/__pycache__/__init__.cpython-39.pyc +0 -0
  94. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/export/__pycache__/inputs_annotations.cpython-310.pyc +0 -0
  95. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/export/inputs_annotations.py +0 -0
  96. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__init__.py +0 -0
  97. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/__init__.cpython-310.pyc +0 -0
  98. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/__init__.cpython-39.pyc +0 -0
  99. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/base.cpython-310.pyc +0 -0
  100. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/features.cpython-310.pyc +0 -0
  101. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/image.cpython-310.pyc +0 -0
  102. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/multimodal.cpython-310.pyc +0 -0
  103. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/text.cpython-310.pyc +0 -0
  104. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/__pycache__/utils.cpython-310.pyc +0 -0
  105. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/base.py +0 -0
  106. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/features.py +0 -0
  107. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/image.py +0 -0
  108. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/README.md +0 -0
  109. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/__init__.py +0 -0
  110. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/__pycache__/__init__.cpython-39.pyc +0 -0
  111. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
  112. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
  113. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
  114. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
  115. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/multimodal.py +0 -0
  116. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/text.py +0 -0
  117. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/datasets/upload/utils.py +0 -0
  118. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/errors.py +0 -0
  119. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/models/__init__.py +0 -0
  120. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/models/__pycache__/__init__.cpython-39.pyc +0 -0
  121. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/models/api.py +0 -0
  122. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/README.md +0 -0
  123. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/__init__.py +0 -0
  124. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/__pycache__/__init__.cpython-39.pyc +0 -0
  125. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/css.py +0 -0
  126. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/pages.py +0 -0
  127. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/modules/style.css +0 -0
  128. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__init__.py +0 -0
  129. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__pycache__/__init__.cpython-310.pyc +0 -0
  130. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__pycache__/__init__.cpython-39.pyc +0 -0
  131. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__pycache__/rag.cpython-310.pyc +0 -0
  132. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__pycache__/rag.cpython-39.pyc +0 -0
  133. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/__pycache__/utils.cpython-310.pyc +0 -0
  134. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/rag.py +0 -0
  135. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/rag/utils.py +0 -0
  136. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/__init__.py +0 -0
  137. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/__pycache__/__init__.cpython-310.pyc +0 -0
  138. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/__pycache__/__init__.cpython-39.pyc +0 -0
  139. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/dockerfile_template/Dockerfile.template +0 -0
  140. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__init__.py +0 -0
  141. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/__init__.cpython-310.pyc +0 -0
  142. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/__init__.cpython-39.pyc +0 -0
  143. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc +0 -0
  144. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/base_typed_model.cpython-39.pyc +0 -0
  145. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/model_class.cpython-310.pyc +0 -0
  146. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/model_run_locally.cpython-310-pytest-7.1.2.pyc +0 -0
  147. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/model_run_locally.cpython-310.pyc +0 -0
  148. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc +0 -0
  149. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/__pycache__/model_upload.cpython-310.pyc +0 -0
  150. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/model_run_locally.py +0 -0
  151. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/model_runner.py +0 -0
  152. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/models/model_servicer.py +0 -0
  153. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/server.py +0 -0
  154. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__init__.py +0 -0
  155. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc +0 -0
  156. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/__init__.cpython-38.pyc +0 -0
  157. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  158. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-310.pyc +0 -0
  159. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-38.pyc +0 -0
  160. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/buffered_stream.cpython-39.pyc +0 -0
  161. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/const.cpython-310.pyc +0 -0
  162. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/constants.cpython-310.pyc +0 -0
  163. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/constants.cpython-38.pyc +0 -0
  164. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/constants.cpython-39.pyc +0 -0
  165. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc +0 -0
  166. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_handler.cpython-38.pyc +0 -0
  167. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_handler.cpython-39.pyc +0 -0
  168. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_utils.cpython-310.pyc +0 -0
  169. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_utils.cpython-38.pyc +0 -0
  170. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/data_utils.cpython-39.pyc +0 -0
  171. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/grpc_server.cpython-310.pyc +0 -0
  172. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/grpc_server.cpython-38.pyc +0 -0
  173. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/grpc_server.cpython-39.pyc +0 -0
  174. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/health.cpython-310.pyc +0 -0
  175. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/health.cpython-38.pyc +0 -0
  176. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/health.cpython-39.pyc +0 -0
  177. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/loader.cpython-310.pyc +0 -0
  178. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/logging.cpython-310.pyc +0 -0
  179. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/logging.cpython-38.pyc +0 -0
  180. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/logging.cpython-39.pyc +0 -0
  181. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/stream_source.cpython-310.pyc +0 -0
  182. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/stream_source.cpython-39.pyc +0 -0
  183. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-310.pyc +0 -0
  184. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-38.pyc +0 -0
  185. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/__pycache__/url_fetcher.cpython-39.pyc +0 -0
  186. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/code_script.py +0 -0
  187. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/const.py +0 -0
  188. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/data_types.py +0 -0
  189. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/loader.py +0 -0
  190. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/serializers.py +0 -0
  191. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/runners/utils/url_fetcher.py +0 -0
  192. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/schema/__pycache__/search.cpython-310.pyc +0 -0
  193. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/schema/search.py +0 -0
  194. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/urls/__pycache__/helper.cpython-310.pyc +0 -0
  195. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/urls/helper.py +0 -0
  196. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__init__.py +0 -0
  197. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/__init__.cpython-310.pyc +0 -0
  198. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  199. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/cli.cpython-310.pyc +0 -0
  200. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/constants.cpython-310.pyc +0 -0
  201. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/logging.cpython-310.pyc +0 -0
  202. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/misc.cpython-310.pyc +0 -0
  203. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/__pycache__/model_train.cpython-310.pyc +0 -0
  204. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/cli.py +0 -0
  205. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/config.py +0 -0
  206. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/constants.py +0 -0
  207. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/__init__.py +0 -0
  208. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/__pycache__/__init__.cpython-39.pyc +0 -0
  209. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/__pycache__/main.cpython-39.pyc +0 -0
  210. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/helpers.py +0 -0
  211. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/main.py +0 -0
  212. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
  213. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/logging.py +0 -0
  214. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/misc.py +0 -0
  215. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/utils/model_train.py +0 -0
  216. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/versions.py +0 -0
  217. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__init__.py +0 -0
  218. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__pycache__/__init__.cpython-310.pyc +0 -0
  219. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__pycache__/__init__.cpython-39.pyc +0 -0
  220. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__pycache__/export.cpython-310.pyc +0 -0
  221. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__pycache__/utils.cpython-310.pyc +0 -0
  222. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/__pycache__/validate.cpython-310.pyc +0 -0
  223. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/export.py +0 -0
  224. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/utils.py +0 -0
  225. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai/workflows/validate.py +0 -0
  226. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai.egg-info/SOURCES.txt +0 -0
  227. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai.egg-info/dependency_links.txt +0 -0
  228. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai.egg-info/entry_points.txt +0 -0
  229. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai.egg-info/requires.txt +0 -0
  230. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/clarifai.egg-info/top_level.txt +0 -0
  231. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/pyproject.toml +0 -0
  232. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/requirements.txt +0 -0
  233. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/setup.cfg +0 -0
  234. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/setup.py +0 -0
  235. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_app.py +0 -0
  236. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_auth.py +0 -0
  237. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_data_upload.py +0 -0
  238. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_eval.py +0 -0
  239. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_misc.py +0 -0
  240. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_model_predict.py +0 -0
  241. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_model_train.py +0 -0
  242. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_modules.py +0 -0
  243. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_rag.py +0 -0
  244. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_search.py +0 -0
  245. {clarifai-11.2.4rc1 → clarifai-11.2.4rc3}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.1
2
2
  Name: clarifai
3
- Version: 11.2.4rc1
3
+ Version: 11.2.4rc3
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -35,17 +35,6 @@ Requires-Dist: requests>=2.32.3
35
35
  Requires-Dist: aiohttp>=3.10.0
36
36
  Provides-Extra: all
37
37
  Requires-Dist: pycocotools==2.0.6; extra == "all"
38
- Dynamic: author
39
- Dynamic: author-email
40
- Dynamic: classifier
41
- Dynamic: description
42
- Dynamic: description-content-type
43
- Dynamic: home-page
44
- Dynamic: license
45
- Dynamic: provides-extra
46
- Dynamic: requires-dist
47
- Dynamic: requires-python
48
- Dynamic: summary
49
38
 
50
39
  <h1 align="center">
51
40
  <a href="https://www.clarifai.com/"><img alt="Clarifai" title="Clarifai" src="https://github.com/user-attachments/assets/623b883b-7fe5-4b95-bbfa-8691f5779af4"></a>
@@ -0,0 +1 @@
1
+ __version__ = "11.2.4rc3"
@@ -23,7 +23,6 @@ from clarifai.runners.utils.const import (
23
23
  DEFAULT_DOWNLOAD_CHECKPOINT_WHEN, DEFAULT_PYTHON_VERSION, DEFAULT_RUNTIME_DOWNLOAD_PATH,
24
24
  PYTHON_BASE_IMAGE, TORCH_BASE_IMAGE)
25
25
  from clarifai.runners.utils.loader import HuggingFaceLoader
26
- from clarifai.runners.utils import data_utils
27
26
  from clarifai.runners.utils.method_signatures import signatures_to_yaml
28
27
  from clarifai.urls.helper import ClarifaiUrlHelper
29
28
  from clarifai.utils.logging import logger
@@ -337,16 +336,6 @@ class ModelBuilder:
337
336
  method_info = model_class._get_method_info()
338
337
  signatures = [method.signature for method in method_info.values()]
339
338
  return signatures
340
-
341
- def get_methods_defaults(self):
342
- """
343
- Returns the inference parameters for the model class.
344
- """
345
- model_class = self.load_model_class(mocking=True)
346
- method_info = model_class._get_method_info()
347
- python_param_defaults = [method.python_param_types for method in method_info.values()]
348
- return python_param_defaults
349
-
350
339
 
351
340
  @property
352
341
  def client(self):
@@ -633,58 +622,14 @@ class ModelBuilder:
633
622
  concepts = config.get('concepts')
634
623
  logger.info(f"Updated config.yaml with {len(concepts)} concepts.")
635
624
 
636
- # def filled_params_specs_with_inference_params(self, method_signatures: list[resources_pb2.MethodSignature], methods_defaults) -> list[resources_pb2.ModelTypeField]:
637
- # """
638
- # Fills the params_specs with the inference params.
639
- # """
640
- # inference_params = set()
641
- # for i, method_defaults in enumerate(methods_defaults):
642
- # for name, default in method_defaults.items():
643
- # if isinstance(default, data_utils.InputField):
644
- # if i==0:
645
- # inference_params.add(name)
646
- # else:
647
- # # if field.name not in inference_params then remove from inference_params
648
- # if name not in inference_params:
649
- # inference_params.remove(field.name)
650
- # output=[]
651
- # for signature in method_signatures:
652
- # for field in signature.input_fields:
653
- # if field.name in inference_params:
654
- # field.path = field.name
655
- # if field.type == resources_pb2.ModelTypeField.DataType.STR:
656
- # field.default_value= str(field.default)
657
- # field.field_type = resources_pb2.ModelTypeField.ModelTypeFieldType.STRING
658
- # elif field.type == resources_pb2.ModelTypeField.DataType.INT:
659
- # field.default_value= int(field.default)
660
- # field.field_type = resources_pb2.ModelTypeField.ModelTypeFieldType.NUMBER
661
- # elif field.type == resources_pb2.ModelTypeField.DataType.FLOAT:
662
- # field.default_value= float(field.default)
663
- # field.field_type = resources_pb2.ModelTypeField.ModelTypeFieldType.NUMBER
664
- # elif field.type == resources_pb2.ModelTypeField.DataType.BOOL:
665
- # field.default_value= bool(field.default)
666
- # field.field_type = resources_pb2.ModelTypeField.ModelTypeFieldType.BOOLEAN
667
- # else:
668
- # field.default_value= field.default
669
- # field.field_type = resources_pb2.ModelTypeField.ModelTypeFieldType.STRING
670
- # output.append(field)
671
- # return output
672
-
673
-
674
625
  def get_model_version_proto(self):
675
626
  signatures = self.get_method_signatures()
676
- # methods_defaults = self.get_methods_defaults()
677
-
678
627
  model_version_proto = resources_pb2.ModelVersion(
679
628
  pretrained_model_config=resources_pb2.PretrainedModelConfig(),
680
629
  inference_compute_info=self.inference_compute_info,
681
630
  method_signatures=signatures,
682
- # output_info= resources_pb2.OutputInfo(
683
- # params_specs=self.filled_params_specs_with_inference_params(signatures, methods_defaults),
684
- # )
685
631
  )
686
632
 
687
-
688
633
  model_type_id = self.config.get('model').get('model_type_id')
689
634
  if model_type_id in CONCEPTS_REQUIRED_MODEL_TYPE:
690
635
 
@@ -354,9 +354,4 @@ class _MethodInfo:
354
354
  for p in inspect.signature(method).parameters.values()
355
355
  if p.annotation != inspect.Parameter.empty
356
356
  }
357
- self.python_param_defaults = {
358
- p.name: p.default
359
- for p in inspect.signature(method).parameters.values()
360
- if p.default != inspect.Parameter.empty
361
- }
362
357
  self.python_param_types.pop('self', None)
@@ -115,12 +115,7 @@ class InputField(MessageData):
115
115
  # proto.is_param = self.is_param
116
116
 
117
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)
118
+ proto = self.set_default(proto, self.default)
124
119
 
125
120
  return proto
126
121
 
@@ -169,51 +164,56 @@ class InputField(MessageData):
169
164
 
170
165
  @classmethod
171
166
  def set_default(cls, proto=None, default=None):
172
- import json
173
- if proto is None:
174
- proto = InputFieldProto()
175
- if default is not None:
176
- proto.default = json.dumps(default)
177
- return proto
167
+ try:
168
+ import json
169
+ if proto is None:
170
+ proto = InputFieldProto()
171
+ if default is not None:
172
+ proto.default = json.dumps(default)
173
+ return proto
174
+ except json.JSONDecodeError:
175
+ if default is not None:
176
+ proto.default = str(default)
177
+ return proto
178
+ except Exception as e:
179
+ raise ValueError(f"Error setting default value: {e}")
178
180
 
179
181
  @classmethod
180
182
  def get_default(cls, proto):
181
- default_str = proto.default
182
- default = None
183
- import json
183
+ default_str = proto.default
184
+ default = None
185
+ import json
186
+ try:
187
+ # Attempt to parse as JSON first (for complex types)
188
+ return json.loads(default_str)
189
+ except json.JSONDecodeError:
190
+ pass
191
+ # Check for boolean values stored as "True" or "False"
192
+ if proto.type == resources_pb2.ModelTypeField.DataType.BOOL:
184
193
  try:
185
- # Attempt to parse as JSON first (for complex types)
186
- return json.loads(default_str)
187
- except json.JSONDecodeError:
188
- pass
189
- # Check for boolean values stored as "True" or "False"
190
- if proto.type == resources_pb2.ModelTypeField.DataType.BOOL:
191
- try:
192
- default = bool(default_str)
193
- except ValueError:
194
- pass
195
- # Try to parse as integer
196
- elif proto.type == resources_pb2.ModelTypeField.DataType.INT:
197
- try:
198
- default = int(default_str)
199
- except ValueError:
200
- pass
201
-
202
- # Try to parse as float
203
- elif proto.type == resources_pb2.ModelTypeField.DataType.FLOAT:
204
- try:
205
- default = float(default_str)
206
- except ValueError:
207
- pass
208
- elif proto.type == resources_pb2.ModelTypeField.DataType.STR:
209
- default = default_str
210
-
211
- if default is None:
212
- # If all parsing fails, return the string value
213
- default = default_str
214
- return default
215
-
194
+ default = bool(default_str)
195
+ except ValueError:
196
+ pass
197
+ # Try to parse as integer
198
+ elif proto.type == resources_pb2.ModelTypeField.DataType.INT:
199
+ try:
200
+ default = int(default_str)
201
+ except ValueError:
202
+ pass
216
203
 
204
+ # Try to parse as float
205
+ elif proto.type == resources_pb2.ModelTypeField.DataType.FLOAT:
206
+ try:
207
+ default = float(default_str)
208
+ except ValueError:
209
+ pass
210
+ elif proto.type == resources_pb2.ModelTypeField.DataType.STR:
211
+ default = default_str
212
+
213
+ if default is None:
214
+ # If all parsing fails, return the string value
215
+ default = default_str
216
+ return default
217
217
 
218
218
 
219
219
  class DataConverter:
@@ -1,6 +1,7 @@
1
1
  import collections.abc as abc
2
2
  import inspect
3
3
  import json
4
+ import logging
4
5
  from collections import namedtuple
5
6
  from typing import Dict, List, Tuple, get_args, get_origin
6
7
 
@@ -312,8 +313,13 @@ def deserialize(proto, signatures, inference_params={}, is_output=False):
312
313
  kwargs[sig.name] = serializer.deserialize(part.data)
313
314
  elif inference_params_value is not None:
314
315
  kwargs[sig.name] = inference_params_value
315
- # elif sig.default and (sig.required is False) and (not is_output):
316
- # kwargs[sig.name] = data_utils.InputField.get_default(sig)
316
+ elif sig.default and (sig.required is False) and (not is_output):
317
+ try:
318
+ kwargs[sig.name] = data_utils.InputField.get_default(sig)
319
+ except Exception as e:
320
+ # default is not set, so ignore
321
+ logging.exception('Default value not set for %s: %s', sig.name, e)
322
+ pass
317
323
  else:
318
324
  if sig_i == 0:
319
325
  # possible inlined first value
@@ -0,0 +1,167 @@
1
+ import time
2
+ import uuid
3
+
4
+
5
+ def generate_id():
6
+ return f"chatcmpl-{uuid.uuid4().hex}"
7
+
8
+
9
+ def _format_non_streaming_response(
10
+ generated_text,
11
+ model="custom-model",
12
+ id=None,
13
+ created=None,
14
+ prompt_tokens=None,
15
+ completion_tokens=None,
16
+ finish_reason="stop",
17
+ ):
18
+ if id is None:
19
+ id = generate_id()
20
+ if created is None:
21
+ created = int(time.time())
22
+
23
+ response = {
24
+ "id":
25
+ id,
26
+ "object":
27
+ "chat.completion",
28
+ "created":
29
+ created,
30
+ "model":
31
+ model,
32
+ "choices": [{
33
+ "index": 0,
34
+ "message": {
35
+ "role": "assistant",
36
+ "content": generated_text,
37
+ },
38
+ "finish_reason": finish_reason,
39
+ "logprobs": None,
40
+ }],
41
+ }
42
+
43
+ if prompt_tokens is not None and completion_tokens is not None:
44
+ response["usage"] = {
45
+ "prompt_tokens": prompt_tokens,
46
+ "completion_tokens": completion_tokens,
47
+ "total_tokens": prompt_tokens + completion_tokens,
48
+ }
49
+
50
+ return response
51
+
52
+
53
+ def _format_streaming_response(
54
+ generated_chunks,
55
+ model="custom-model",
56
+ id=None,
57
+ created=None,
58
+ finish_reason="stop",
59
+ ):
60
+ if id is None:
61
+ id = generate_id()
62
+ if created is None:
63
+ created = int(time.time())
64
+
65
+ for chunk in generated_chunks:
66
+ yield {
67
+ "id":
68
+ id,
69
+ "object":
70
+ "chat.completion.chunk",
71
+ "created":
72
+ created,
73
+ "model":
74
+ model,
75
+ "choices": [{
76
+ "index": 0,
77
+ "delta": {
78
+ "content": chunk,
79
+ },
80
+ "finish_reason": None,
81
+ "logprobs": None,
82
+ }],
83
+ }
84
+
85
+ # Final chunk indicating completion
86
+ yield {
87
+ "id": id,
88
+ "object": "chat.completion.chunk",
89
+ "created": created,
90
+ "model": model,
91
+ "choices": [{
92
+ "index": 0,
93
+ "delta": {},
94
+ "finish_reason": finish_reason,
95
+ "logprobs": None,
96
+ }],
97
+ }
98
+
99
+
100
+ def openai_response(
101
+ generated_text,
102
+ model="custom-model",
103
+ id=None,
104
+ created=None,
105
+ prompt_tokens=None,
106
+ completion_tokens=None,
107
+ finish_reason="stop",
108
+ stream=True,
109
+ ):
110
+ if stream:
111
+ return _format_streaming_response(generated_text, model, id, created, finish_reason)
112
+ else:
113
+ return _format_non_streaming_response(generated_text, model, id, created, prompt_tokens,
114
+ completion_tokens, finish_reason)
115
+
116
+
117
+ def openai_to_hf_messages(openai_messages):
118
+ """
119
+ Converts OpenAI-style chat messages into a format compatible with Hugging Face's
120
+ `tokenizer.apply_chat_template()` function, supporting all modalities (text, images, etc.).
121
+
122
+ Args:
123
+ openai_messages (list): List of OpenAI-style messages, where each message is a dict with
124
+ 'role' (str) and 'content' (str or list of parts).
125
+
126
+ Returns:
127
+ list: Hugging Face-compatible messages. Each message is a dict with 'role' and 'content'.
128
+ Content is a string (text-only) or a list of parts (multimodal).
129
+ """
130
+ hf_messages = []
131
+ for msg in openai_messages:
132
+ role = msg['role']
133
+ content = msg['content']
134
+
135
+ if isinstance(content, list):
136
+ # Handle multimodal content (e.g., text + images)
137
+ converted_content = []
138
+ for part in content:
139
+ if part['type'] == 'text':
140
+ converted_content.append({'type': 'text', 'text': part['text']})
141
+ elif part['type'] == 'image_url':
142
+ # Handle image (extract base64 or URL)
143
+ image_url = part["image_url"]["url"]
144
+ if image_url.startswith("data:image"):
145
+ # Base64-encoded image
146
+ b64_img = image_url.split(",")[1]
147
+ converted_content.append({'type': 'image', 'base64': b64_img})
148
+ else:
149
+ # URL (model must handle downloads)
150
+ converted_content.append({'type': 'image', 'url': image_url})
151
+ elif part['type'] == 'video_url':
152
+ video_url = part["video_url"]["url"]
153
+ if video_url.startswith("data:video"):
154
+ ValueError("Base64 video data is not supported in HF format.")
155
+ else:
156
+ # URL (model must handle downloads)
157
+ converted_content.append({'type': 'video', 'url': video_url})
158
+ else:
159
+ raise ValueError(f"Unsupported content type: {part['type']} for conversion.")
160
+ hf_content = converted_content
161
+ else:
162
+ # Text-only content (string)
163
+ hf_content = content
164
+
165
+ hf_messages.append({'role': role, 'content': hf_content})
166
+
167
+ return hf_messages
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.1
2
2
  Name: clarifai
3
- Version: 11.2.4rc1
3
+ Version: 11.2.4rc3
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -35,17 +35,6 @@ Requires-Dist: requests>=2.32.3
35
35
  Requires-Dist: aiohttp>=3.10.0
36
36
  Provides-Extra: all
37
37
  Requires-Dist: pycocotools==2.0.6; extra == "all"
38
- Dynamic: author
39
- Dynamic: author-email
40
- Dynamic: classifier
41
- Dynamic: description
42
- Dynamic: description-content-type
43
- Dynamic: home-page
44
- Dynamic: license
45
- Dynamic: provides-extra
46
- Dynamic: requires-dist
47
- Dynamic: requires-python
48
- Dynamic: summary
49
38
 
50
39
  <h1 align="center">
51
40
  <a href="https://www.clarifai.com/"><img alt="Clarifai" title="Clarifai" src="https://github.com/user-attachments/assets/623b883b-7fe5-4b95-bbfa-8691f5779af4"></a>
@@ -1 +0,0 @@
1
- __version__ = "11.2.4rc1"
@@ -1,227 +0,0 @@
1
- import time
2
- import uuid
3
-
4
- def generate_id():
5
- return f"chatcmpl-{uuid.uuid4().hex}"
6
-
7
- def _format_non_streaming_response(
8
- generated_text,
9
- model="custom-model",
10
- id=None,
11
- created=None,
12
- usage=None,
13
- finish_reason="stop",
14
- ):
15
- if id is None:
16
- id = generate_id()
17
- if created is None:
18
- created = int(time.time())
19
-
20
- response = {
21
- "id": id,
22
- "object": "chat.completion",
23
- "created": created,
24
- "model": model,
25
- "choices": [
26
- {
27
- "index": 0,
28
- "message": {
29
- "role": "assistant",
30
- "content": generated_text,
31
- },
32
- "finish_reason": finish_reason,
33
- "logprobs": None,
34
- }
35
- ],
36
- }
37
-
38
- if usage is not None:
39
- response["usage"] = usage
40
-
41
- return response
42
-
43
- def _format_streaming_response(
44
- generated_chunks,
45
- model="custom-model",
46
- id=None,
47
- created=None,
48
- finish_reason="stop",
49
- ):
50
- if id is None:
51
- id = generate_id()
52
- if created is None:
53
- created = int(time.time())
54
-
55
- for chunk in generated_chunks:
56
- yield {
57
- "id": id,
58
- "object": "chat.completion.chunk",
59
- "created": created,
60
- "model": model,
61
- "choices": [
62
- {
63
- "index": 0,
64
- "delta": {
65
- "content": chunk,
66
- },
67
- "finish_reason": None,
68
- "logprobs": None,
69
- }
70
- ],
71
- }
72
-
73
- # Final chunk indicating completion
74
- yield {
75
- "id": id,
76
- "object": "chat.completion.chunk",
77
- "created": created,
78
- "model": model,
79
- "choices": [
80
- {
81
- "index": 0,
82
- "delta": {},
83
- "finish_reason": finish_reason,
84
- "logprobs": None,
85
- }
86
- ],
87
- }
88
-
89
- def openai_response_format(
90
- generated_text,
91
- model="custom-model",
92
- id=None,
93
- created=None,
94
- usage=None,
95
- finish_reason="stop",
96
- stream=True,
97
- ):
98
- if stream:
99
- return _format_streaming_response(
100
- generated_text, model, id, created, finish_reason
101
- )
102
- else:
103
- return _format_non_streaming_response(
104
- generated_text, model, id, created, usage, finish_reason
105
- )
106
- from typing import List, Dict, Union, Optional
107
- import base64
108
- from PIL import Image
109
- import io
110
-
111
- def openai_to_hf_chat_messages(
112
- messages: List[Dict[str, str]],
113
- tokenizer: Optional[object] = None
114
- ) -> List[Dict[str, Union[str, Dict]]]:
115
- """
116
- Converts OpenAI-style chat messages into Hugging Face chat template format.
117
-
118
- Args:
119
- messages: List of OpenAI-style messages (e.g., [{"role": "user", "content": "Hello"}]).
120
- model_family: Optional model family (e.g., "llava", "llama") for special handling.
121
- tokenizer: Optional tokenizer to check for chat template support.
122
-
123
- Returns:
124
- List of messages in Hugging Face chat format.
125
- """
126
- hf_messages = []
127
-
128
- for msg in messages:
129
- role = msg["role"]
130
- content = msg["content"]
131
-
132
- # Handle multimodal content (e.g., images in OpenAI format)
133
- if isinstance(content, list):
134
- # OpenAI-style multimodal: [{"type": "text", "text": "..."}, {"type": "image_url", "image_url": "..."}]
135
- new_content = []
136
- for item in content:
137
- if item["type"] == "text":
138
- new_content.append(item["text"])
139
- elif item["type"] == "image_url":
140
- # Handle image (extract base64 or URL)
141
- image_url = item["image_url"]["url"]
142
- if image_url.startswith("data:image"):
143
- # Base64-encoded image
144
- image_data = image_url.split(",")[1]
145
- image_bytes = base64.b64decode(image_data)
146
- image = Image.open(io.BytesIO(image_bytes))
147
- new_content.append({"image": image})
148
- else:
149
- # URL (model must handle downloads)
150
- new_content.append({"url": image_url})
151
- content = " ".join(new_content) if all(isinstance(c, str) for c in new_content) else new_content
152
- elif not isinstance(content, str):
153
- raise ValueError(f"Unsupported content type: {type(content)}")
154
-
155
- # Add to HF messages
156
- hf_messages.append({"role": role, "content": content})
157
-
158
- # Apply model-specific adjustments
159
- if tokenizer is not None and hasattr(tokenizer, "apply_chat_template"):
160
- # Let Hugging Face tokenizer handle further formatting if needed
161
- try:
162
- return tokenizer.apply_chat_template(hf_messages, tokenize=False)
163
- except:
164
- pass # Fall back to manual formatting
165
-
166
- return hf_messages
167
-
168
- def convert_openai_to_hf_messages(openai_messages):
169
- """
170
- Converts OpenAI-style chat messages into a format compatible with Hugging Face's
171
- `tokenizer.apply_chat_template()` function, supporting all modalities (text, images, etc.).
172
-
173
- Args:
174
- openai_messages (list): List of OpenAI-style messages, where each message is a dict with
175
- 'role' (str) and 'content' (str or list of parts).
176
-
177
- Returns:
178
- list: Hugging Face-compatible messages. Each message is a dict with 'role' and 'content'.
179
- Content is a string (text-only) or a list of parts (multimodal).
180
- """
181
- hf_messages = []
182
- for msg in openai_messages:
183
- role = msg['role']
184
- content = msg['content']
185
-
186
- if isinstance(content, list):
187
- # Handle multimodal content (e.g., text + images)
188
- converted_content = []
189
- for part in content:
190
- if part['type'] == 'text':
191
- converted_content.append({'type': 'text', 'text': part['text']})
192
- elif part['type'] == 'image_url':
193
- # Handle image (extract base64 or URL)
194
- image_url = part["image_url"]["url"]
195
- if image_url.startswith("data:image"):
196
- # Base64-encoded image
197
- b64_img = image_url.split(",")[1]
198
- converted_content.append({
199
- 'type': 'image',
200
- 'base64': b64_img
201
- })
202
- else:
203
- # URL (model must handle downloads)
204
- converted_content.append({
205
- 'type': 'image',
206
- 'url': image_url
207
- })
208
- elif part['type'] == 'video_url':
209
- video_url = part["video_url"]["url"]
210
- if video_url.startswith("data:video"):
211
- ValueError("Base64 video data is not supported in HF format.")
212
- else:
213
- # URL (model must handle downloads)
214
- converted_content.append({
215
- 'type': 'video',
216
- 'url': video_url
217
- })
218
- else:
219
- raise ValueError(f"Unsupported content type: {part['type']} for conversion.")
220
- hf_content = converted_content
221
- else:
222
- # Text-only content (string)
223
- hf_content = content
224
-
225
- hf_messages.append({'role': role, 'content': hf_content})
226
-
227
- return hf_messages
File without changes
File without changes
File without changes