clarifai 11.7.5__tar.gz → 11.7.5rc1__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 (313) hide show
  1. {clarifai-11.7.5/clarifai.egg-info → clarifai-11.7.5rc1}/PKG-INFO +1 -1
  2. clarifai-11.7.5rc1/clarifai/__init__.py +1 -0
  3. clarifai-11.7.5rc1/clarifai/__pycache__/__init__.cpython-311.pyc +0 -0
  4. clarifai-11.7.5rc1/clarifai/__pycache__/__init__.cpython-312.pyc +0 -0
  5. clarifai-11.7.5rc1/clarifai/__pycache__/__init__.cpython-39.pyc +0 -0
  6. clarifai-11.7.5rc1/clarifai/__pycache__/errors.cpython-311.pyc +0 -0
  7. clarifai-11.7.5rc1/clarifai/__pycache__/errors.cpython-39.pyc +0 -0
  8. clarifai-11.7.5rc1/clarifai/__pycache__/versions.cpython-311.pyc +0 -0
  9. clarifai-11.7.5rc1/clarifai/__pycache__/versions.cpython-39.pyc +0 -0
  10. clarifai-11.7.5rc1/clarifai/cli/__pycache__/__init__.cpython-311.pyc +0 -0
  11. clarifai-11.7.5rc1/clarifai/cli/__pycache__/__init__.cpython-39.pyc +0 -0
  12. clarifai-11.7.5rc1/clarifai/cli/__pycache__/base.cpython-311.pyc +0 -0
  13. clarifai-11.7.5rc1/clarifai/cli/__pycache__/base.cpython-39.pyc +0 -0
  14. clarifai-11.7.5rc1/clarifai/cli/__pycache__/compute_cluster.cpython-311.pyc +0 -0
  15. clarifai-11.7.5rc1/clarifai/cli/__pycache__/compute_cluster.cpython-39.pyc +0 -0
  16. clarifai-11.7.5rc1/clarifai/cli/__pycache__/deployment.cpython-311.pyc +0 -0
  17. clarifai-11.7.5rc1/clarifai/cli/__pycache__/deployment.cpython-39.pyc +0 -0
  18. clarifai-11.7.5rc1/clarifai/cli/__pycache__/model.cpython-311.pyc +0 -0
  19. clarifai-11.7.5rc1/clarifai/cli/__pycache__/model.cpython-39.pyc +0 -0
  20. clarifai-11.7.5rc1/clarifai/cli/__pycache__/nodepool.cpython-311.pyc +0 -0
  21. clarifai-11.7.5rc1/clarifai/cli/__pycache__/nodepool.cpython-39.pyc +0 -0
  22. clarifai-11.7.5rc1/clarifai/cli/__pycache__/pipeline.cpython-311.pyc +0 -0
  23. clarifai-11.7.5rc1/clarifai/cli/__pycache__/pipeline_step.cpython-311.pyc +0 -0
  24. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/base.py +2 -2
  25. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/model.py +261 -139
  26. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/pipeline.py +31 -11
  27. clarifai-11.7.5rc1/clarifai/cli/templates/__pycache__/__init__.cpython-311.pyc +0 -0
  28. clarifai-11.7.5rc1/clarifai/cli/templates/__pycache__/pipeline_templates.cpython-311.pyc +0 -0
  29. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/templates/pipeline_templates.py +34 -28
  30. clarifai-11.7.5rc1/clarifai/client/__pycache__/__init__.cpython-311.pyc +0 -0
  31. clarifai-11.7.5rc1/clarifai/client/__pycache__/__init__.cpython-312.pyc +0 -0
  32. clarifai-11.7.5rc1/clarifai/client/__pycache__/__init__.cpython-39.pyc +0 -0
  33. clarifai-11.7.5rc1/clarifai/client/__pycache__/app.cpython-311.pyc +0 -0
  34. clarifai-11.7.5rc1/clarifai/client/__pycache__/app.cpython-312.pyc +0 -0
  35. clarifai-11.7.5rc1/clarifai/client/__pycache__/app.cpython-39.pyc +0 -0
  36. clarifai-11.7.5rc1/clarifai/client/__pycache__/base.cpython-311.pyc +0 -0
  37. clarifai-11.7.5rc1/clarifai/client/__pycache__/base.cpython-39.pyc +0 -0
  38. clarifai-11.7.5rc1/clarifai/client/__pycache__/compute_cluster.cpython-311.pyc +0 -0
  39. clarifai-11.7.5rc1/clarifai/client/__pycache__/dataset.cpython-311.pyc +0 -0
  40. clarifai-11.7.5rc1/clarifai/client/__pycache__/dataset.cpython-39.pyc +0 -0
  41. clarifai-11.7.5rc1/clarifai/client/__pycache__/deployment.cpython-311.pyc +0 -0
  42. clarifai-11.7.5rc1/clarifai/client/__pycache__/deployment.cpython-39.pyc +0 -0
  43. clarifai-11.7.5rc1/clarifai/client/__pycache__/input.cpython-311.pyc +0 -0
  44. clarifai-11.7.5rc1/clarifai/client/__pycache__/input.cpython-39.pyc +0 -0
  45. clarifai-11.7.5rc1/clarifai/client/__pycache__/lister.cpython-311.pyc +0 -0
  46. clarifai-11.7.5rc1/clarifai/client/__pycache__/lister.cpython-39.pyc +0 -0
  47. clarifai-11.7.5rc1/clarifai/client/__pycache__/model.cpython-311.pyc +0 -0
  48. clarifai-11.7.5rc1/clarifai/client/__pycache__/model.cpython-39.pyc +0 -0
  49. clarifai-11.7.5rc1/clarifai/client/__pycache__/model_client.cpython-311.pyc +0 -0
  50. clarifai-11.7.5rc1/clarifai/client/__pycache__/model_client.cpython-39.pyc +0 -0
  51. clarifai-11.7.5rc1/clarifai/client/__pycache__/module.cpython-311.pyc +0 -0
  52. clarifai-11.7.5rc1/clarifai/client/__pycache__/nodepool.cpython-311.pyc +0 -0
  53. clarifai-11.7.5rc1/clarifai/client/__pycache__/pipeline.cpython-311.pyc +0 -0
  54. clarifai-11.7.5rc1/clarifai/client/__pycache__/pipeline_step.cpython-311.pyc +0 -0
  55. clarifai-11.7.5rc1/clarifai/client/__pycache__/runner.cpython-311.pyc +0 -0
  56. clarifai-11.7.5rc1/clarifai/client/__pycache__/search.cpython-311.pyc +0 -0
  57. clarifai-11.7.5rc1/clarifai/client/__pycache__/user.cpython-311.pyc +0 -0
  58. clarifai-11.7.5rc1/clarifai/client/__pycache__/workflow.cpython-311.pyc +0 -0
  59. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/__init__.cpython-311.pyc +0 -0
  60. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/__init__.cpython-39.pyc +0 -0
  61. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/helper.cpython-311.pyc +0 -0
  62. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/helper.cpython-39.pyc +0 -0
  63. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/register.cpython-311.pyc +0 -0
  64. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/register.cpython-39.pyc +0 -0
  65. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/stub.cpython-311.pyc +0 -0
  66. clarifai-11.7.5rc1/clarifai/client/auth/__pycache__/stub.cpython-39.pyc +0 -0
  67. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/pipeline.py +20 -4
  68. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/user.py +172 -0
  69. clarifai-11.7.5rc1/clarifai/constants/__pycache__/base.cpython-311.pyc +0 -0
  70. clarifai-11.7.5rc1/clarifai/constants/__pycache__/base.cpython-39.pyc +0 -0
  71. clarifai-11.7.5rc1/clarifai/constants/__pycache__/dataset.cpython-311.pyc +0 -0
  72. clarifai-11.7.5rc1/clarifai/constants/__pycache__/dataset.cpython-39.pyc +0 -0
  73. clarifai-11.7.5rc1/clarifai/constants/__pycache__/input.cpython-311.pyc +0 -0
  74. clarifai-11.7.5rc1/clarifai/constants/__pycache__/input.cpython-39.pyc +0 -0
  75. clarifai-11.7.5rc1/clarifai/constants/__pycache__/model.cpython-311.pyc +0 -0
  76. clarifai-11.7.5rc1/clarifai/constants/__pycache__/model.cpython-39.pyc +0 -0
  77. clarifai-11.7.5rc1/clarifai/constants/__pycache__/rag.cpython-311.pyc +0 -0
  78. clarifai-11.7.5rc1/clarifai/constants/__pycache__/search.cpython-311.pyc +0 -0
  79. clarifai-11.7.5rc1/clarifai/constants/__pycache__/workflow.cpython-311.pyc +0 -0
  80. clarifai-11.7.5rc1/clarifai/datasets/__pycache__/__init__.cpython-311.pyc +0 -0
  81. clarifai-11.7.5rc1/clarifai/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
  82. clarifai-11.7.5rc1/clarifai/datasets/export/__pycache__/__init__.cpython-311.pyc +0 -0
  83. clarifai-11.7.5rc1/clarifai/datasets/export/__pycache__/__init__.cpython-39.pyc +0 -0
  84. clarifai-11.7.5rc1/clarifai/datasets/export/__pycache__/inputs_annotations.cpython-311.pyc +0 -0
  85. clarifai-11.7.5rc1/clarifai/datasets/export/__pycache__/inputs_annotations.cpython-39.pyc +0 -0
  86. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/__init__.cpython-311.pyc +0 -0
  87. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/__init__.cpython-39.pyc +0 -0
  88. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/base.cpython-311.pyc +0 -0
  89. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/base.cpython-39.pyc +0 -0
  90. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/features.cpython-311.pyc +0 -0
  91. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/features.cpython-39.pyc +0 -0
  92. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/image.cpython-311.pyc +0 -0
  93. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/image.cpython-39.pyc +0 -0
  94. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/multimodal.cpython-311.pyc +0 -0
  95. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/multimodal.cpython-39.pyc +0 -0
  96. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/text.cpython-311.pyc +0 -0
  97. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/text.cpython-39.pyc +0 -0
  98. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/utils.cpython-311.pyc +0 -0
  99. clarifai-11.7.5rc1/clarifai/datasets/upload/__pycache__/utils.cpython-39.pyc +0 -0
  100. clarifai-11.7.5rc1/clarifai/datasets/upload/loaders/__pycache__/__init__.cpython-311.pyc +0 -0
  101. clarifai-11.7.5rc1/clarifai/datasets/upload/loaders/__pycache__/coco_detection.cpython-311.pyc +0 -0
  102. clarifai-11.7.5rc1/clarifai/datasets/upload/loaders/__pycache__/imagenet_classification.cpython-311.pyc +0 -0
  103. clarifai-11.7.5rc1/clarifai/rag/__pycache__/__init__.cpython-311.pyc +0 -0
  104. clarifai-11.7.5rc1/clarifai/rag/__pycache__/rag.cpython-311.pyc +0 -0
  105. clarifai-11.7.5rc1/clarifai/rag/__pycache__/utils.cpython-311.pyc +0 -0
  106. clarifai-11.7.5rc1/clarifai/runners/__pycache__/__init__.cpython-311.pyc +0 -0
  107. clarifai-11.7.5rc1/clarifai/runners/__pycache__/__init__.cpython-39.pyc +0 -0
  108. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/__init__.cpython-311.pyc +0 -0
  109. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/__init__.cpython-39.pyc +0 -0
  110. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/dummy_openai_model.cpython-311.pyc +0 -0
  111. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/mcp_class.cpython-311.pyc +0 -0
  112. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_builder.cpython-311.pyc +0 -0
  113. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_builder.cpython-39.pyc +0 -0
  114. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_class.cpython-311.pyc +0 -0
  115. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_run_locally.cpython-311.pyc +0 -0
  116. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_runner.cpython-311.pyc +0 -0
  117. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/model_servicer.cpython-311.pyc +0 -0
  118. clarifai-11.7.5rc1/clarifai/runners/models/__pycache__/openai_class.cpython-311.pyc +0 -0
  119. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/model_builder.py +274 -10
  120. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/model_runner.py +93 -76
  121. clarifai-11.7.5rc1/clarifai/runners/pipeline_steps/__pycache__/__init__.cpython-311.pyc +0 -0
  122. clarifai-11.7.5rc1/clarifai/runners/pipeline_steps/__pycache__/pipeline_step_builder.cpython-311.pyc +0 -0
  123. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/pipeline_steps/pipeline_step_builder.py +10 -1
  124. clarifai-11.7.5rc1/clarifai/runners/pipelines/__pycache__/__init__.cpython-311.pyc +0 -0
  125. clarifai-11.7.5rc1/clarifai/runners/pipelines/__pycache__/pipeline_builder.cpython-311.pyc +0 -0
  126. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/server.py +1 -1
  127. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  128. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  129. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/code_script.cpython-311.pyc +0 -0
  130. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/code_script.cpython-39.pyc +0 -0
  131. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/const.cpython-311.pyc +0 -0
  132. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/data_utils.cpython-311.pyc +0 -0
  133. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/data_utils.cpython-39.pyc +0 -0
  134. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/loader.cpython-311.pyc +0 -0
  135. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/method_signatures.cpython-311.pyc +0 -0
  136. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/model_utils.cpython-311.pyc +0 -0
  137. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/openai_convertor.cpython-311.pyc +0 -0
  138. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/pipeline_validation.cpython-311.pyc +0 -0
  139. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/serializers.cpython-311.pyc +0 -0
  140. clarifai-11.7.5rc1/clarifai/runners/utils/__pycache__/url_fetcher.cpython-311.pyc +0 -0
  141. clarifai-11.7.5rc1/clarifai/runners/utils/data_types/__pycache__/__init__.cpython-311.pyc +0 -0
  142. clarifai-11.7.5rc1/clarifai/runners/utils/data_types/__pycache__/__init__.cpython-39.pyc +0 -0
  143. clarifai-11.7.5rc1/clarifai/runners/utils/data_types/__pycache__/data_types.cpython-311.pyc +0 -0
  144. clarifai-11.7.5rc1/clarifai/runners/utils/data_types/__pycache__/data_types.cpython-39.pyc +0 -0
  145. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/loader.py +24 -4
  146. clarifai-11.7.5rc1/clarifai/schema/__pycache__/search.cpython-311.pyc +0 -0
  147. clarifai-11.7.5rc1/clarifai/urls/__pycache__/helper.cpython-311.pyc +0 -0
  148. clarifai-11.7.5rc1/clarifai/urls/__pycache__/helper.cpython-39.pyc +0 -0
  149. clarifai-11.7.5rc1/clarifai/utils/__pycache__/__init__.cpython-311.pyc +0 -0
  150. clarifai-11.7.5rc1/clarifai/utils/__pycache__/__init__.cpython-39.pyc +0 -0
  151. clarifai-11.7.5rc1/clarifai/utils/__pycache__/cli.cpython-311.pyc +0 -0
  152. clarifai-11.7.5rc1/clarifai/utils/__pycache__/cli.cpython-39.pyc +0 -0
  153. clarifai-11.7.5rc1/clarifai/utils/__pycache__/config.cpython-311.pyc +0 -0
  154. clarifai-11.7.5rc1/clarifai/utils/__pycache__/config.cpython-39.pyc +0 -0
  155. clarifai-11.7.5rc1/clarifai/utils/__pycache__/constants.cpython-311.pyc +0 -0
  156. clarifai-11.7.5rc1/clarifai/utils/__pycache__/constants.cpython-39.pyc +0 -0
  157. clarifai-11.7.5rc1/clarifai/utils/__pycache__/logging.cpython-311.pyc +0 -0
  158. clarifai-11.7.5rc1/clarifai/utils/__pycache__/logging.cpython-39.pyc +0 -0
  159. clarifai-11.7.5rc1/clarifai/utils/__pycache__/misc.cpython-311.pyc +0 -0
  160. clarifai-11.7.5rc1/clarifai/utils/__pycache__/misc.cpython-39.pyc +0 -0
  161. clarifai-11.7.5rc1/clarifai/utils/__pycache__/model_train.cpython-311.pyc +0 -0
  162. clarifai-11.7.5rc1/clarifai/utils/__pycache__/protobuf.cpython-311.pyc +0 -0
  163. clarifai-11.7.5rc1/clarifai/utils/__pycache__/protobuf.cpython-39.pyc +0 -0
  164. clarifai-11.7.5rc1/clarifai/utils/__pycache__/secrets.cpython-311.pyc +0 -0
  165. clarifai-11.7.5rc1/clarifai/utils/evaluation/__pycache__/__init__.cpython-311.pyc +0 -0
  166. clarifai-11.7.5rc1/clarifai/utils/evaluation/__pycache__/helpers.cpython-311.pyc +0 -0
  167. clarifai-11.7.5rc1/clarifai/utils/evaluation/__pycache__/main.cpython-311.pyc +0 -0
  168. clarifai-11.7.5rc1/clarifai/utils/evaluation/__pycache__/testset_annotation_parser.cpython-311.pyc +0 -0
  169. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/misc.py +20 -0
  170. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/secrets.py +96 -1
  171. clarifai-11.7.5rc1/clarifai/workflows/__pycache__/__init__.cpython-311.pyc +0 -0
  172. clarifai-11.7.5rc1/clarifai/workflows/__pycache__/export.cpython-311.pyc +0 -0
  173. clarifai-11.7.5rc1/clarifai/workflows/__pycache__/utils.cpython-311.pyc +0 -0
  174. clarifai-11.7.5rc1/clarifai/workflows/__pycache__/validate.cpython-311.pyc +0 -0
  175. {clarifai-11.7.5 → clarifai-11.7.5rc1/clarifai.egg-info}/PKG-INFO +1 -1
  176. clarifai-11.7.5rc1/clarifai.egg-info/SOURCES.txt +309 -0
  177. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_pipeline_client.py +66 -0
  178. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_secrets.py +206 -0
  179. clarifai-11.7.5/clarifai/__init__.py +0 -1
  180. clarifai-11.7.5/clarifai.egg-info/SOURCES.txt +0 -150
  181. {clarifai-11.7.5 → clarifai-11.7.5rc1}/LICENSE +0 -0
  182. {clarifai-11.7.5 → clarifai-11.7.5rc1}/MANIFEST.in +0 -0
  183. {clarifai-11.7.5 → clarifai-11.7.5rc1}/README.md +0 -0
  184. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/README.md +0 -0
  185. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/__init__.py +0 -0
  186. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/__main__.py +0 -0
  187. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/compute_cluster.py +0 -0
  188. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/deployment.py +0 -0
  189. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/nodepool.py +0 -0
  190. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/pipeline_step.py +0 -0
  191. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/templates/__init__.py +0 -0
  192. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/templates/model_templates.py +0 -0
  193. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli/templates/pipeline_step_templates.py +0 -0
  194. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/cli.py +0 -0
  195. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/__init__.py +0 -0
  196. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/app.py +0 -0
  197. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/auth/__init__.py +0 -0
  198. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/auth/helper.py +0 -0
  199. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/auth/register.py +0 -0
  200. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/auth/stub.py +0 -0
  201. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/base.py +0 -0
  202. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/compute_cluster.py +0 -0
  203. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/dataset.py +0 -0
  204. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/deployment.py +0 -0
  205. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/input.py +0 -0
  206. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/lister.py +0 -0
  207. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/model.py +0 -0
  208. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/model_client.py +0 -0
  209. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/module.py +0 -0
  210. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/nodepool.py +0 -0
  211. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/pipeline_step.py +0 -0
  212. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/runner.py +0 -0
  213. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/search.py +0 -0
  214. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/client/workflow.py +0 -0
  215. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/base.py +0 -0
  216. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/dataset.py +0 -0
  217. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/input.py +0 -0
  218. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/model.py +0 -0
  219. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/rag.py +0 -0
  220. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/search.py +0 -0
  221. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/constants/workflow.py +0 -0
  222. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/__init__.py +0 -0
  223. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/export/__init__.py +0 -0
  224. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/export/inputs_annotations.py +0 -0
  225. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/__init__.py +0 -0
  226. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/base.py +0 -0
  227. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/features.py +0 -0
  228. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/image.py +0 -0
  229. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/README.md +0 -0
  230. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/__init__.py +0 -0
  231. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
  232. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
  233. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
  234. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
  235. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/multimodal.py +0 -0
  236. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/text.py +0 -0
  237. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/datasets/upload/utils.py +0 -0
  238. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/errors.py +0 -0
  239. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/models/__init__.py +0 -0
  240. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/models/api.py +0 -0
  241. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/modules/README.md +0 -0
  242. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/modules/__init__.py +0 -0
  243. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/modules/css.py +0 -0
  244. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/modules/pages.py +0 -0
  245. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/modules/style.css +0 -0
  246. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/rag/__init__.py +0 -0
  247. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/rag/rag.py +0 -0
  248. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/rag/utils.py +0 -0
  249. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/__init__.py +0 -0
  250. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/dockerfile_template/Dockerfile.template +0 -0
  251. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/__init__.py +0 -0
  252. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/dummy_openai_model.py +0 -0
  253. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/mcp_class.py +0 -0
  254. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/model_class.py +0 -0
  255. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/model_run_locally.py +0 -0
  256. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/model_servicer.py +0 -0
  257. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/openai_class.py +0 -0
  258. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/visual_classifier_class.py +0 -0
  259. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/models/visual_detector_class.py +0 -0
  260. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/pipeline_steps/__init__.py +0 -0
  261. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/pipelines/__init__.py +0 -0
  262. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/pipelines/pipeline_builder.py +0 -0
  263. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/__init__.py +0 -0
  264. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/code_script.py +0 -0
  265. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/const.py +0 -0
  266. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/data_types/__init__.py +0 -0
  267. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/data_types/data_types.py +0 -0
  268. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/data_utils.py +0 -0
  269. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/method_signatures.py +0 -0
  270. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/model_utils.py +0 -0
  271. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/openai_convertor.py +0 -0
  272. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/pipeline_validation.py +0 -0
  273. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/serializers.py +0 -0
  274. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/runners/utils/url_fetcher.py +0 -0
  275. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/schema/search.py +0 -0
  276. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/urls/helper.py +0 -0
  277. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/__init__.py +0 -0
  278. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/cli.py +0 -0
  279. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/config.py +0 -0
  280. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/constants.py +0 -0
  281. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/evaluation/__init__.py +0 -0
  282. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/evaluation/helpers.py +0 -0
  283. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/evaluation/main.py +0 -0
  284. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
  285. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/logging.py +0 -0
  286. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/model_train.py +0 -0
  287. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/utils/protobuf.py +0 -0
  288. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/versions.py +0 -0
  289. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/workflows/__init__.py +0 -0
  290. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/workflows/export.py +0 -0
  291. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/workflows/utils.py +0 -0
  292. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai/workflows/validate.py +0 -0
  293. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai.egg-info/dependency_links.txt +0 -0
  294. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai.egg-info/entry_points.txt +0 -0
  295. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai.egg-info/requires.txt +0 -0
  296. {clarifai-11.7.5 → clarifai-11.7.5rc1}/clarifai.egg-info/top_level.txt +0 -0
  297. {clarifai-11.7.5 → clarifai-11.7.5rc1}/pyproject.toml +0 -0
  298. {clarifai-11.7.5 → clarifai-11.7.5rc1}/requirements.txt +0 -0
  299. {clarifai-11.7.5 → clarifai-11.7.5rc1}/setup.cfg +0 -0
  300. {clarifai-11.7.5 → clarifai-11.7.5rc1}/setup.py +0 -0
  301. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_app.py +0 -0
  302. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_async_stub.py +0 -0
  303. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_auth.py +0 -0
  304. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_data_upload.py +0 -0
  305. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_eval.py +0 -0
  306. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_list_models.py +0 -0
  307. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_misc.py +0 -0
  308. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_model_predict.py +0 -0
  309. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_model_train.py +0 -0
  310. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_modules.py +0 -0
  311. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_rag.py +0 -0
  312. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_search.py +0 -0
  313. {clarifai-11.7.5 → clarifai-11.7.5rc1}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clarifai
3
- Version: 11.7.5
3
+ Version: 11.7.5rc1
4
4
  Home-page: https://github.com/Clarifai/clarifai-python
5
5
  Author: Clarifai
6
6
  Author-email: support@clarifai.com
@@ -0,0 +1 @@
1
+ __version__ = "11.7.5rc1"
@@ -304,8 +304,8 @@ def view(ctx, output_format):
304
304
  def run(ctx, script, context=None):
305
305
  """Execute a script with the current context's environment"""
306
306
  context = ctx.obj.current if not context else context
307
- cmd = f'CLARIFAI_USER_ID={context.user_id} CLARIFAI_API_BASE={context.base_url} CLARIFAI_PAT={context.pat} '
308
- cmd += ' '.join([f'{k}={v}' for k, v in context.env.items()])
307
+ cmd = f'CLARIFAI_USER_ID={context.user_id} CLARIFAI_API_BASE={context.api_base} CLARIFAI_PAT={context.pat} '
308
+ cmd += ' '.join([f'{k}={v}' for k, v in context.to_serializable_dict().items()])
309
309
  cmd += f' {script}'
310
310
  os.system(cmd)
311
311
 
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import os
2
3
  import shutil
3
4
  import tempfile
@@ -25,7 +26,12 @@ from clarifai.utils.constants import (
25
26
  DEFAULT_OLLAMA_MODEL_REPO_BRANCH,
26
27
  )
