clarifai 10.8.5__tar.gz → 10.8.6__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-10.8.5/clarifai.egg-info → clarifai-10.8.6}/PKG-INFO +1 -1
- clarifai-10.8.6/clarifai/__init__.py +1 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/model_upload.py +67 -31
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/loader.py +0 -1
- {clarifai-10.8.5 → clarifai-10.8.6/clarifai.egg-info}/PKG-INFO +1 -1
- clarifai-10.8.5/clarifai/__init__.py +0 -1
- {clarifai-10.8.5 → clarifai-10.8.6}/LICENSE +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/MANIFEST.in +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/README.md +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/cli.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/app.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/auth/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/auth/helper.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/auth/register.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/auth/stub.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/base.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/dataset.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/input.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/lister.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/model.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/module.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/search.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/user.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/client/workflow.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/dataset.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/input.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/model.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/rag.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/search.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/constants/workflow.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/export/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/export/inputs_annotations.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/base.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/features.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/image.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/README.md +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/multimodal.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/text.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/datasets/upload/utils.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/errors.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/models/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/models/api.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/modules/README.md +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/modules/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/modules/css.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/modules/pages.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/modules/style.css +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/rag/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/rag/rag.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/rag/utils.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/dockerfile_template/Dockerfile.cpu.template +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/dockerfile_template/Dockerfile.cuda.template +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/base_typed_model.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/model_class.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/model_runner.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/models/model_servicer.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/server.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/data_handler.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/data_utils.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/logging.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/utils/url_fetcher.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/schema/search.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/urls/helper.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/constants.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/evaluation/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/evaluation/helpers.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/evaluation/main.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/logging.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/misc.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/utils/model_train.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/versions.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/workflows/__init__.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/workflows/export.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/workflows/utils.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai/workflows/validate.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai.egg-info/SOURCES.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai.egg-info/dependency_links.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai.egg-info/entry_points.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai.egg-info/requires.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/clarifai.egg-info/top_level.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/pyproject.toml +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/requirements.txt +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/setup.cfg +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/setup.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_app.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_auth.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_data_upload.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_eval.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_misc.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_model_predict.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_model_train.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_modules.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_rag.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_search.py +0 -0
- {clarifai-10.8.5 → clarifai-10.8.6}/tests/test_stub.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "10.8.6"
|
@@ -28,12 +28,11 @@ class ModelUploader:
|
|
28
28
|
]
|
29
29
|
|
30
30
|
def __init__(self, folder: str):
|
31
|
+
self._client = None
|
31
32
|
self.folder = self._validate_folder(folder)
|
32
33
|
self.config = self._load_config(os.path.join(self.folder, 'config.yaml'))
|
33
|
-
self.initialize_client()
|
34
34
|
self.model_proto = self._get_model_proto()
|
35
35
|
self.model_id = self.model_proto.id
|
36
|
-
self.user_app_id = self.client.user_app_id
|
37
36
|
self.inference_compute_info = self._get_inference_compute_info()
|
38
37
|
self.is_v3 = True # Do model build for v3
|
39
38
|
|
@@ -42,6 +41,8 @@ class ModelUploader:
|
|
42
41
|
if not folder.startswith("/"):
|
43
42
|
folder = os.path.join(os.getcwd(), folder)
|
44
43
|
print(f"Validating folder: {folder}")
|
44
|
+
if not os.path.exists(folder):
|
45
|
+
raise FileNotFoundError(f"Folder {folder} not found, please provide a valid folder path")
|
45
46
|
files = os.listdir(folder)
|
46
47
|
assert "requirements.txt" in files, "requirements.txt not found in the folder"
|
47
48
|
assert "config.yaml" in files, "config.yaml not found in the folder"
|
@@ -56,18 +57,21 @@ class ModelUploader:
|
|
56
57
|
config = yaml.safe_load(file)
|
57
58
|
return config
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
@property
|
61
|
+
def client(self):
|
62
|
+
if self._client is None:
|
63
|
+
assert "model" in self.config, "model info not found in the config file"
|
64
|
+
model = self.config.get('model')
|
65
|
+
assert "user_id" in model, "user_id not found in the config file"
|
66
|
+
assert "app_id" in model, "app_id not found in the config file"
|
67
|
+
user_id = model.get('user_id')
|
68
|
+
app_id = model.get('app_id')
|
66
69
|
|
67
|
-
|
70
|
+
base = os.environ.get('CLARIFAI_API_BASE', 'https://api-dev.clarifai.com')
|
68
71
|
|
69
|
-
|
70
|
-
|
72
|
+
self._client = BaseClient(user_id=user_id, app_id=app_id, base=base)
|
73
|
+
print(f"Client initialized for user {user_id} and app {app_id}")
|
74
|
+
return self._client
|
71
75
|
|
72
76
|
def _get_model_proto(self):
|
73
77
|
assert "model" in self.config, "model info not found in the config file"
|
@@ -127,7 +131,14 @@ class ModelUploader:
|
|
127
131
|
|
128
132
|
# Get the Python version from the config file
|
129
133
|
build_info = self.config.get('build_info', {})
|
130
|
-
|
134
|
+
if 'python_version' in build_info:
|
135
|
+
python_version = build_info['python_version']
|
136
|
+
print(f"Using Python version {python_version} from the config file to build the Dockerfile")
|
137
|
+
else:
|
138
|
+
print(
|
139
|
+
f"Python version not found in the config file, using default Python version: {self.DEFAULT_PYTHON_VERSION}"
|
140
|
+
)
|
141
|
+
python_version = self.DEFAULT_PYTHON_VERSION
|
131
142
|
|
132
143
|
# Replace placeholders with actual values
|
133
144
|
dockerfile_content = dockerfile_template.safe_substitute(
|
@@ -153,7 +164,12 @@ class ModelUploader:
|
|
153
164
|
assert "repo_id" in self.config.get("checkpoints"), "No repo_id specified in the config file"
|
154
165
|
repo_id = self.config.get("checkpoints").get("repo_id")
|
155
166
|
|
156
|
-
|
167
|
+
# prefer env var for HF_TOKEN but if not provided then use the one from config.yaml if any.
|
168
|
+
if 'HF_TOKEN' in os.environ:
|
169
|
+
hf_token = os.environ['HF_TOKEN']
|
170
|
+
else:
|
171
|
+
hf_token = self.config.get("checkpoints").get("hf_token", None)
|
172
|
+
assert hf_token != 'hf_token', "The default 'hf_token' is not valid. Please provide a valid token or leave that field out of config.yaml if not needed."
|
157
173
|
loader = HuggingFaceLoarder(repo_id=repo_id, token=hf_token)
|
158
174
|
|
159
175
|
checkpoint_path = os.path.join(self.folder, '1', 'checkpoints')
|
@@ -230,6 +246,7 @@ class ModelUploader:
|
|
230
246
|
print(
|
231
247
|
f"Status: {response.status.description}, "
|
232
248
|
f"Progress: {percent_completed}% - {details} ",
|
249
|
+
f"request_id: {response.status.req_id}",
|
233
250
|
end='\r',
|
234
251
|
flush=True)
|
235
252
|
print()
|
@@ -247,24 +264,35 @@ class ModelUploader:
|
|
247
264
|
file_size = os.path.getsize(file_path)
|
248
265
|
chunk_size = int(127 * 1024 * 1024) # 127MB chunk size
|
249
266
|
num_chunks = (file_size // chunk_size) + 1
|
250
|
-
|
267
|
+
print("Uploading file...")
|
268
|
+
print("File size: ", file_size)
|
269
|
+
print("Chunk size: ", chunk_size)
|
270
|
+
print("Number of chunks: ", num_chunks)
|
251
271
|
read_so_far = 0
|
252
272
|
for part_id in range(num_chunks):
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
273
|
+
try:
|
274
|
+
chunk_size = min(chunk_size, file_size - read_so_far)
|
275
|
+
chunk = f.read(chunk_size)
|
276
|
+
if not chunk:
|
277
|
+
break
|
278
|
+
read_so_far += len(chunk)
|
279
|
+
yield service_pb2.PostModelVersionsUploadRequest(
|
280
|
+
content_part=resources_pb2.UploadContentPart(
|
281
|
+
data=chunk,
|
282
|
+
part_number=part_id + 1,
|
283
|
+
range_start=read_so_far,
|
284
|
+
))
|
285
|
+
except Exception as e:
|
286
|
+
print(f"\nError uploading file: {e}")
|
287
|
+
break
|
288
|
+
|
289
|
+
if read_so_far == file_size:
|
290
|
+
print("\nUpload complete!, waiting for model build...")
|
262
291
|
|
263
292
|
def init_upload_model_version(self, model_version, file_path):
|
264
293
|
file_size = os.path.getsize(file_path)
|
265
|
-
print(
|
266
|
-
|
267
|
-
)
|
294
|
+
print(f"Uploading model version '{model_version.id}' of model {self.model_proto.id}")
|
295
|
+
print(f"Using file '{os.path.basename(file_path)}' of size: {file_size} bytes")
|
268
296
|
return service_pb2.PostModelVersionsUploadRequest(
|
269
297
|
upload_config=service_pb2.PostModelVersionsUploadConfig(
|
270
298
|
user_app_id=self.client.user_app_id,
|
@@ -290,7 +318,7 @@ class ModelUploader:
|
|
290
318
|
elif status_code == status_code_pb2.MODEL_TRAINED:
|
291
319
|
print("\nModel build complete!")
|
292
320
|
print(
|
293
|
-
f"Check out the model at https://clarifai.com/{self.user_app_id.user_id}/apps/{self.user_app_id.app_id}/models/{self.model_id}/versions/{model_version_id}"
|
321
|
+
f"Check out the model at https://clarifai.com/{self.client.user_app_id.user_id}/apps/{self.client.user_app_id.app_id}/models/{self.model_id}/versions/{model_version_id}"
|
294
322
|
)
|
295
323
|
break
|
296
324
|
else:
|
@@ -298,9 +326,10 @@ class ModelUploader:
|
|
298
326
|
break
|
299
327
|
|
300
328
|
|
301
|
-
def main(folder):
|
329
|
+
def main(folder, download_checkpoints):
|
302
330
|
uploader = ModelUploader(folder)
|
303
|
-
|
331
|
+
if download_checkpoints:
|
332
|
+
uploader.download_checkpoints()
|
304
333
|
uploader.create_dockerfile()
|
305
334
|
input("Press Enter to continue...")
|
306
335
|
uploader.upload_model_version()
|
@@ -310,6 +339,13 @@ if __name__ == "__main__":
|
|
310
339
|
parser = argparse.ArgumentParser()
|
311
340
|
parser.add_argument(
|
312
341
|
'--model_path', type=str, help='Path of the model folder to upload', required=True)
|
342
|
+
# flag to default to not download checkpoints
|
343
|
+
parser.add_argument(
|
344
|
+
'--download_checkpoints',
|
345
|
+
action='store_true',
|
346
|
+
help=
|
347
|
+
'Flag to download checkpoints before uploading and including them in the tar file that is uploaded. Defaults to False, which will attempt to download them at docker build time.',
|
348
|
+
)
|
313
349
|
args = parser.parse_args()
|
314
350
|
|
315
|
-
main(args.model_path)
|
351
|
+
main(args.model_path, args.download_checkpoints)
|
@@ -57,7 +57,6 @@ class HuggingFaceLoarder:
|
|
57
57
|
def validate_download(self, checkpoint_path: str):
|
58
58
|
# check if model exists on HF
|
59
59
|
from huggingface_hub import list_repo_files
|
60
|
-
|
61
60
|
return (len(os.listdir(checkpoint_path)) >= len(list_repo_files(self.repo_id))) and len(
|
62
61
|
list_repo_files(self.repo_id)) > 0
|
63
62
|
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "10.8.5"
|
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-10.8.5 → clarifai-10.8.6}/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
|
{clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/dockerfile_template/Dockerfile.cpu.template
RENAMED
File without changes
|
{clarifai-10.8.5 → clarifai-10.8.6}/clarifai/runners/dockerfile_template/Dockerfile.cuda.template
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
|