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.
- {clarifai-11.6.2/clarifai.egg-info → clarifai-11.6.4}/PKG-INFO +2 -2
- clarifai-11.6.4/clarifai/__init__.py +1 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/base.py +30 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/model.py +65 -41
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/model_templates.py +4 -4
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/nodepool.py +1 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/dockerfile_template/Dockerfile.template +1 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_builder.py +1 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipeline_steps/pipeline_step_builder.py +12 -8
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/server.py +3 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/cli.py +50 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/constants.py +16 -16
- {clarifai-11.6.2 → clarifai-11.6.4/clarifai.egg-info}/PKG-INFO +2 -2
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/requires.txt +1 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/requirements.txt +1 -1
- clarifai-11.6.2/clarifai/__init__.py +0 -1
- {clarifai-11.6.2 → clarifai-11.6.4}/LICENSE +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/MANIFEST.in +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/README.md +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/README.md +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/__main__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/compute_cluster.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/deployment.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/nodepool.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/pipeline.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/pipeline_step.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/pipeline_step_templates.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli/templates/pipeline_templates.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/cli.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/app.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/helper.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/register.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/auth/stub.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/base.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/compute_cluster.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/dataset.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/deployment.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/input.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/lister.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/model.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/model_client.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/module.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/pipeline.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/runner.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/search.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/user.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/client/workflow.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/base.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/dataset.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/input.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/model.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/rag.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/search.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/constants/workflow.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/export/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/export/inputs_annotations.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/base.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/features.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/image.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/README.md +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/multimodal.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/text.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/utils.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/errors.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/models/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/models/api.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/README.md +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/css.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/pages.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/modules/style.css +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/rag.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/rag/utils.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/dummy_openai_model.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/mcp_class.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_class.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_run_locally.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_runner.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/model_servicer.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/openai_class.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/visual_classifier_class.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/models/visual_detector_class.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipeline_steps/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipelines/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipelines/pipeline_builder.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/code_script.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/const.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_types/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_types/data_types.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/data_utils.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/loader.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/method_signatures.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/model_utils.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/openai_convertor.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/pipeline_validation.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/serializers.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/utils/url_fetcher.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/schema/search.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/urls/helper.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/config.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/helpers.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/main.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/logging.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/misc.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/model_train.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/utils/protobuf.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/versions.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/__init__.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/export.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/utils.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai/workflows/validate.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/SOURCES.txt +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/dependency_links.txt +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/entry_points.txt +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/clarifai.egg-info/top_level.txt +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/pyproject.toml +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/setup.cfg +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/setup.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_app.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_async_stub.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_auth.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_data_upload.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_eval.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_list_models.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_misc.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_model_predict.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_model_train.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_modules.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_pipeline_client.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_rag.py +0 -0
- {clarifai-11.6.2 → clarifai-11.6.4}/tests/test_search.py +0 -0
- {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.
|
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.
|
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=
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
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
|
412
|
-
"""Run the model as a local
|
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
|
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
|
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
|
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
|
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
|
-
|
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 =
|
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-
|
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
|
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=
|
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 =
|
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=
|
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 =
|
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
|
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 =
|
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 =
|
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
|
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
|
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
|
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": "
|
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 =
|
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',
|
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.
|
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
|
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
|
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
|
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.
|
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
|
-
|
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
|
-
|
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.
|
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
|
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.
|
{clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/dockerfile_template/Dockerfile.template
RENAMED
@@ -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
|
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
|
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.
|
{clarifai-11.6.2 → clarifai-11.6.4}/clarifai/runners/pipeline_steps/pipeline_step_builder.py
RENAMED
@@ -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
|
-
|
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
|
-
|
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
|
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
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
25
|
+
DEFAULT_LOCAL_RUNNER_MODEL_TYPE = "text-to-text"
|
26
26
|
|
27
|
-
|
27
|
+
DEFAULT_LOCAL_RUNNER_COMPUTE_CLUSTER_CONFIG = {
|
28
28
|
"compute_cluster": {
|
29
|
-
"id":
|
30
|
-
"description": "Default Local
|
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
|
-
|
40
|
+
DEFAULT_LOCAL_RUNNER_NODEPOOL_CONFIG = {
|
41
41
|
"nodepool": {
|
42
|
-
"id":
|
43
|
-
"description": "Default Local
|
42
|
+
"id": DEFAULT_LOCAL_RUNNER_NODEPOOL_ID,
|
43
|
+
"description": "Default Local Runner Nodepool",
|
44
44
|
"compute_cluster": {
|
45
|
-
"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
|
54
|
-
"num_accelerators": 0, # TODO if we need accelerator detection for local
|
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.
|
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.
|
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 +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
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{clarifai-11.6.2 → clarifai-11.6.4}/clarifai/datasets/upload/loaders/imagenet_classification.py
RENAMED
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
|
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
|
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
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|