27
28
  from clarifai.utils.logging import logger
28
- from clarifai.utils.misc import GitHubDownloader, clone_github_repo, format_github_repo_url
29
+ from clarifai.utils.misc import (
30
+ GitHubDownloader,
31
+ clone_github_repo,
32
+ format_github_repo_url,
33
+ get_list_of_files_to_download,
34
+ )
29
35
 
30
36
 
31
37
  @cli.group(
@@ -150,16 +156,27 @@ def init(
150
156
  branch = DEFAULT_OLLAMA_MODEL_REPO_BRANCH
151
157
 
152
158
  if github_url:
159
+ downloader = GitHubDownloader(
160
+ max_retries=3,
161
+ github_token=github_pat,
162
+ )
163
+ if toolkit:
164
+ owner, repo, _, folder_path = downloader.parse_github_url(url=github_url)
165
+ else:
166
+ owner, repo, branch, folder_path = downloader.parse_github_url(url=github_url)
167
+ logger.info(
168
+ f"Parsed GitHub repository: owner={owner}, repo={repo}, branch={branch}, folder_path={folder_path}"
169
+ )
170
+ files_to_download = get_list_of_files_to_download(
171
+ downloader, owner, repo, folder_path, branch, []
172
+ )
173
+ for i, file in enumerate(files_to_download):
174
+ files_to_download[i] = f"{i + 1}. {file}"
175
+ files_to_download = '\n'.join(files_to_download)
176
+ logger.info(f"Files to be downloaded are:\n{files_to_download}")
177
+ input("Press Enter to continue...")
153
178
  if not toolkit:
154
- owner, repo, branch, folder_path = GitHubDownloader().parse_github_url(url=github_url)
155
- logger.info(
156
- f"Parsed GitHub repository: owner={owner}, repo={repo}, branch={branch}, folder_path={folder_path}"
157
- )
158
179
  if folder_path != "":
159
- downloader = GitHubDownloader(
160
- max_retries=3,
161
- github_token=github_pat,
162
- )
163
180
  try:
164
181
  downloader.download_github_folder(
165
182
  url=github_url,
@@ -168,6 +185,10 @@ def init(
168
185
  )
169
186
  logger.info(f"Successfully downloaded folder contents to {model_path}")
170
187
  logger.info("Model initialization complete with GitHub folder download")
188
+ logger.info("Next steps:")
189
+ logger.info("1. Review the model configuration")
190
+ logger.info("2. Install any required dependencies manually")
191
+ logger.info("3. Test the model locally using 'clarifai model local-test'")
171
192
  return
172
193
 
173
194
  except Exception as e:
@@ -235,6 +256,9 @@ def init(
235
256
 
236
257
  # Fall back to template-based initialization if no GitHub repo or if GitHub repo failed
237
258
  if not github_url:
259
+ logger.info("Initializing model with default templates...")
260
+ input("Press Enter to continue...")
261
+
238
262
  from clarifai.cli.templates.model_templates import (
239
263
  get_config_template,
240
264
  get_model_template,
@@ -725,24 +749,39 @@ def local_runner(ctx, model_path, pool_size, verbose):
725
749
 
726
750
  # Now we need to create a version for the model if no version exists. Only need one version that
727
751
  # mentions it's a local runner.
728
- model_versions = [v for v in model.list_versions()]
752
+ model_versions = list(model.list_versions())
729
753
  method_signatures = builder.get_method_signatures(mocking=False)
754
+
755
+ create_new_version = False
730
756
  if len(model_versions) == 0:
731
757
  logger.warning("No model versions found. Creating a new version for local runner.")
758
+ create_new_version = True
759
+ else:
760
+ # Try to patch the latest version, and fallback to creating a new one if that fails.
761
+ latest_version = model_versions[0]
762
+ logger.warning(f"Attempting to patch latest version: {latest_version.model_version.id}")
763
+
764
+ try:
765
+ patched_model = model.patch_version(
766
+ version_id=latest_version.model_version.id,
767
+ pretrained_model_config={"local_dev": True},
768
+ method_signatures=method_signatures,
769
+ )
770
+ patched_model.load_info()
771
+ version = patched_model.model_version
772
+ logger.info(f"Successfully patched version {version.id}")
773
+ ctx.obj.current.CLARIFAI_MODEL_VERSION_ID = version.id
774
+ ctx.obj.to_yaml() # save to yaml file.
775
+ except Exception as e:
776
+ logger.warning(f"Failed to patch model version: {e}. Creating a new version instead.")
777
+ create_new_version = True
778
+
779
+ if create_new_version:
732
780
  version = model.create_version(
733
781
  pretrained_model_config={"local_dev": True}, method_signatures=method_signatures
734
782
  ).model_version
735
783
  ctx.obj.current.CLARIFAI_MODEL_VERSION_ID = version.id
736
784
  ctx.obj.to_yaml()
737
- else:
738
- model.patch_version(
739
- version_id=model_versions[0].model_version.id,
740
- pretrained_model_config={"local_dev": True},
741
- method_signatures=method_signatures,
742
- )
743
- version = model_versions[0].model_version
744
- ctx.obj.current.CLARIFAI_MODEL_VERSION_ID = version.id
745
- ctx.obj.to_yaml() # save to yaml file.
746
785
 
747
786
  logger.info(f"Current model version {version.id}")
748
787
 
@@ -907,6 +946,114 @@ def local_runner(ctx, model_path, pool_size, verbose):
907
946
  )
908
947
 
909
948
 
949
+ def _parse_json_param(param_value, param_name):
950
+ """Parse JSON parameter with error handling.
951
+
952
+ Args:
953
+ param_value: The JSON string to parse
954
+ param_name: Name of the parameter for error messages
955
+
956
+ Returns:
957
+ dict: Parsed JSON dictionary
958
+
959
+ Raises:
960
+ ValueError: If JSON parsing fails
961
+ """
962
+ if not param_value or param_value == '{}':
963
+ return {}
964
+ try:
965
+ return json.loads(param_value)
966
+ except json.JSONDecodeError as e:
967
+ logger.error(f"ValueError: Invalid JSON in --{param_name} parameter: {e}")
968
+ raise click.Abort()
969
+
970
+
971
+ def _process_multimodal_inputs(inputs_dict):
972
+ """Process inputs to convert URLs and file paths to appropriate data types.
973
+
974
+ Args:
975
+ inputs_dict: Dictionary of input parameters
976
+
977
+ Returns:
978
+ dict: Processed inputs with Image/Video/Audio objects where appropriate
979
+ """
980
+ from clarifai.runners.utils.data_types import Audio, Image, Video
981
+
982
+ for key, value in list(inputs_dict.items()):
983
+ if not isinstance(value, str):
984
+ continue
985
+
986
+ if value.startswith(("http://", "https://")):
987
+ # Convert URL strings to appropriate data types
988
+ if "image" in key.lower():
989
+ inputs_dict[key] = Image(url=value)
990
+ elif "video" in key.lower():
991
+ inputs_dict[key] = Video(url=value)
992
+ elif "audio" in key.lower():
993
+ inputs_dict[key] = Audio(url=value)
994
+ elif os.path.isfile(value):
995
+ # Convert file paths to appropriate data types
996
+ try:
997
+ with open(value, "rb") as f:
998
+ file_bytes = f.read()
999
+ if "image" in key.lower():
1000
+ inputs_dict[key] = Image(bytes=file_bytes)
1001
+ elif "video" in key.lower():
1002
+ inputs_dict[key] = Video(bytes=file_bytes)
1003
+ elif "audio" in key.lower():
1004
+ inputs_dict[key] = Audio(bytes=file_bytes)
1005
+ except IOError as e:
1006
+ logger.error(f"ValueError: Failed to read file {value}: {e}")
1007
+ raise click.Abort()
1008
+
1009
+ return inputs_dict
1010
+
1011
+
1012
+ def _validate_model_params(model_id, user_id, app_id, model_url):
1013
+ """Validate model identification parameters.
1014
+
1015
+ Args:
1016
+ model_id: Model ID
1017
+ user_id: User ID
1018
+ app_id: App ID
1019
+ model_url: Model URL
1020
+
1021
+ Raises:
1022
+ ValueError: If validation fails
1023
+ """
1024
+ # Check if we have either (model_id, user_id, app_id) or model_url
1025
+ has_triple = all([model_id, user_id, app_id])
1026
+ has_url = bool(model_url)
1027
+
1028
+ if not (has_triple or has_url):
1029
+ logger.error(
1030
+ "ValueError: Either --model_id & --user_id & --app_id or --model_url must be provided."
1031
+ )
1032
+ raise click.Abort()
1033
+
1034
+
1035
+ def _validate_compute_params(compute_cluster_id, nodepool_id, deployment_id):
1036
+ """Validate compute cluster parameters.
1037
+
1038
+ Args:
1039
+ compute_cluster_id: Compute cluster ID
1040
+ nodepool_id: Nodepool ID
1041
+ deployment_id: Deployment ID
1042
+
1043
+ Raises:
1044
+ ValueError: If validation fails
1045
+ """
1046
+ if any([compute_cluster_id, nodepool_id, deployment_id]):
1047
+ has_cluster_nodepool = bool(compute_cluster_id) and bool(nodepool_id)
1048
+ has_deployment = bool(deployment_id)
1049
+
1050
+ if not (has_cluster_nodepool or has_deployment):
1051
+ logger.error(
1052
+ "ValueError: Either --compute_cluster_id & --nodepool_id or --deployment_id must be provided."
1053
+ )
1054
+ raise click.Abort()
1055
+
1056
+
910
1057
  @model.command(help="Perform a prediction using the model.")
911
1058
  @click.option(
912
1059
  '--config',
@@ -918,10 +1065,6 @@ def local_runner(ctx, model_path, pool_size, verbose):
918
1065
  @click.option('--user_id', required=False, help='User ID of the model used to predict.')
919
1066
  @click.option('--app_id', required=False, help='App ID of the model used to predict.')
920
1067
  @click.option('--model_url', required=False, help='Model URL of the model used to predict.')
921
- @click.option('--file_path', required=False, help='File path of file for the model to predict')
922
- @click.option('--url', required=False, help='URL to the file for the model to predict')
923
- @click.option('--bytes', required=False, help='Bytes to the file for the model to predict')
924
- @click.option('--input_type', required=False, help='Type of input')
925
1068
  @click.option(
926
1069
  '-cc_id',
927
1070
  '--compute_cluster_id',
@@ -933,9 +1076,17 @@ def local_runner(ctx, model_path, pool_size, verbose):
933
1076
  '-dpl_id', '--deployment_id', required=False, help='Deployment ID to use for the model'
934
1077
  )
935
1078
  @click.option(
936
- '--inference_params', required=False, default='{}', help='Inference parameters to override'
1079
+ '-dpl_usr_id',
1080
+ '--deployment_user_id',
1081
+ required=False,
1082
+ help='User ID to use for runner selector (organization or user). If not provided, defaults to PAT owner user_id.',
937
1083
  )
938
- @click.option('--output_config', required=False, default='{}', help='Output config to override')
1084
+ @click.option(
1085
+ '--inputs',
1086
+ required=False,
1087
+ help='JSON string of input parameters for pythonic models (e.g., \'{"prompt": "Hello", "max_tokens": 100}\')',
1088
+ )
1089
+ @click.option('--method', required=False, default='predict', help='Method to call on the model.')
939
1090
  @click.pass_context
940
1091
  def predict(
941
1092
  ctx,
@@ -944,133 +1095,104 @@ def predict(
944
1095
  user_id,
945
1096
  app_id,
946
1097
  model_url,
947
- file_path,
948
- url,
949
- bytes,
950
- input_type,
951
1098
  compute_cluster_id,
952
1099
  nodepool_id,
953
1100
  deployment_id,
954
- inference_params,
955
- output_config,
1101
+ deployment_user_id,
1102
+ inputs,
1103
+ method,
956
1104
  ):
957
- """Predict using the given model"""
958
- import json
1105
+ """Predict using a Clarifai model.
1106
+
1107
+ \b
1108
+ Model Identification:
1109
+ Use either --model_url OR the combination of --model_id, --user_id, and --app_id
1110
+
1111
+ \b
1112
+ Input Methods:
1113
+ --inputs: JSON string with parameters (e.g., '{"prompt": "Hello", "max_tokens": 100}')
1114
+ --method: Method to call on the model (default is 'predict')
1115
+
1116
+ \b
1117
+ Compute Options:
1118
+ Use either --deployment_id OR both --compute_cluster_id and --nodepool_id
959
1119
 
1120
+ \b
1121
+ Examples:
1122
+ Text model:
1123
+ clarifai model predict --model_url <url> --inputs '{"prompt": "Hello world"}'
1124
+
1125
+ With compute cluster:
1126
+ clarifai model predict --model_id <id> --user_id <uid> --app_id <aid> \\
1127
+ --compute_cluster_id <cc_id> --nodepool_id <np_id> \\
1128
+ --inputs '{"prompt": "Hello"}'
1129
+ """
960
1130
  from clarifai.client.model import Model
1131
+ from clarifai.urls.helper import ClarifaiUrlHelper
961
1132
  from clarifai.utils.cli import from_yaml, validate_context
962
1133
 
963
1134
  validate_context(ctx)
1135
+
1136
+ # Load configuration from file if provided
964
1137
  if config:
965
- config = from_yaml(config)
966
- (
967
- model_id,
968
- user_id,
969
- app_id,
970
- model_url,
971
- file_path,
972
- url,
973
- bytes,
974
- input_type,
975
- compute_cluster_id,
976
- nodepool_id,
977
- deployment_id,
978
- inference_params,
979
- output_config,
980
- ) = (
981
- config.get(k, v)
982
- for k, v in [
983
- ('model_id', model_id),
984
- ('user_id', user_id),
985
- ('app_id', app_id),
986
- ('model_url', model_url),
987
- ('file_path', file_path),
988
- ('url', url),
989
- ('bytes', bytes),
990
- ('input_type', input_type),
991
- ('compute_cluster_id', compute_cluster_id),
992
- ('nodepool_id', nodepool_id),
993
- ('deployment_id', deployment_id),
994
- ('inference_params', inference_params),
995
- ('output_config', output_config),
996
- ]
997
- )
998
- if (
999
- sum(
1000
- [
1001
- opt[1]
1002
- for opt in [(model_id, 1), (user_id, 1), (app_id, 1), (model_url, 3)]
1003
- if opt[0]
1004
- ]
1005
- )
1006
- != 3
1007
- ):
1008
- raise ValueError(
1009
- "Either --model_id & --user_id & --app_id or --model_url must be provided."
1010
- )
1011
- if compute_cluster_id or nodepool_id or deployment_id:
1012
- if (
1013
- sum(
1014
- [
1015
- opt[1]
1016
- for opt in [(compute_cluster_id, 0.5), (nodepool_id, 0.5), (deployment_id, 1)]
1017
- if opt[0]
1018
- ]
1019
- )
1020
- != 1
1021
- ):
1022
- raise ValueError(
1023
- "Either --compute_cluster_id & --nodepool_id or --deployment_id must be provided."
1024
- )
1025
- if model_url:
1026
- model = Model(
1027
- url=model_url,
1028
- pat=ctx.obj['pat'],
1029
- base_url=ctx.obj['base_url'],
1030
- compute_cluster_id=compute_cluster_id,
1031
- nodepool_id=nodepool_id,
1032
- deployment_id=deployment_id,
1138
+ config_data = from_yaml(config)
1139
+ # Override None values with config data
1140
+ model_id = model_id or config_data.get('model_id')
1141
+ user_id = user_id or config_data.get('user_id')
1142
+ app_id = app_id or config_data.get('app_id')
1143
+ model_url = model_url or config_data.get('model_url')
1144
+ compute_cluster_id = compute_cluster_id or config_data.get('compute_cluster_id')
1145
+ nodepool_id = nodepool_id or config_data.get('nodepool_id')
1146
+ deployment_id = deployment_id or config_data.get('deployment_id')
1147
+ deployment_user_id = deployment_user_id or config_data.get('deployment_user_id')
1148
+ inputs = inputs or config_data.get('inputs')
1149
+ method = method or config_data.get('method', 'predict')
1150
+
1151
+ # Validate parameters
1152
+ _validate_model_params(model_id, user_id, app_id, model_url)
1153
+ _validate_compute_params(compute_cluster_id, nodepool_id, deployment_id)
1154
+
1155
+ # Generate model URL if not provided
1156
+ if not model_url:
1157
+ model_url = ClarifaiUrlHelper.clarifai_url(
1158
+ user_id=user_id, app_id=app_id, resource_type="models", resource_id=model_id
1033
1159
  )
1160
+ logger.debug(f"Using model at URL: {model_url}")
1161
+
1162
+ # Create model instance
1163
+ model = Model(
1164
+ url=model_url,
1165
+ pat=ctx.obj.current.pat,
1166
+ base_url=ctx.obj.current.api_base,
1167
+ compute_cluster_id=compute_cluster_id,
1168
+ nodepool_id=nodepool_id,
1169
+ deployment_id=deployment_id,
1170
+ deployment_user_id=deployment_user_id,
1171
+ )
1172
+
1173
+ model_methods = model.client.available_methods()
1174
+ stream_method = (
1175
+ model.client.method_signature(method).split()[-1][:-1].lower().startswith('iter')
1176
+ )
1177
+
1178
+ # Determine prediction method and execute
1179
+ if inputs and (method in model_methods):
1180
+ # Pythonic model prediction with JSON inputs
1181
+ inputs_dict = _parse_json_param(inputs, "inputs")
1182
+ inputs_dict = _process_multimodal_inputs(inputs_dict)
1183
+ model_prediction = getattr(model, method)(**inputs_dict)
1034
1184
  else:
1035
- model = Model(
1036
- model_id=model_id,
1037
- user_id=user_id,
1038
- app_id=app_id,
1039
- pat=ctx.obj['pat'],
1040
- base_url=ctx.obj['base_url'],
1041
- compute_cluster_id=compute_cluster_id,
1042
- nodepool_id=nodepool_id,
1043
- deployment_id=deployment_id,
1185
+ logger.error(
1186
+ f"ValueError: The model does not support the '{method}' method. Please check the model's capabilities."
1044
1187
  )
1188
+ raise click.Abort()
1045
1189
 
1046
- if inference_params:
1047
- inference_params = json.loads(inference_params)
1048
- if output_config:
1049
- output_config = json.loads(output_config)
1050
-
1051
- if file_path:
1052
- model_prediction = model.predict_by_filepath(
1053
- filepath=file_path,
1054
- input_type=input_type,
1055
- inference_params=inference_params,
1056
- output_config=output_config,
1057
- )
1058
- elif url:
1059
- model_prediction = model.predict_by_url(
1060
- url=url,
1061
- input_type=input_type,
1062
- inference_params=inference_params,
1063
- output_config=output_config,
1064
- )
1065
- elif bytes:
1066
- bytes = str.encode(bytes)
1067
- model_prediction = model.predict_by_bytes(
1068
- input_bytes=bytes,
1069
- input_type=input_type,
1070
- inference_params=inference_params,
1071
- output_config=output_config,
1072
- ) ## TO DO: Add support for input_id
1073
- click.echo(model_prediction)
1190
+ if stream_method:
1191
+ for chunk in model_prediction:
1192
+ click.echo(chunk, nl=False)
1193
+ click.echo() # Ensure a newline after the stream ends
1194
+ else:
1195
+ click.echo(model_prediction)
1074
1196
 
1075
1197
 
1076
1198
  @model.command(name="list")
@@ -1096,7 +1218,7 @@ def list_model(ctx, user_id, app_id):
1096
1218
  from clarifai.client import User
1097
1219
 
1098
1220
  try:
1099
- pat = ctx.obj.contexts["default"]["env"]["CLARIFAI_PAT"]
1221
+ pat = ctx.obj.current.pat
1100
1222
  except Exception as e:
1101
1223
  pat = None
1102
1224
 
@@ -229,12 +229,34 @@ def init(pipeline_path):
229
229
  # Create the pipeline directory if it doesn't exist
230
230
  os.makedirs(pipeline_path, exist_ok=True)
231
231
 
232
+ # Prompt for user inputs
233
+ click.echo("Welcome to Clarifai Pipeline Initialization!")
234
+ click.echo("Please provide the following information:")
235
+
236
+ user_id = click.prompt("User ID", type=str)
237
+ app_id = click.prompt("App ID", type=str)
238
+ pipeline_id = click.prompt("Pipeline ID", default="hello-world-pipeline", type=str)
239
+ num_steps = click.prompt("Number of pipeline steps", default=2, type=int)
240
+
241
+ # Get step names
242
+ step_names = []
243
+ default_names = ["stepA", "stepB", "stepC", "stepD", "stepE", "stepF"]
244
+
245
+ for i in range(num_steps):
246
+ default_name = default_names[i] if i < len(default_names) else f"step{i + 1}"
247
+ step_name = click.prompt(f"Name for step {i + 1}", default=default_name, type=str)
248
+ step_names.append(step_name)
249
+
250
+ click.echo(f"\nCreating pipeline '{pipeline_id}' with steps: {', '.join(step_names)}")
251
+
232
252
  # Create pipeline config.yaml
233
253
  config_path = os.path.join(pipeline_path, "config.yaml")
234
254
  if os.path.exists(config_path):
235
255
  logger.warning(f"File {config_path} already exists, skipping...")
236
256
  else:
237
- config_template = get_pipeline_config_template()
257
+ config_template = get_pipeline_config_template(
258
+ pipeline_id=pipeline_id, user_id=user_id, app_id=app_id, step_names=step_names
259
+ )
238
260
  with open(config_path, 'w', encoding='utf-8') as f:
239
261
  f.write(config_template)
240
262
  logger.info(f"Created {config_path}")
@@ -249,8 +271,8 @@ def init(pipeline_path):
249
271
  f.write(readme_template)
250
272
  logger.info(f"Created {readme_path}")
251
273
 
252
- # Create pipeline steps (stepA and stepB)
253
- for step_id in ["stepA", "stepB"]:
274
+ # Create pipeline steps
275
+ for step_id in step_names:
254
276
  step_dir = os.path.join(pipeline_path, step_id)
255
277
  os.makedirs(step_dir, exist_ok=True)
256
278
 
@@ -263,7 +285,9 @@ def init(pipeline_path):
263
285
  if os.path.exists(step_config_path):
264
286
  logger.warning(f"File {step_config_path} already exists, skipping...")
265
287
  else:
266
- step_config_template = get_pipeline_step_config_template(step_id)
288
+ step_config_template = get_pipeline_step_config_template(
289
+ step_id=step_id, user_id=user_id, app_id=app_id
290
+ )
267
291
  with open(step_config_path, 'w', encoding='utf-8') as f:
268
292
  f.write(step_config_template)
269
293
  logger.info(f"Created {step_config_path}")
@@ -290,13 +314,9 @@ def init(pipeline_path):
290
314
 
291
315
  logger.info(f"Pipeline initialization complete in {pipeline_path}")
292
316
  logger.info("Next steps:")
293
- logger.info("1. Search for '# TODO: please fill in' comments in the generated files")
294
- logger.info("2. Update your user_id and app_id in all config.yaml files")
295
- logger.info(
296
- "3. Implement your pipeline step logic in stepA/1/pipeline_step.py and stepB/1/pipeline_step.py"
297
- )
298
- logger.info("4. Add dependencies to requirements.txt files as needed")
299
- logger.info("5. Run 'clarifai pipeline upload config.yaml' to upload your pipeline")
317
+ logger.info("1. Implement your pipeline step logic in the generated pipeline_step.py files")
318
+ logger.info("2. Add dependencies to requirements.txt files as needed")
319
+ logger.info("3. Run 'clarifai pipeline upload config.yaml' to upload your pipeline")
300
320
 
301
321
 
302
322
  @pipeline.command(['ls'])