clarifai 11.0.6rc4__py3-none-any.whl → 11.0.7__py3-none-any.whl
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/__init__.py +1 -1
- clarifai/cli/__main__.py +4 -0
- clarifai/cli/base.py +2 -1
- clarifai/cli/model.py +10 -2
- clarifai/runners/dockerfile_template/Dockerfile.template +25 -11
- clarifai/runners/models/model_run_locally.py +48 -18
- clarifai/runners/models/model_upload.py +51 -27
- clarifai/runners/utils/const.py +4 -18
- clarifai/runners/utils/loader.py +5 -3
- clarifai/utils/cli.py +1 -1
- clarifai/utils/logging.py +1 -1
- {clarifai-11.0.6rc4.dist-info → clarifai-11.0.7.dist-info}/METADATA +25 -16
- clarifai-11.0.7.dist-info/RECORD +101 -0
- {clarifai-11.0.6rc4.dist-info → clarifai-11.0.7.dist-info}/WHEEL +1 -1
- clarifai/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/__pycache__/errors.cpython-310.pyc +0 -0
- clarifai/__pycache__/versions.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/compute_cluster.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/deployment.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/model.cpython-310.pyc +0 -0
- clarifai/cli/__pycache__/nodepool.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/app.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/input.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/lister.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/model.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/module.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/runner.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/user.cpython-310.pyc +0 -0
- clarifai/client/__pycache__/workflow.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/register.cpython-310.pyc +0 -0
- clarifai/client/auth/__pycache__/stub.cpython-310.pyc +0 -0
- clarifai/constants/__pycache__/dataset.cpython-310.pyc +0 -0
- clarifai/constants/__pycache__/model.cpython-310.pyc +0 -0
- clarifai/constants/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/datasets/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/export/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/export/__pycache__/inputs_annotations.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/features.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/image.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/text.cpython-310.pyc +0 -0
- clarifai/datasets/upload/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/models/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/README.md +0 -158
- clarifai/models/model_serving/__init__.py +0 -14
- clarifai/models/model_serving/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/__pycache__/constants.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__init__.py +0 -12
- clarifai/models/model_serving/cli/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/_utils.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/build.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/__pycache__/create.cpython-310.pyc +0 -0
- clarifai/models/model_serving/cli/_utils.py +0 -53
- clarifai/models/model_serving/cli/base.py +0 -14
- clarifai/models/model_serving/cli/build.py +0 -79
- clarifai/models/model_serving/cli/clarifai_clis.py +0 -33
- clarifai/models/model_serving/cli/create.py +0 -171
- clarifai/models/model_serving/cli/example_cli.py +0 -34
- clarifai/models/model_serving/cli/login.py +0 -26
- clarifai/models/model_serving/cli/upload.py +0 -183
- clarifai/models/model_serving/constants.py +0 -21
- clarifai/models/model_serving/docs/cli.md +0 -161
- clarifai/models/model_serving/docs/concepts.md +0 -229
- clarifai/models/model_serving/docs/dependencies.md +0 -11
- clarifai/models/model_serving/docs/inference_parameters.md +0 -139
- clarifai/models/model_serving/docs/model_types.md +0 -19
- clarifai/models/model_serving/model_config/__init__.py +0 -16
- clarifai/models/model_serving/model_config/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/base.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/config.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/inference_parameter.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/__pycache__/output.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/base.py +0 -369
- clarifai/models/model_serving/model_config/config.py +0 -312
- clarifai/models/model_serving/model_config/inference_parameter.py +0 -129
- clarifai/models/model_serving/model_config/model_types_config/multimodal-embedder.yaml +0 -25
- clarifai/models/model_serving/model_config/model_types_config/text-classifier.yaml +0 -19
- clarifai/models/model_serving/model_config/model_types_config/text-embedder.yaml +0 -20
- clarifai/models/model_serving/model_config/model_types_config/text-to-image.yaml +0 -19
- clarifai/models/model_serving/model_config/model_types_config/text-to-text.yaml +0 -19
- clarifai/models/model_serving/model_config/model_types_config/visual-classifier.yaml +0 -22
- clarifai/models/model_serving/model_config/model_types_config/visual-detector.yaml +0 -32
- clarifai/models/model_serving/model_config/model_types_config/visual-embedder.yaml +0 -19
- clarifai/models/model_serving/model_config/model_types_config/visual-segmenter.yaml +0 -19
- clarifai/models/model_serving/model_config/output.py +0 -133
- clarifai/models/model_serving/model_config/triton/__init__.py +0 -14
- clarifai/models/model_serving/model_config/triton/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/serializer.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/triton_config.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/__pycache__/wrappers.cpython-310.pyc +0 -0
- clarifai/models/model_serving/model_config/triton/serializer.py +0 -136
- clarifai/models/model_serving/model_config/triton/triton_config.py +0 -182
- clarifai/models/model_serving/model_config/triton/wrappers.py +0 -281
- clarifai/models/model_serving/repo_build/__init__.py +0 -14
- clarifai/models/model_serving/repo_build/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/models/model_serving/repo_build/__pycache__/build.cpython-310.pyc +0 -0
- clarifai/models/model_serving/repo_build/build.py +0 -198
- clarifai/models/model_serving/repo_build/static_files/__pycache__/base_test.cpython-310-pytest-7.2.0.pyc +0 -0
- clarifai/models/model_serving/repo_build/static_files/_requirements.txt +0 -2
- clarifai/models/model_serving/repo_build/static_files/base_test.py +0 -169
- clarifai/models/model_serving/repo_build/static_files/inference.py +0 -26
- clarifai/models/model_serving/repo_build/static_files/sample_clarifai_config.yaml +0 -25
- clarifai/models/model_serving/repo_build/static_files/test.py +0 -40
- clarifai/models/model_serving/repo_build/static_files/triton/model.py +0 -75
- clarifai/models/model_serving/utils.py +0 -31
- clarifai/rag/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/rag/__pycache__/rag.cpython-310.pyc +0 -0
- clarifai/rag/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/runners/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/runners/__pycache__/server.cpython-310.pyc +0 -0
- clarifai/runners/deepgram_live_transcribe.py +0 -98
- clarifai/runners/deepgram_live_transcribe.py~ +0 -98
- clarifai/runners/deepgram_runner.py +0 -131
- clarifai/runners/deepgram_runner.py~ +0 -130
- clarifai/runners/dockerfile_template/Dockerfile.cpu.template +0 -31
- clarifai/runners/dockerfile_template/Dockerfile.cuda.template +0 -79
- clarifai/runners/example_llama2.py~ +0 -72
- clarifai/runners/matt_example.py +0 -89
- clarifai/runners/matt_example.py~ +0 -87
- clarifai/runners/matt_llm_example.py +0 -129
- clarifai/runners/matt_llm_example.py~ +0 -128
- clarifai/runners/models/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/model_class.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/model_run_locally.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/model_servicer.cpython-310.pyc +0 -0
- clarifai/runners/models/__pycache__/model_upload.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/const.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/data_utils.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/loader.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/logging.cpython-310.pyc +0 -0
- clarifai/runners/utils/__pycache__/url_fetcher.cpython-310.pyc +0 -0
- clarifai/runners/utils/logging.py +0 -6
- clarifai/schema/__pycache__/search.cpython-310.pyc +0 -0
- clarifai/urls/__pycache__/helper.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/logging.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/misc.cpython-310.pyc +0 -0
- clarifai/utils/__pycache__/model_train.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/__init__.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/export.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/utils.cpython-310.pyc +0 -0
- clarifai/workflows/__pycache__/validate.cpython-310.pyc +0 -0
- clarifai-11.0.6rc4.dist-info/RECORD +0 -242
- {clarifai-11.0.6rc4.dist-info → clarifai-11.0.7.dist-info}/LICENSE +0 -0
- {clarifai-11.0.6rc4.dist-info → clarifai-11.0.7.dist-info}/entry_points.txt +0 -0
- {clarifai-11.0.6rc4.dist-info → clarifai-11.0.7.dist-info}/top_level.txt +0 -0
@@ -1,171 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
import shutil
|
3
|
-
from argparse import Namespace, _SubParsersAction
|
4
|
-
from typing import List
|
5
|
-
|
6
|
-
from InquirerPy import prompt
|
7
|
-
|
8
|
-
from ..model_config import MODEL_TYPES
|
9
|
-
from ..repo_build import RepositoryBuilder
|
10
|
-
from ._utils import list_model_upload_examples
|
11
|
-
from .base import BaseClarifaiCli
|
12
|
-
|
13
|
-
|
14
|
-
class CreateCli(BaseClarifaiCli):
|
15
|
-
|
16
|
-
@staticmethod
|
17
|
-
def register(parser: _SubParsersAction):
|
18
|
-
creator_parser = parser.add_parser("create", help="Create component of Clarifai platform")
|
19
|
-
sub_creator_parser = creator_parser.add_subparsers()
|
20
|
-
|
21
|
-
SubCreateModelCli.register(sub_creator_parser)
|
22
|
-
|
23
|
-
creator_parser.set_defaults(func=CreateCli)
|
24
|
-
|
25
|
-
|
26
|
-
class SubCreateModelCli(BaseClarifaiCli):
|
27
|
-
|
28
|
-
@staticmethod
|
29
|
-
def register(parser: _SubParsersAction):
|
30
|
-
model_parser = parser.add_parser("model")
|
31
|
-
model_parser.add_argument(
|
32
|
-
"--working-dir",
|
33
|
-
type=str,
|
34
|
-
required=True,
|
35
|
-
help="Path to your working dir. Create new dir if it does not exist")
|
36
|
-
model_parser.add_argument(
|
37
|
-
"--from-example",
|
38
|
-
required=False,
|
39
|
-
action="store_true",
|
40
|
-
help="Create repository from example")
|
41
|
-
model_parser.add_argument(
|
42
|
-
"--example-id",
|
43
|
-
required=False,
|
44
|
-
type=str,
|
45
|
-
help="Example id, run `clarifai example list` to list of examples")
|
46
|
-
|
47
|
-
model_parser.add_argument(
|
48
|
-
"--type",
|
49
|
-
type=str,
|
50
|
-
choices=MODEL_TYPES,
|
51
|
-
required=False,
|
52
|
-
help="Clarifai supported model types.")
|
53
|
-
model_parser.add_argument(
|
54
|
-
"--image-shape",
|
55
|
-
nargs='+',
|
56
|
-
type=int,
|
57
|
-
required=False,
|
58
|
-
help="H W dims for models with an image input type. H and W each have a max value of 1024",
|
59
|
-
default=[-1, -1])
|
60
|
-
model_parser.add_argument(
|
61
|
-
"--max-bs", type=int, default=1, required=False, help="Max batch size")
|
62
|
-
|
63
|
-
model_parser.add_argument(
|
64
|
-
"--overwrite", action="store_true", help="Overwrite working-dir if exists")
|
65
|
-
|
66
|
-
model_parser.set_defaults(func=SubCreateModelCli)
|
67
|
-
|
68
|
-
def __init__(self, args: Namespace) -> None:
|
69
|
-
self.working_dir: str = args.working_dir
|
70
|
-
self.from_example = args.from_example
|
71
|
-
self.example_id = args.example_id
|
72
|
-
self.overwrite = args.overwrite
|
73
|
-
|
74
|
-
if os.path.exists(self.working_dir):
|
75
|
-
if self.overwrite:
|
76
|
-
print(f"Overwrite {self.working_dir}")
|
77
|
-
else:
|
78
|
-
raise FileExistsError(
|
79
|
-
f"{self.working_dir} exists. If you want to overwrite it, please set `--overwrite` flag"
|
80
|
-
)
|
81
|
-
|
82
|
-
# prevent wrong args when creating from example
|
83
|
-
if not self.from_example:
|
84
|
-
self.image_shape: List[int] = args.image_shape
|
85
|
-
|
86
|
-
self.type: str = args.type
|
87
|
-
self.max_bs: int = args.max_bs
|
88
|
-
|
89
|
-
else:
|
90
|
-
if not self.example_id:
|
91
|
-
questions = [
|
92
|
-
{
|
93
|
-
"type": "list",
|
94
|
-
"message": "Select an example:",
|
95
|
-
"choices": list_model_upload_examples(),
|
96
|
-
},
|
97
|
-
]
|
98
|
-
result = prompt(questions)
|
99
|
-
self.example_id = result[0]
|
100
|
-
|
101
|
-
else:
|
102
|
-
available_examples = list(list_model_upload_examples().keys())
|
103
|
-
assert self.example_id in available_examples, f"Available examples are: {available_examples}, got {self.example_id}."
|
104
|
-
|
105
|
-
def run(self):
|
106
|
-
if self.from_example:
|
107
|
-
os.makedirs(self.working_dir, exist_ok=True)
|
108
|
-
model_repo, readme = list_model_upload_examples()[self.example_id]
|
109
|
-
shutil.copytree(model_repo, self.working_dir, dirs_exist_ok=True)
|
110
|
-
if readme:
|
111
|
-
shutil.copy(readme, os.path.join(self.working_dir, "readme.md"))
|
112
|
-
|
113
|
-
else:
|
114
|
-
RepositoryBuilder.init_repository(
|
115
|
-
self.type,
|
116
|
-
self.working_dir,
|
117
|
-
backend="triton",
|
118
|
-
max_batch_size=self.max_bs,
|
119
|
-
image_shape=self.image_shape)
|
120
|
-
|
121
|
-
from itertools import islice
|
122
|
-
from pathlib import Path
|
123
|
-
|
124
|
-
def tree(dir_path: Path,
|
125
|
-
level: int = -1,
|
126
|
-
limit_to_directories: bool = False,
|
127
|
-
length_limit: int = 1000):
|
128
|
-
# prefix components:
|
129
|
-
space = ' '
|
130
|
-
branch = '│ '
|
131
|
-
# pointers:
|
132
|
-
tee = '├── '
|
133
|
-
last = '└── '
|
134
|
-
"""Given a directory Path object print a visual tree structure"""
|
135
|
-
dir_path = Path(dir_path) # accept string coerceable to Path
|
136
|
-
files = 0
|
137
|
-
directories = 0
|
138
|
-
|
139
|
-
def inner(dir_path: Path, prefix: str = '', level=-1):
|
140
|
-
nonlocal files, directories
|
141
|
-
if not level:
|
142
|
-
return # 0, stop iterating
|
143
|
-
if limit_to_directories:
|
144
|
-
contents = [d for d in dir_path.iterdir() if d.is_dir()]
|
145
|
-
else:
|
146
|
-
contents = list(dir_path.iterdir())
|
147
|
-
pointers = [tee] * (len(contents) - 1) + [last]
|
148
|
-
for pointer, path in zip(pointers, contents):
|
149
|
-
if path.is_dir():
|
150
|
-
yield prefix + pointer + path.name
|
151
|
-
directories += 1
|
152
|
-
extension = branch if pointer == tee else space
|
153
|
-
yield from inner(path, prefix=prefix + extension, level=level - 1)
|
154
|
-
elif not limit_to_directories:
|
155
|
-
yield prefix + pointer + path.name
|
156
|
-
files += 1
|
157
|
-
|
158
|
-
print(dir_path.name)
|
159
|
-
iterator = inner(dir_path, level=level)
|
160
|
-
for line in islice(iterator, length_limit):
|
161
|
-
print(line)
|
162
|
-
if next(iterator, None):
|
163
|
-
print(f'... length_limit, {length_limit}, reached, counted:')
|
164
|
-
print(f'\n{directories} directories' + (f', {files} files' if files else ''))
|
165
|
-
|
166
|
-
print("-" * 75)
|
167
|
-
print(f"* Created repository at: {self.working_dir}")
|
168
|
-
tree(self.working_dir)
|
169
|
-
print()
|
170
|
-
print("* Please make sure your code is tested using `test.py` before uploading")
|
171
|
-
print("-" * 75)
|
@@ -1,34 +0,0 @@
|
|
1
|
-
from argparse import Namespace, _SubParsersAction
|
2
|
-
|
3
|
-
from ._utils import list_model_upload_examples
|
4
|
-
from .base import BaseClarifaiCli
|
5
|
-
|
6
|
-
|
7
|
-
class ExampleCli(BaseClarifaiCli):
|
8
|
-
|
9
|
-
@staticmethod
|
10
|
-
def register(parser: _SubParsersAction):
|
11
|
-
creator_parser = parser.add_parser("example", help="Download/List examples of model upload")
|
12
|
-
sub_creator_parser = creator_parser.add_subparsers()
|
13
|
-
|
14
|
-
SubListExampleCli.register(sub_creator_parser)
|
15
|
-
|
16
|
-
creator_parser.set_defaults(func=ExampleCli)
|
17
|
-
|
18
|
-
|
19
|
-
class SubListExampleCli(BaseClarifaiCli):
|
20
|
-
|
21
|
-
@staticmethod
|
22
|
-
def register(parser: _SubParsersAction):
|
23
|
-
_parser = parser.add_parser("list")
|
24
|
-
_parser.add_argument("--force-download", action="store_true", help="Force download examples")
|
25
|
-
_parser.set_defaults(func=SubListExampleCli)
|
26
|
-
|
27
|
-
def __init__(self, args: Namespace) -> None:
|
28
|
-
self.force_download = args.force_download
|
29
|
-
|
30
|
-
def run(self):
|
31
|
-
_list = list_model_upload_examples(self.force_download)
|
32
|
-
print(f"Found {len(_list)} examples")
|
33
|
-
for each in _list:
|
34
|
-
print(f" * {each}")
|
@@ -1,26 +0,0 @@
|
|
1
|
-
import argparse
|
2
|
-
|
3
|
-
from clarifai.models.model_serving.constants import CLARIFAI_PAT_PATH
|
4
|
-
from ..utils import _persist_pat
|
5
|
-
from .base import BaseClarifaiCli
|
6
|
-
|
7
|
-
|
8
|
-
class LoginCli(BaseClarifaiCli):
|
9
|
-
|
10
|
-
@staticmethod
|
11
|
-
def register(parser: argparse._SubParsersAction):
|
12
|
-
upload_parser = parser.add_parser("login", help="Login to Clarifai and save PAT locally")
|
13
|
-
upload_parser.set_defaults(func=LoginCli)
|
14
|
-
|
15
|
-
def __init__(self, args: argparse.Namespace) -> None:
|
16
|
-
pass
|
17
|
-
|
18
|
-
def _parse_config(self):
|
19
|
-
# do something with self.config_path
|
20
|
-
raise NotImplementedError()
|
21
|
-
|
22
|
-
def run(self):
|
23
|
-
msg = "Get your PAT from https://clarifai.com/settings/security and pass it here: "
|
24
|
-
_pat = input(msg)
|
25
|
-
_persist_pat(_pat)
|
26
|
-
print(f"Your PAT is saved at {CLARIFAI_PAT_PATH}")
|
@@ -1,183 +0,0 @@
|
|
1
|
-
# Copyright 2023 Clarifai, Inc.
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
3
|
-
# you may not use this file except in compliance with the License.
|
4
|
-
# You may obtain a copy of the License at
|
5
|
-
#
|
6
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
7
|
-
#
|
8
|
-
# Unless required by applicable law or agreed to in writing, software
|
9
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
10
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
11
|
-
# See the License for the specific language governing permissions and
|
12
|
-
# limitations under the License.
|
13
|
-
"""Commandline interface for model upload utils."""
|
14
|
-
import argparse
|
15
|
-
import os
|
16
|
-
import subprocess
|
17
|
-
|
18
|
-
from clarifai.models.model_serving.model_config import get_model_config, load_user_config
|
19
|
-
from clarifai.models.model_serving.model_config.inference_parameter import InferParamManager
|
20
|
-
|
21
|
-
from ..constants import BUILT_MODEL_EXT
|
22
|
-
from ..utils import login
|
23
|
-
from .base import BaseClarifaiCli
|
24
|
-
|
25
|
-
|
26
|
-
class UploadCli(BaseClarifaiCli):
|
27
|
-
|
28
|
-
@staticmethod
|
29
|
-
def register(parser: argparse._SubParsersAction):
|
30
|
-
creator_parser = parser.add_parser("upload", help="Upload component to Clarifai platform")
|
31
|
-
sub_creator_parser = creator_parser.add_subparsers()
|
32
|
-
|
33
|
-
UploadModelSubCli.register(sub_creator_parser)
|
34
|
-
|
35
|
-
creator_parser.set_defaults(func=UploadCli)
|
36
|
-
|
37
|
-
|
38
|
-
class UploadModelSubCli(BaseClarifaiCli):
|
39
|
-
|
40
|
-
@staticmethod
|
41
|
-
def register(parser: argparse._SubParsersAction):
|
42
|
-
upload_parser = parser.add_parser("model", help="Upload Clarifai model")
|
43
|
-
upload_parser.add_argument(
|
44
|
-
"path",
|
45
|
-
type=str,
|
46
|
-
nargs='?',
|
47
|
-
help=
|
48
|
-
"Path to working dir to get clarifai_config.yaml or path to yaml. Default is current directory",
|
49
|
-
default=".")
|
50
|
-
upload_parser.add_argument(
|
51
|
-
"--url", type=str, required=False, help="Direct download url of zip file", default=None)
|
52
|
-
upload_parser.add_argument(
|
53
|
-
"--file", type=str, required=False, help="Local built file", default=None)
|
54
|
-
upload_parser.add_argument("--id", type=str, required=False, help="Model ID")
|
55
|
-
upload_parser.add_argument(
|
56
|
-
"--user-app",
|
57
|
-
type=str,
|
58
|
-
required=False,
|
59
|
-
help="User ID and App ID separated by '/', e.g., <user_id>/<app_id>")
|
60
|
-
upload_parser.add_argument(
|
61
|
-
"--no-test",
|
62
|
-
action="store_true",
|
63
|
-
help="Trigger this flag to skip testing before uploading")
|
64
|
-
upload_parser.add_argument(
|
65
|
-
"--no-resume",
|
66
|
-
action="store_true",
|
67
|
-
help="Trigger this flag to not resume uploading local file")
|
68
|
-
upload_parser.add_argument(
|
69
|
-
"--update-version",
|
70
|
-
action="store_true",
|
71
|
-
required=False,
|
72
|
-
help="Update exist model with new version")
|
73
|
-
|
74
|
-
upload_parser.set_defaults(func=UploadModelSubCli)
|
75
|
-
|
76
|
-
def __init__(self, args: argparse.Namespace) -> None:
|
77
|
-
self.no_test = args.no_test
|
78
|
-
self.no_resume = args.no_resume
|
79
|
-
|
80
|
-
working_dir_or_config = args.path
|
81
|
-
# if input a config file, then not running test
|
82
|
-
if working_dir_or_config.endswith(".yaml"):
|
83
|
-
# to folder
|
84
|
-
working_dir_or_config = os.path.split(working_dir_or_config)[0]
|
85
|
-
config_yaml_path = working_dir_or_config
|
86
|
-
self.test_path = None
|
87
|
-
self.no_test = True
|
88
|
-
# if it is a directory - working dir then it must contain config and test
|
89
|
-
else:
|
90
|
-
config_yaml_path = os.path.join(working_dir_or_config, "clarifai_config.yaml")
|
91
|
-
self.test_path = os.path.join(working_dir_or_config, "test.py")
|
92
|
-
|
93
|
-
assert os.path.exists(config_yaml_path), FileNotFoundError(
|
94
|
-
f"`{config_yaml_path}` does not exist")
|
95
|
-
self.config = load_user_config(cfg_path=config_yaml_path)
|
96
|
-
|
97
|
-
self.file = args.file
|
98
|
-
self.url = args.url
|
99
|
-
if self.file:
|
100
|
-
assert not self.url, ValueError("Expected either file or url, not both.")
|
101
|
-
assert os.path.exists(self.file), FileNotFoundError
|
102
|
-
elif self.url:
|
103
|
-
if len(self.url.split(":")) == 1:
|
104
|
-
# if URL has no scheme, default to https
|
105
|
-
self.url = f"https://{self.url}"
|
106
|
-
assert self.url.startswith("http") or self.url.startswith("https") or self.url.startswith(
|
107
|
-
"s3"
|
108
|
-
), f"Invalid URL scheme, supported schemes are 'http', 'https', or 's3'. Got {self.url}"
|
109
|
-
self.file = None
|
110
|
-
else:
|
111
|
-
for _fname in os.listdir(working_dir_or_config):
|
112
|
-
if _fname.endswith(BUILT_MODEL_EXT):
|
113
|
-
self.file = os.path.join(working_dir_or_config, _fname)
|
114
|
-
break
|
115
|
-
assert self.file, ValueError(
|
116
|
-
f"Not using url/file but also not found built file with extension {BUILT_MODEL_EXT}")
|
117
|
-
|
118
|
-
self.user_id, self.app_id = "", ""
|
119
|
-
user_app = args.user_app
|
120
|
-
self.url: str = args.url
|
121
|
-
self.update_version = args.update_version
|
122
|
-
|
123
|
-
clarifai_cfg = self.config.clarifai_model
|
124
|
-
self.url: str = args.url
|
125
|
-
self.id = args.id or clarifai_cfg.clarifai_model_id
|
126
|
-
self.type = clarifai_cfg.type
|
127
|
-
self.desc = clarifai_cfg.description
|
128
|
-
self.infer_param = clarifai_cfg.inference_parameters
|
129
|
-
user_app = user_app or clarifai_cfg.clarifai_user_app_id
|
130
|
-
|
131
|
-
if user_app:
|
132
|
-
user_app = user_app.split('/')
|
133
|
-
assert len(
|
134
|
-
user_app
|
135
|
-
) == 2, f"id must be combination of user_id and app_id separated by `/`, e.g. <user_id>/<app_id>. Got {args.id}"
|
136
|
-
self.user_id, self.app_id = user_app
|
137
|
-
|
138
|
-
login()
|
139
|
-
|
140
|
-
def run(self):
|
141
|
-
from clarifai.client import App, Model
|
142
|
-
|
143
|
-
# Run test before uploading
|
144
|
-
if not self.no_test:
|
145
|
-
assert os.path.exists(self.test_path), FileNotFoundError(f"Not found {self.test_path}")
|
146
|
-
result = subprocess.run(f"pytest -s --log-level=INFO {self.test_path}", shell=True)
|
147
|
-
assert result.returncode == 0, "Test has failed. Please make sure no error exists in your code."
|
148
|
-
|
149
|
-
clarifai_key_map = get_model_config(model_type=self.type).clarifai_model.field_maps
|
150
|
-
# inference parameters
|
151
|
-
inference_parameters = None
|
152
|
-
if isinstance(self.infer_param, str) and os.path.isfile(self.infer_param):
|
153
|
-
inference_parameters = InferParamManager(json_path=self.infer_param).get_list_params()
|
154
|
-
inputs = clarifai_key_map.input_fields_map
|
155
|
-
outputs = clarifai_key_map.output_fields_map
|
156
|
-
|
157
|
-
# if updating new version of existing model
|
158
|
-
def update_version():
|
159
|
-
model = Model(model_id=self.id, app_id=self.app_id)
|
160
|
-
if self.url:
|
161
|
-
model.create_version_by_url(
|
162
|
-
url=self.url,
|
163
|
-
input_field_maps=inputs,
|
164
|
-
output_field_maps=outputs,
|
165
|
-
inference_parameter_configs=inference_parameters,
|
166
|
-
description=self.desc)
|
167
|
-
elif self.file:
|
168
|
-
model.create_version_by_file(
|
169
|
-
file_path=self.file,
|
170
|
-
input_field_maps=inputs,
|
171
|
-
output_field_maps=outputs,
|
172
|
-
inference_parameter_configs=inference_parameters,
|
173
|
-
no_resume=self.no_resume,
|
174
|
-
description=self.desc)
|
175
|
-
else:
|
176
|
-
raise ValueError
|
177
|
-
|
178
|
-
if self.update_version:
|
179
|
-
update_version()
|
180
|
-
else:
|
181
|
-
# creating new model
|
182
|
-
_ = App(app_id=self.app_id).create_model(self.id, model_type_id=self.type)
|
183
|
-
update_version()
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
|
3
|
-
MAX_HW_DIM = 1024
|
4
|
-
IMAGE_TENSOR_NAME = "image"
|
5
|
-
TEXT_TENSOR_NAME = "text"
|
6
|
-
|
7
|
-
BUILT_MODEL_EXT = ".clarifai"
|
8
|
-
|
9
|
-
USER_CACHE_DIR = os.path.join(os.path.expanduser("~"), ".cache")
|
10
|
-
CLARIFAI_HOME = os.path.expanduser(
|
11
|
-
os.getenv(
|
12
|
-
"CLARIFAI_HOME",
|
13
|
-
os.path.join(os.getenv("XDG_CACHE_HOME", USER_CACHE_DIR), "clarifai"),
|
14
|
-
))
|
15
|
-
os.makedirs(CLARIFAI_HOME, exist_ok=True)
|
16
|
-
CLARIFAI_PAT_PATH = os.path.join(CLARIFAI_HOME, "pat")
|
17
|
-
|
18
|
-
CLARIFAI_EXAMPLES_REPO = "https://github.com/Clarifai/examples.git"
|
19
|
-
repo_name = CLARIFAI_EXAMPLES_REPO.split("/")[-1].replace(".git", "")
|
20
|
-
CLARIFAI_EXAMPLES_REPO_PATH = os.path.join(CLARIFAI_HOME, repo_name)
|
21
|
-
MODEL_UPLOAD_EXAMPLE_FOLDER = "model_upload"
|
@@ -1,161 +0,0 @@
|
|
1
|
-
# CLI helpers
|
2
|
-
|
3
|
-
Supported cli:
|
4
|
-
|
5
|
-
```bash
|
6
|
-
$ clarifai -h
|
7
|
-
upload Upload component to Clarifai platform
|
8
|
-
create Create component of Clarifai platform
|
9
|
-
login Login to Clarifai and save PAT locally
|
10
|
-
example Download/List examples of model upload
|
11
|
-
build Build clarifai model for uploading
|
12
|
-
```
|
13
|
-
|
14
|
-
1. Login
|
15
|
-
|
16
|
-
```bash
|
17
|
-
$ clarifai login
|
18
|
-
Get your PAT from https://clarifai.com/settings/security and pass it here: <your pat>
|
19
|
-
```
|
20
|
-
|
21
|
-
2. Create model repository
|
22
|
-
|
23
|
-
Initialize template for specify model type in provided directory
|
24
|
-
|
25
|
-
* `From scratch`:
|
26
|
-
|
27
|
-
```bash
|
28
|
-
$ clarifai create model --type <model-type> --working-dir <your_working_dir>
|
29
|
-
```
|
30
|
-
|
31
|
-
* `From example`:
|
32
|
-
|
33
|
-
```bash
|
34
|
-
$ clarifai create model --from-example --working-dir <your_working_dir>
|
35
|
-
? Select an example:
|
36
|
-
❯ multimodal_embedder/clip
|
37
|
-
text_classifier/xlm-roberta
|
38
|
-
text_embedder/instructor-xl
|
39
|
-
...
|
40
|
-
```
|
41
|
-
|
42
|
-
Then will see below output
|
43
|
-
|
44
|
-
```bash
|
45
|
-
---------------------------------------------------------------------------
|
46
|
-
* Created repository at: ./<your_working_dir>
|
47
|
-
<your_working_dir>
|
48
|
-
├── clarifai_config.yaml
|
49
|
-
├── inference.py
|
50
|
-
├── requirements.txt
|
51
|
-
└── test.py
|
52
|
-
|
53
|
-
0 directories, 4 files
|
54
|
-
|
55
|
-
* Please make sure your code is tested using `test.py` before uploading
|
56
|
-
---------------------------------------------------------------------------
|
57
|
-
```
|
58
|
-
|
59
|
-
> NOTE: if working-dir exists, need to set --overwrite flag otherwise an error arises
|
60
|
-
|
61
|
-
Full arguments
|
62
|
-
|
63
|
-
```bash
|
64
|
-
$ clarifai create model -h
|
65
|
-
--working-dir Path to your working dir. Create new dir if it does not exist
|
66
|
-
--from-example Create repository from example
|
67
|
-
--example-id Example id, run `clarifai example list` to list of examples
|
68
|
-
--type Clarifai supported model types.
|
69
|
-
--image-shape list of H W dims for models with an image input type. H and W each have a max value of 1024
|
70
|
-
--max-bs Max batch size
|
71
|
-
--overwrite Overwrite working-dir if exists
|
72
|
-
```
|
73
|
-
|
74
|
-
3. See available examples
|
75
|
-
|
76
|
-
```bash
|
77
|
-
$ clarifai example list
|
78
|
-
Found 11 examples
|
79
|
-
* multimodal_embedder/clip
|
80
|
-
* text_classifier/xlm-roberta
|
81
|
-
* text_embedder/instructor-xl
|
82
|
-
....
|
83
|
-
```
|
84
|
-
|
85
|
-
4. Build
|
86
|
-
|
87
|
-
This step will run `test.py` in provided working dir as default before building
|
88
|
-
|
89
|
-
```
|
90
|
-
$ clarifai build model <your_working_dir> --name model-name
|
91
|
-
$ tree <your_working_dir> -a
|
92
|
-
<your_working_dir>
|
93
|
-
├── .cache # (*)
|
94
|
-
│ ├── 1
|
95
|
-
│ │ ├── clarifai_config.yaml
|
96
|
-
│ │ ├── inference.py
|
97
|
-
│ │ ├── model.py
|
98
|
-
│ │ ├── test.py
|
99
|
-
│ │ └── ...
|
100
|
-
│ ├── config.pbtxt
|
101
|
-
│ └── requirements.txt
|
102
|
-
├── clarifai_config.yaml
|
103
|
-
├── inference.py
|
104
|
-
├── model-name.clarifai # (**)
|
105
|
-
├── requirements.txt
|
106
|
-
├── test.py
|
107
|
-
└── ...
|
108
|
-
```
|
109
|
-
|
110
|
-
**NOTE:**
|
111
|
-
|
112
|
-
(*): Build cache, user can simply ignore it.
|
113
|
-
|
114
|
-
(**): zipped of .cache
|
115
|
-
|
116
|
-
Full arguments
|
117
|
-
|
118
|
-
```bash
|
119
|
-
$ clarifai build model -h
|
120
|
-
positional arguments:
|
121
|
-
path Path to working directory, default is current directory
|
122
|
-
optional arguments:
|
123
|
-
--out-path Output path of built model
|
124
|
-
--name Name of built file, default is `clarifai_model_id` in config if set or`model`
|
125
|
-
--no-test Trigger this flag to skip testing before uploading
|
126
|
-
```
|
127
|
-
|
128
|
-
5. Upload
|
129
|
-
|
130
|
-
This step will execute test.py in the specified working directory by default before proceeding with the build. You can upload your built file directly from the working directory to the platform or upload it to cloud storage and provide the direct URL during the upload process.
|
131
|
-
|
132
|
-
Use the following command to upload your built file directly to the platform. It will upload the `*.clarifai` file. *Note*: Only support file size from 5MiB to 5GiB
|
133
|
-
|
134
|
-
```bash
|
135
|
-
$ clarifai upload model <your_working_dir>
|
136
|
-
```
|
137
|
-
|
138
|
-
or upload with direct download url
|
139
|
-
|
140
|
-
```bash
|
141
|
-
$ clarifai upload model <your_working_dir> --url <your url>
|
142
|
-
```
|
143
|
-
|
144
|
-
Full arguments
|
145
|
-
|
146
|
-
```bash
|
147
|
-
$ clarifai upload model -h
|
148
|
-
positional arguments:
|
149
|
-
path Path to working dir to get clarifai_config.yaml or path to yaml. Default is current directory
|
150
|
-
|
151
|
-
optional arguments:
|
152
|
-
-h, --help show this help message and exit
|
153
|
-
--url URL Direct download url of zip file
|
154
|
-
--file FILE Local built file
|
155
|
-
--id ID Model ID
|
156
|
-
--user-app USER_APP User ID and App ID separated by '/', e.g., <user_id>/<app_id>
|
157
|
-
--no-test Trigger this flag to skip testing before uploading
|
158
|
-
--no-resume Trigger this flag to not resume uploading local file
|
159
|
-
--update-version Update exist model with new version
|
160
|
-
|
161
|
-
```
|