clarifai 11.6.2__tar.gz → 11.6.4__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 (150) hide show
  1. {clarifai-11.6.2/clarifai.egg-info → clarifai-11.6.4}/PKG-INFO +2 -2
  2. clarifai-11.6.4/clarifai/__init__.py +1 -0
  3. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/base.py +30 -1
  4. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/model.py +65 -41
  5. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/model_templates.py +4 -4
  6. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/nodepool.py +1 -1
  7. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/dockerfile_template/Dockerfile.template +1 -1
  8. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_builder.py +1 -1
  9. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipeline_steps/pipeline_step_builder.py +12 -8
  10. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/server.py +3 -1
  11. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/cli.py +50 -1
  12. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/constants.py +16 -16
  13. {clarifai-11.6.2 → clarifai-11.6.4/clarifai.egg-info}/PKG-INFO +2 -2
  14. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/requires.txt +1 -1
  15. {clarifai-11.6.2 → clarifai-11.6.4}/requirements.txt +1 -1
  16. clarifai-11.6.2/clarifai/__init__.py +0 -1
  17. {clarifai-11.6.2 → clarifai-11.6.4}/LICENSE +0 -0
  18. {clarifai-11.6.2 → clarifai-11.6.4}/MANIFEST.in +0 -0
  19. {clarifai-11.6.2 → clarifai-11.6.4}/README.md +0 -0
  20. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/README.md +0 -0
  21. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/__init__.py +0 -0
  22. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/__main__.py +0 -0
  23. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/compute_cluster.py +0 -0
  24. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/deployment.py +0 -0
  25. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/nodepool.py +0 -0
  26. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/pipeline.py +0 -0
  27. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/pipeline_step.py +0 -0
  28. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/__init__.py +0 -0
  29. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/pipeline_step_templates.py +0 -0
  30. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/pipeline_templates.py +0 -0
  31. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli.py +0 -0
  32. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/__init__.py +0 -0
  33. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/app.py +0 -0
  34. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/__init__.py +0 -0
  35. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/helper.py +0 -0
  36. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/register.py +0 -0
  37. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/stub.py +0 -0
  38. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/base.py +0 -0
  39. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/compute_cluster.py +0 -0
  40. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/dataset.py +0 -0
  41. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/deployment.py +0 -0
  42. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/input.py +0 -0
  43. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/lister.py +0 -0
  44. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/model.py +0 -0
  45. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/model_client.py +0 -0
  46. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/module.py +0 -0
  47. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/pipeline.py +0 -0
  48. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/runner.py +0 -0
  49. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/search.py +0 -0
  50. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/user.py +0 -0
  51. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/workflow.py +0 -0
  52. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/base.py +0 -0
  53. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/dataset.py +0 -0
  54. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/input.py +0 -0
  55. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/model.py +0 -0
  56. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/rag.py +0 -0
  57. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/search.py +0 -0
  58. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/workflow.py +0 -0
  59. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/__init__.py +0 -0
  60. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/export/__init__.py +0 -0
  61. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/export/inputs_annotations.py +0 -0
  62. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/__init__.py +0 -0
  63. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/base.py +0 -0
  64. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/features.py +0 -0
  65. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/image.py +0 -0
  66. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/README.md +0 -0
  67. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/__init__.py +0 -0
  68. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
  69. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
  70. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
  71. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
  72. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/multimodal.py +0 -0
  73. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/text.py +0 -0
  74. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/utils.py +0 -0
  75. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/errors.py +0 -0
  76. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/models/__init__.py +0 -0
  77. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/models/api.py +0 -0
  78. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/README.md +0 -0
  79. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/__init__.py +0 -0
  80. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/css.py +0 -0
  81. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/pages.py +0 -0
  82. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/style.css +0 -0
  83. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/__init__.py +0 -0
  84. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/rag.py +0 -0
  85. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/utils.py +0 -0
  86. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/__init__.py +0 -0
  87. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/__init__.py +0 -0
  88. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/dummy_openai_model.py +0 -0
  89. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/mcp_class.py +0 -0
  90. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_class.py +0 -0
  91. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_run_locally.py +0 -0
  92. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_runner.py +0 -0
  93. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_servicer.py +0 -0
  94. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/openai_class.py +0 -0
  95. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/visual_classifier_class.py +0 -0
  96. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/visual_detector_class.py +0 -0
  97. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipeline_steps/__init__.py +0 -0
  98. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipelines/__init__.py +0 -0
  99. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipelines/pipeline_builder.py +0 -0
  100. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/__init__.py +0 -0
  101. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/code_script.py +0 -0
  102. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/const.py +0 -0
  103. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_types/__init__.py +0 -0
  104. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_types/data_types.py +0 -0
  105. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_utils.py +0 -0
  106. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/loader.py +0 -0
  107. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/method_signatures.py +0 -0
  108. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/model_utils.py +0 -0
  109. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/openai_convertor.py +0 -0
  110. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/pipeline_validation.py +0 -0
  111. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/serializers.py +0 -0
  112. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/url_fetcher.py +0 -0
  113. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/schema/search.py +0 -0
  114. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/urls/helper.py +0 -0
  115. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/__init__.py +0 -0
  116. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/config.py +0 -0
  117. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/__init__.py +0 -0
  118. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/helpers.py +0 -0
  119. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/main.py +0 -0
  120. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
  121. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/logging.py +0 -0
  122. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/misc.py +0 -0
  123. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/model_train.py +0 -0
  124. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/protobuf.py +0 -0
  125. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/versions.py +0 -0
  126. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/__init__.py +0 -0
  127. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/export.py +0 -0
  128. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/utils.py +0 -0
  129. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/validate.py +0 -0
  130. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/SOURCES.txt +0 -0
  131. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/dependency_links.txt +0 -0
  132. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/entry_points.txt +0 -0
  133. {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/top_level.txt +0 -0
  134. {clarifai-11.6.2 → clarifai-11.6.4}/pyproject.toml +0 -0
  135. {clarifai-11.6.2 → clarifai-11.6.4}/setup.cfg +0 -0
  136. {clarifai-11.6.2 → clarifai-11.6.4}/setup.py +0 -0
  137. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_app.py +0 -0
  138. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_async_stub.py +0 -0
  139. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_auth.py +0 -0
  140. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_data_upload.py +0 -0
  141. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_eval.py +0 -0
  142. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_list_models.py +0 -0
  143. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_misc.py +0 -0
  144. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_model_predict.py +0 -0
  145. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_model_train.py +0 -0
  146. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_modules.py +0 -0
  147. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_pipeline_client.py +0 -0
  148. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_rag.py +0 -0
  149. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_search.py +0 -0
  150. {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clarifai
3
- Version: 11.6.2
3
+ Version: 11.6.4
4
4
  Home-page: https://github.com/Clarifai/clarifai-python
5
5
  Author: Clarifai
6
6
  Author-email: support@clarifai.com
@@ -19,7 +19,7 @@ Classifier: Operating System :: OS Independent
19
19
  Requires-Python: >=3.8
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: clarifai-grpc>=11.6.0
22
+ Requires-Dist: clarifai-grpc>=11.6.1
23
23
  Requires-Dist: clarifai-protocol>=0.0.25
24
24
  Requires-Dist: numpy>=1.22.0
25
25
  Requires-Dist: tqdm>=4.65.0
@@ -0,0 +1 @@
1
+ __version__ = "11.6.4"
@@ -154,11 +154,12 @@ def env(ctx_obj):
154
154
 
155
155
 
156
156
  @cli.command()
157
- @click.argument('api_url', default="https://api.clarifai.com")
157
+ @click.argument('api_url', default=DEFAULT_BASE)
158
158
  @click.option('--user_id', required=False, help='User ID')
159
159
  @click.pass_context
160
160
  def login(ctx, api_url, user_id):
161
161
  """Login command to set PAT and other configurations."""
162
+ from clarifai.utils.cli import validate_pat_token
162
163
 
163
164
  name = input('context name (default: "default"): ')
164
165
  user_id = user_id if user_id is not None else input('user id: ')
@@ -167,6 +168,18 @@ def login(ctx, api_url, user_id):
167
168
  'ENVVAR',
168
169
  )
169
170
 
171
+ # Validate the PAT token if it's not "ENVVAR"
172
+ if pat != "ENVVAR":
173
+ print("Validating PAT token...")
174
+ is_valid, error_message = validate_pat_token(pat, user_id, api_url)
175
+
176
+ if not is_valid:
177
+ print(f"❌ PAT token validation failed: {error_message}")
178
+ print("Please check your token and try again.")
179
+ return # Exit without saving the configuration
180
+ else:
181
+ print("✓ PAT token is valid")
182
+
170
183
  context = Context(
171
184
  name,
172
185
  CLARIFAI_API_BASE=api_url,
@@ -181,6 +194,7 @@ def login(ctx, api_url, user_id):
181
194
  ctx.obj.current_context = context.name
182
195
 
183
196
  ctx.obj.to_yaml()
197
+ print(f"✓ Configuration saved successfully for context '{context.name}'")
184
198
 
185
199
 
186
200
  @cli.group(cls=AliasedGroup)
@@ -211,6 +225,8 @@ def create(
211
225
  pat=None,
212
226
  ):
213
227
  """Create a new context"""
228
+ from clarifai.utils.cli import validate_pat_token
229
+
214
230
  if name in ctx.obj.contexts:
215
231
  print(f'{name} already exists')
216
232
  sys.exit(1)
@@ -226,9 +242,22 @@ def create(
226
242
  'ENVVAR',
227
243
  )
228
244
 
245
+ # Validate the PAT token if it's not "ENVVAR"
246
+ if pat != "ENVVAR":
247
+ print("Validating PAT token...")
248
+ is_valid, error_message = validate_pat_token(pat, user_id, base_url)
249
+
250
+ if not is_valid:
251
+ print(f"❌ PAT token validation failed: {error_message}")
252
+ print("Please check your token and try again.")
253
+ return # Exit without saving the configuration
254
+ else:
255
+ print("✓ PAT token is valid")
256
+
229
257
  context = Context(name, CLARIFAI_USER_ID=user_id, CLARIFAI_API_BASE=base_url, CLARIFAI_PAT=pat)
230
258
  ctx.obj.contexts[context.name] = context
231
259
  ctx.obj.to_yaml()
260
+ print(f"✓ Context '{name}' created successfully")
232
261
 
233
262
 
234
263
  # write a click command to delete a context
@@ -7,20 +7,17 @@ import click
7
7
  from clarifai.cli.base import cli
8
8
  from clarifai.utils.cli import validate_context
9
9
  from clarifai.utils.constants import (
10
- DEFAULT_LOCAL_DEV_APP_ID,
11
- DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_CONFIG,
12
- DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_ID,
13
- DEFAULT_LOCAL_DEV_DEPLOYMENT_ID,
14
- DEFAULT_LOCAL_DEV_MODEL_ID,
15
- DEFAULT_LOCAL_DEV_MODEL_TYPE,
16
- DEFAULT_LOCAL_DEV_NODEPOOL_CONFIG,
17
- DEFAULT_LOCAL_DEV_NODEPOOL_ID,
10
+ DEFAULT_LOCAL_RUNNER_APP_ID,
11
+ DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_CONFIG,
12
+ DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_ID,
13
+ DEFAULT_LOCAL_RUNNER_DEPLOYMENT_ID,
14
+ DEFAULT_LOCAL_RUNNER_MODEL_ID,
15
+ DEFAULT_LOCAL_RUNNER_MODEL_TYPE,
16
+ DEFAULT_LOCAL_RUNNER_NODEPOOL_CONFIG,
17
+ DEFAULT_LOCAL_RUNNER_NODEPOOL_ID,
18
18
  )
19
19
  from clarifai.utils.logging import logger
20
- from clarifai.utils.misc import (
21
- clone_github_repo,
22
- format_github_repo_url,
23
- )
20
+ from clarifai.utils.misc import clone_github_repo, format_github_repo_url
24
21
 
25
22
 
26
23
  @cli.group(
@@ -60,7 +57,12 @@ def model():
60
57
  required=False,
61
58
  help='Git branch to clone from the GitHub repository. If not specified, the default branch will be used.',
62
59
  )
63
- def init(model_path, model_type_id, github_pat, github_repo, branch):
60
+ @click.option(
61
+ '--local-ollama-model',
62
+ is_flag=True,
63
+ help='Create an Ollama model template by cloning from GitHub repository.',
64
+ )
65
+ def init(model_path, model_type_id, github_pat, github_repo, branch, local_ollama_model):
64
66
  """Initialize a new model directory structure.
65
67
 
66
68
  Creates the following structure in the specified directory:
@@ -76,6 +78,15 @@ def init(model_path, model_type_id, github_pat, github_repo, branch):
76
78
 
77
79
  MODEL_PATH: Path where to create the model directory structure. If not specified, the current directory is used by default.
78
80
  """
81
+ # Handle the --local-ollama-model flag
82
+ if local_ollama_model:
83
+ if github_repo or branch:
84
+ raise click.ClickException(
85
+ "Cannot specify both --local-ollama-model and --github-repo/--branch"
86
+ )
87
+ github_repo = "https://github.com/Clarifai/runners-examples"
88
+ branch = "ollama"
89
+
79
90
  # Resolve the absolute path
80
91
  model_path = os.path.abspath(model_path)
81
92
 
@@ -407,12 +418,19 @@ def run_locally(model_path, port, mode, keep_env, keep_image, skip_dockerfile=Fa
407
418
  required=False,
408
419
  default=".",
409
420
  )
421
+ @click.option(
422
+ "--pool_size",
423
+ type=int,
424
+ default=1, # default to 1 thread for local runner to avoid rapid depletion of compute time.
425
+ show_default=True,
426
+ help="The number of threads to use. On community plan, the compute time allocation is drained at a rate proportional to the number of threads.",
427
+ ) # pylint: disable=range-builtin-not-iterating
410
428
  @click.pass_context
411
- def local_dev(ctx, model_path):
412
- """Run the model as a local dev runner to help debug your model connected to the API or to
429
+ def local_runner(ctx, model_path, pool_size):
430
+ """Run the model as a local runner to help debug your model connected to the API or to
413
431
  leverage local compute resources manually. This relies on many variables being present in the env
414
432
  of the currently selected context. If they are not present then default values will be used to
415
- ease the setup of a local dev runner and your context yaml will be updated in place. The required
433
+ ease the setup of a local runner and your context yaml will be updated in place. The required
416
434
  env vars are:
417
435
 
418
436
  \b
@@ -426,7 +444,7 @@ def local_dev(ctx, model_path):
426
444
  CLARIFAI_MODEL_ID:
427
445
 
428
446
  \b
429
- # for where the local dev runner should be in a compute cluser
447
+ # for where the local runner should be in a compute cluster
430
448
  # note the user_id of the compute cluster is the same as the user_id of the model.
431
449
 
432
450
  \b
@@ -441,7 +459,7 @@ def local_dev(ctx, model_path):
441
459
  Additionally using the provided model path, if the config.yaml file does not contain the model
442
460
  information that matches the above CLARIFAI_USER_ID, CLARIFAI_APP_ID, CLARIFAI_MODEL_ID then the
443
461
  config.yaml will be updated to include the model information. This is to ensure that the model
444
- that starts up in the local dev runner is the same as the one you intend to call in the API.
462
+ that starts up in the local runner is the same as the one you intend to call in the API.
445
463
 
446
464
  MODEL_PATH: Path to the model directory. If not specified, the current directory is used by default.
447
465
  """
@@ -450,25 +468,29 @@ def local_dev(ctx, model_path):
450
468
  from clarifai.runners.server import serve
451
469
 
452
470
  validate_context(ctx)
453
- logger.info("Checking setup for local development runner...")
471
+ logger.info("Checking setup for local runner...")
454
472
  logger.info(f"Current context: {ctx.obj.current.name}")
455
473
  user_id = ctx.obj.current.user_id
456
- user = User(user_id=user_id, pat=ctx.obj.current.pat, base_url=ctx.obj.current.api_base)
457
474
  logger.info(f"Current user_id: {user_id}")
458
- logger.debug("Checking if a local dev compute cluster exists...")
475
+ if not user_id:
476
+ raise ValueError(
477
+ f"User with ID '{user_id}' not found. Use 'clarifai login' to setup context."
478
+ )
479
+ user = User(user_id=user_id, pat=ctx.obj.current.pat, base_url=ctx.obj.current.api_base)
480
+ logger.debug("Checking if a local runner compute cluster exists...")
459
481
 
460
482
  # see if ctx has CLARIFAI_COMPUTE_CLUSTER_ID, if not use default
461
483
  try:
462
484
  compute_cluster_id = ctx.obj.current.compute_cluster_id
463
485
  except AttributeError:
464
- compute_cluster_id = DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_ID
486
+ compute_cluster_id = DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_ID
465
487
  logger.info(f"Current compute_cluster_id: {compute_cluster_id}")
466
488
 
467
489
  try:
468
490
  compute_cluster = user.compute_cluster(compute_cluster_id)
469
491
  if compute_cluster.cluster_type != 'local-dev':
470
492
  raise ValueError(
471
- f"Compute cluster {user_id}/{compute_cluster_id} is not a local-dev compute cluster. Please create a local-dev compute cluster."
493
+ f"Compute cluster {user_id}/{compute_cluster_id} is not a local-runner compute cluster. Please create a local-runner compute cluster."
472
494
  )
473
495
  try:
474
496
  compute_cluster_id = ctx.obj.current.compute_cluster_id
@@ -484,10 +506,10 @@ def local_dev(ctx, model_path):
484
506
  )
485
507
  if y.lower() != 'y':
486
508
  raise click.Abort()
487
- # Create a compute cluster with default configuration for local dev.
509
+ # Create a compute cluster with default configuration for local runner.
488
510
  compute_cluster = user.create_compute_cluster(
489
511
  compute_cluster_id=compute_cluster_id,
490
- compute_cluster_config=DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_CONFIG,
512
+ compute_cluster_config=DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_CONFIG,
491
513
  )
492
514
  ctx.obj.current.CLARIFAI_COMPUTE_CLUSTER_ID = compute_cluster_id
493
515
  ctx.obj.to_yaml() # save to yaml file.
@@ -496,7 +518,7 @@ def local_dev(ctx, model_path):
496
518
  try:
497
519
  nodepool_id = ctx.obj.current.nodepool_id
498
520
  except AttributeError:
499
- nodepool_id = DEFAULT_LOCAL_DEV_NODEPOOL_ID
521
+ nodepool_id = DEFAULT_LOCAL_RUNNER_NODEPOOL_ID
500
522
  logger.info(f"Current nodepool_id: {nodepool_id}")
501
523
 
502
524
  try:
@@ -514,7 +536,7 @@ def local_dev(ctx, model_path):
514
536
  if y.lower() != 'y':
515
537
  raise click.Abort()
516
538
  nodepool = compute_cluster.create_nodepool(
517
- nodepool_config=DEFAULT_LOCAL_DEV_NODEPOOL_CONFIG, nodepool_id=nodepool_id
539
+ nodepool_config=DEFAULT_LOCAL_RUNNER_NODEPOOL_CONFIG, nodepool_id=nodepool_id
518
540
  )
519
541
  ctx.obj.current.CLARIFAI_NODEPOOL_ID = nodepool_id
520
542
  ctx.obj.to_yaml() # save to yaml file.
@@ -524,7 +546,7 @@ def local_dev(ctx, model_path):
524
546
  try:
525
547
  app_id = ctx.obj.current.app_id
526
548
  except AttributeError:
527
- app_id = DEFAULT_LOCAL_DEV_APP_ID
549
+ app_id = DEFAULT_LOCAL_RUNNER_APP_ID
528
550
  logger.info(f"Current app_id: {app_id}")
529
551
 
530
552
  try:
@@ -543,11 +565,11 @@ def local_dev(ctx, model_path):
543
565
  ctx.obj.current.CLARIFAI_APP_ID = app_id
544
566
  ctx.obj.to_yaml() # save to yaml file.
545
567
 
546
- # Within this app we now need a model to call as the local dev runner.
568
+ # Within this app we now need a model to call as the local runner.
547
569
  try:
548
570
  model_id = ctx.obj.current.model_id
549
571
  except AttributeError:
550
- model_id = DEFAULT_LOCAL_DEV_MODEL_ID
572
+ model_id = DEFAULT_LOCAL_RUNNER_MODEL_ID
551
573
  logger.info(f"Current model_id: {model_id}")
552
574
 
553
575
  try:
@@ -567,7 +589,7 @@ def local_dev(ctx, model_path):
567
589
  try:
568
590
  model_type_id = ctx.obj.current.model_type_id
569
591
  except AttributeError:
570
- model_type_id = DEFAULT_LOCAL_DEV_MODEL_TYPE
592
+ model_type_id = DEFAULT_LOCAL_RUNNER_MODEL_TYPE
571
593
 
572
594
  model = app.create_model(model_id, model_type_id=model_type_id)
573
595
  ctx.obj.current.CLARIFAI_MODEL_TYPE_ID = model_type_id
@@ -575,10 +597,10 @@ def local_dev(ctx, model_path):
575
597
  ctx.obj.to_yaml() # save to yaml file.
576
598
 
577
599
  # Now we need to create a version for the model if no version exists. Only need one version that
578
- # mentions it's a local dev runner.
600
+ # mentions it's a local runner.
579
601
  model_versions = [v for v in model.list_versions()]
580
602
  if len(model_versions) == 0:
581
- logger.info("No model versions found. Creating a new version for local dev runner.")
603
+ logger.info("No model versions found. Creating a new version for local runner.")
582
604
  version = model.create_version(pretrained_model_config={"local_dev": True}).model_version
583
605
  logger.info(f"Created model version {version.id}")
584
606
  else:
@@ -612,12 +634,12 @@ def local_dev(ctx, model_path):
612
634
  raise AttributeError("Runner not found in nodepool.") from e
613
635
  except AttributeError:
614
636
  logger.info(
615
- f"Create the local dev runner tying this\n {user_id}/{app_id}/models/{model.id} model (version: {version.id}) to the\n {user_id}/{compute_cluster_id}/{nodepool_id} nodepool."
637
+ f"Create the local runner tying this\n {user_id}/{app_id}/models/{model.id} model (version: {version.id}) to the\n {user_id}/{compute_cluster_id}/{nodepool_id} nodepool."
616
638
  )
617
639
  runner = nodepool.create_runner(
618
640
  runner_config={
619
641
  "runner": {
620
- "description": "Local dev runner for model testing",
642
+ "description": "local runner for model testing",
621
643
  "worker": worker,
622
644
  "num_replicas": 1,
623
645
  }
@@ -634,7 +656,7 @@ def local_dev(ctx, model_path):
634
656
  try:
635
657
  deployment_id = ctx.obj.current.deployment_id
636
658
  except AttributeError:
637
- deployment_id = DEFAULT_LOCAL_DEV_DEPLOYMENT_ID
659
+ deployment_id = DEFAULT_LOCAL_RUNNER_DEPLOYMENT_ID
638
660
  try:
639
661
  deployment = nodepool.deployment(deployment_id)
640
662
  # ensure the deployment is using the latest version.
@@ -689,7 +711,7 @@ def local_dev(ctx, model_path):
689
711
  f"config.yaml not found in {model_path}. Please ensure you are passing the correct directory."
690
712
  )
691
713
  config = ModelBuilder._load_config(config_file)
692
- model_type_id = config.get('model', {}).get('model_type_id', DEFAULT_LOCAL_DEV_MODEL_TYPE)
714
+ model_type_id = config.get('model', {}).get('model_type_id', DEFAULT_LOCAL_RUNNER_MODEL_TYPE)
693
715
  # The config.yaml doens't match what we created above.
694
716
  if 'model' in config and model_id != config['model'].get('id'):
695
717
  logger.info(f"Current model section of config.yaml: {config.get('model', {})}")
@@ -698,14 +720,14 @@ def local_dev(ctx, model_path):
698
720
  )
699
721
  if y.lower() != 'y':
700
722
  raise click.Abort()
701
- config = ModelBuilder._set_local_dev_model(
723
+ config = ModelBuilder._set_local_runner_model(
702
724
  config, user_id, app_id, model_id, model_type_id
703
725
  )
704
726
  ModelBuilder._backup_config(config_file)
705
727
  ModelBuilder._save_config(config_file, config)
706
728
 
707
729
  builder = ModelBuilder(model_path, download_validation_only=True)
708
- # don't mock for local dev since you need the dependencies to run the code anyways.
730
+ # don't mock for local runner since you need the dependencies to run the code anyways.
709
731
  method_signatures = builder.get_method_signatures(mocking=False)
710
732
 
711
733
  from clarifai.runners.utils import code_script
@@ -721,16 +743,18 @@ def local_dev(ctx, model_path):
721
743
 
722
744
  logger.info("""\n
723
745
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
724
- # About to start up the local dev runner in this terminal...
746
+ # About to start up the local runner in this terminal...
725
747
  # Here is a code snippet to call this model once it start from another terminal:
726
748
  """)
727
749
  logger.info(snippet)
728
750
 
729
- logger.info("Now starting the local dev runner...")
751
+ logger.info("Now starting the local runner...")
730
752
 
731
753
  # This reads the config.yaml from the model_path so we alter it above first.
732
754
  serve(
733
755
  model_path,
756
+ pool_size=pool_size,
757
+ num_threads=pool_size,
734
758
  user_id=user_id,
735
759
  compute_cluster_id=compute_cluster_id,
736
760
  nodepool_id=nodepool_id,
@@ -7,7 +7,7 @@ def get_model_class_template() -> str:
7
7
  """Return the template for a basic ModelClass-based model."""
8
8
  return '''from typing import Iterator, List
9
9
  from clarifai.runners.models.model_class import ModelClass
10
- from clarifai.runners.util.data_utils import Param
10
+ from clarifai.runners.utils.data_utils import Param
11
11
 
12
12
  class MyModel(ModelClass):
13
13
  """A custom model implementation using ModelClass."""
@@ -31,7 +31,7 @@ class MyModel(ModelClass):
31
31
  """This is the method that will be called when the runner is run. It takes in an input and returns an output."""
32
32
  # TODO: please fill in
33
33
  # Implement your prediction logic here
34
- pass # Replace with your actual logic
34
+ return "This is a placeholder response. Please implement your model logic."
35
35
 
36
36
  @ModelClass.method
37
37
  def generate(
@@ -45,7 +45,7 @@ class MyModel(ModelClass):
45
45
  """Example yielding a streamed response."""
46
46
  # TODO: please fill in
47
47
  # Implement your generation logic here
48
- pass # Replace with your actual logic
48
+ yield "This is a placeholder response. Please implement your model logic."
49
49
  '''
50
50
 
51
51
 
@@ -104,7 +104,7 @@ def get_openai_model_class_template() -> str:
104
104
  return '''from typing import List
105
105
  from openai import OpenAI
106
106
  from clarifai.runners.models.openai_class import OpenAIModelClass
107
- from clarifai.runners.util.data_utils import Param
107
+ from clarifai.runners.utils.data_utils import Param
108
108
  from clarifai.runners.utils.openai_convertor import build_openai_messages
109
109
 
110
110
  class MyModel(OpenAIModelClass):
@@ -280,7 +280,7 @@ class Nodepool(Lister, BaseClient):
280
280
  def create_runner(
281
281
  self, config_filepath: str = None, runner_config: Dict[str, Any] = None
282
282
  ) -> Runner:
283
- """Creates a runner for the nodepool. Only needed for local dev runners.
283
+ """Creates a runner for the nodepool. Only needed for local runners.
284
284
 
285
285
  Args:
286
286
  config_filepath (str): The path to the runner config file.
@@ -48,7 +48,7 @@ ENV PYTHONPATH=${PYTHONPATH}:/home/nonroot/main \
48
48
  CLARIFAI_COMPUTE_CLUSTER_ID=${CLARIFAI_COMPUTE_CLUSTER_ID} \
49
49
  CLARIFAI_API_BASE=${CLARIFAI_API_BASE:-https://api.clarifai.com}
50
50
 
51
- # Finally run the clarifai entrypoint to start the runner loop and local dev server.
51
+ # Finally run the clarifai entrypoint to start the runner loop and local runner server.
52
52
  # Note(zeiler): we may want to make this a clarifai CLI call.
53
53
  ENTRYPOINT ["python", "-m", "clarifai.runners.server"]
54
54
  CMD ["--model_path", "/home/nonroot/main"]
@@ -383,7 +383,7 @@ class ModelBuilder:
383
383
  sys.exit(1)
384
384
 
385
385
  @staticmethod
386
- def _set_local_dev_model(config, user_id, app_id, model_id, model_type_id):
386
+ def _set_local_runner_model(config, user_id, app_id, model_id, model_type_id):
387
387
  """
388
388
  Sets the model configuration for local development.
389
389
  This is used when running the model locally without uploading it to Clarifai.
@@ -8,6 +8,7 @@ from string import Template
8
8
  import yaml
9
9
  from clarifai_grpc.grpc.api import resources_pb2, service_pb2
10
10
  from clarifai_grpc.grpc.api.status import status_code_pb2
11
+ from google.protobuf import json_format
11
12
 
12
13
  from clarifai.client.base import BaseClient
13
14
  from clarifai.utils.logging import logger
@@ -106,16 +107,16 @@ class PipelineStepBuilder:
106
107
 
107
108
  def _get_pipeline_step_compute_info(self):
108
109
  """Get pipeline step compute info from config."""
110
+ assert "pipeline_step_compute_info" in self.config, (
111
+ "pipeline_step_compute_info not found in the config file"
112
+ )
109
113
  compute_config = self.config.get("pipeline_step_compute_info", {})
110
114
 
111
- compute_info = resources_pb2.ComputeInfo()
115
+ # Ensure cpu_limit is a string if it exists and is an int
116
+ if 'cpu_limit' in compute_config and isinstance(compute_config['cpu_limit'], int):
117
+ compute_config['cpu_limit'] = str(compute_config['cpu_limit'])
112
118
 
113
- if "cpu_limit" in compute_config:
114
- compute_info.cpu_limit = compute_config["cpu_limit"]
115
- if "cpu_memory" in compute_config:
116
- compute_info.cpu_memory = compute_config["cpu_memory"]
117
- if "num_accelerators" in compute_config:
118
- compute_info.num_accelerators = compute_config["num_accelerators"]
119
+ compute_info = json_format.ParseDict(compute_config, resources_pb2.ComputeInfo())
119
120
 
120
121
  return compute_info
121
122
 
@@ -200,8 +201,11 @@ COPY --link=true requirements.txt config.yaml /home/nonroot/main/
200
201
  PYTHON_VERSION=python_version
201
202
  )
202
203
 
203
- # Write Dockerfile
204
+ # Write Dockerfile if it doesn't exist
204
205
  dockerfile_path = os.path.join(self.folder, 'Dockerfile')
206
+ if os.path.exists(dockerfile_path):
207
+ logger.info(f"Dockerfile already exists at {dockerfile_path}, skipping creation.")
208
+ return
205
209
  with open(dockerfile_path, 'w') as dockerfile:
206
210
  dockerfile.write(dockerfile_content)
207
211
 
@@ -81,6 +81,7 @@ def serve(
81
81
  model_path,
82
82
  port=8000,
83
83
  pool_size=32,
84
+ num_threads=0,
84
85
  max_queue_size=10,
85
86
  max_msg_length=1024 * 1024 * 1024,
86
87
  enable_tls=False,
@@ -98,7 +99,8 @@ def serve(
98
99
 
99
100
  # `num_threads` can be set in config.yaml or via the environment variable CLARIFAI_NUM_THREADS="<integer>".
100
101
  # Note: The value in config.yaml takes precedence over the environment variable.
101
- num_threads = builder.config.get("num_threads")
102
+ if num_threads == 0:
103
+ num_threads = builder.config.get("num_threads")
102
104
  # Setup the grpc server for local development.
103
105
  if grpc:
104
106
  # initialize the servicer with the runner so that it gets the predict(), generate(), stream() classes.
@@ -4,7 +4,7 @@ import pkgutil
4
4
  import sys
5
5
  import typing as t
6
6
  from collections import defaultdict
7
- from typing import OrderedDict
7
+ from typing import OrderedDict, Tuple
8
8
 
9
9
  import click
10
10
  import yaml
@@ -172,3 +172,52 @@ def validate_context(ctx):
172
172
  if ctx.obj == {}:
173
173
  logger.error("CLI config file missing. Run `clarifai login` to set up the CLI config.")
174
174
  sys.exit(1)
175
+
176
+
177
+ def validate_pat_token(pat: str, user_id: str, api_base: str = None) -> Tuple[bool, str]:
178
+ """
179
+ Validate a Personal Access Token (PAT) by making a test API call.
180
+
181
+ Args:
182
+ pat (str): The Personal Access Token to validate
183
+ user_id (str): The user ID associated with the token
184
+ api_base (str): The API base URL. Defaults to None (uses default).
185
+
186
+ Returns:
187
+ tuple[bool, str]: A tuple of (is_valid, error_message)
188
+ If valid: (True, "")
189
+ If invalid: (False, error_description)
190
+ """
191
+ try:
192
+ from clarifai_grpc.grpc.api.status import status_code_pb2
193
+
194
+ from clarifai.client.user import User
195
+
196
+ # Create user client for validation
197
+ if api_base:
198
+ user_client = User(user_id=user_id, pat=pat, base_url=api_base)
199
+ else:
200
+ user_client = User(user_id=user_id, pat=pat)
201
+
202
+ # Try to get user info as a test API call
203
+ response = user_client.get_user_info()
204
+
205
+ if response.status.code == status_code_pb2.SUCCESS:
206
+ return True, ""
207
+ else:
208
+ return False, f"Authentication failed: {response.status.description}"
209
+
210
+ except Exception as e:
211
+ error_msg = str(e)
212
+
213
+ # Check for common authentication errors and provide user-friendly messages
214
+ if "PERMISSION_DENIED" in error_msg or "Unauthorized" in error_msg:
215
+ return False, "Invalid PAT token or insufficient permissions"
216
+ elif "UNAUTHENTICATED" in error_msg:
217
+ return False, "Invalid PAT token"
218
+ elif "SSL" in error_msg or "certificate" in error_msg:
219
+ return False, f"SSL/Certificate error: {error_msg}"
220
+ elif "Connection" in error_msg or "timeout" in error_msg:
221
+ return False, f"Network connection error: {error_msg}"
222
+ else:
223
+ return False, f"Validation error: {error_msg}"
@@ -14,20 +14,20 @@ CLARIFAI_USER_ID_ENV_VAR = "CLARIFAI_USER_ID"
14
14
  HOME_PATH = Path.home()
15
15
  DEFAULT_CONFIG = HOME_PATH / '.config/clarifai/config'
16
16
 
17
- # Default clusters, etc. for local dev runner easy setup
18
- DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_ID = "local-dev-compute-cluster"
19
- DEFAULT_LOCAL_DEV_NODEPOOL_ID = "local-dev-nodepool"
20
- DEFAULT_LOCAL_DEV_DEPLOYMENT_ID = "local-dev-deployment"
21
- DEFAULT_LOCAL_DEV_MODEL_ID = "local-dev-model"
22
- DEFAULT_LOCAL_DEV_APP_ID = "local-dev-runner-app"
17
+ # Default clusters, etc. for local runner easy setup
18
+ DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_ID = "local-runner-compute-cluster"
19
+ DEFAULT_LOCAL_RUNNER_NODEPOOL_ID = "local-runner-nodepool"
20
+ DEFAULT_LOCAL_RUNNER_DEPLOYMENT_ID = "local-runner-deployment"
21
+ DEFAULT_LOCAL_RUNNER_MODEL_ID = "local-runner-model"
22
+ DEFAULT_LOCAL_RUNNER_APP_ID = "local-runner-app"
23
23
 
24
24
  # FIXME: should have any-to-any for these cases.
25
- DEFAULT_LOCAL_DEV_MODEL_TYPE = "text-to-text"
25
+ DEFAULT_LOCAL_RUNNER_MODEL_TYPE = "text-to-text"
26
26
 
27
- DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_CONFIG = {
27
+ DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_CONFIG = {
28
28
  "compute_cluster": {
29
- "id": DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_ID,
30
- "description": "Default Local Dev Compute Cluster",
29
+ "id": DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_ID,
30
+ "description": "Default Local Runner Compute Cluster",
31
31
  "cloud_provider": {
32
32
  "id": "local",
33
33
  },
@@ -37,12 +37,12 @@ DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_CONFIG = {
37
37
  }
38
38
  }
39
39
 
40
- DEFAULT_LOCAL_DEV_NODEPOOL_CONFIG = {
40
+ DEFAULT_LOCAL_RUNNER_NODEPOOL_CONFIG = {
41
41
  "nodepool": {
42
- "id": DEFAULT_LOCAL_DEV_NODEPOOL_ID,
43
- "description": "Default Local Dev Nodepool",
42
+ "id": DEFAULT_LOCAL_RUNNER_NODEPOOL_ID,
43
+ "description": "Default Local Runner Nodepool",
44
44
  "compute_cluster": {
45
- "id": DEFAULT_LOCAL_DEV_COMPUTE_CLUSTER_ID,
45
+ "id": DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_ID,
46
46
  "user_id": None, # This will be set when creating the compute cluster
47
47
  },
48
48
  "instance_types": [
@@ -50,8 +50,8 @@ DEFAULT_LOCAL_DEV_NODEPOOL_CONFIG = {
50
50
  "id": "local",
51
51
  "compute_info": {
52
52
  "cpu_limit": str(os.cpu_count()),
53
- "cpu_memory": "16Gi", # made up as we don't schedule based on this for local dev.
54
- "num_accelerators": 0, # TODO if we need accelerator detection for local dev.
53
+ "cpu_memory": "16Gi", # made up as we don't schedule based on this for local runner.
54
+ "num_accelerators": 0, # TODO if we need accelerator detection for local runner.
55
55
  },
56
56
  }
57
57
  ],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clarifai
3
- Version: 11.6.2
3
+ Version: 11.6.4
4
4
  Home-page: https://github.com/Clarifai/clarifai-python
5
5
  Author: Clarifai
6
6
  Author-email: support@clarifai.com
@@ -19,7 +19,7 @@ Classifier: Operating System :: OS Independent
19
19
  Requires-Python: >=3.8
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: clarifai-grpc>=11.6.0
22
+ Requires-Dist: clarifai-grpc>=11.6.1
23
23
  Requires-Dist: clarifai-protocol>=0.0.25
24
24
  Requires-Dist: numpy>=1.22.0
25
25
  Requires-Dist: tqdm>=4.65.0
@@ -1,4 +1,4 @@
1
- clarifai-grpc>=11.6.0
1
+ clarifai-grpc>=11.6.1
2
2
  clarifai-protocol>=0.0.25
3
3
  numpy>=1.22.0
4
4
  tqdm>=4.65.0
@@ -1,4 +1,4 @@
1
- clarifai-grpc>=11.6.0
1
+ clarifai-grpc>=11.6.1
2
2
  clarifai-protocol>=0.0.25
3
3
  numpy>=1.22.0
4
4
  tqdm>=4.65.0
@@ -1 +0,0 @@
1
- __version__ = "11.6.2"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes