clarifai 11.1.1__tar.gz → 11.1.2__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.1.1/clarifai.egg-info → clarifai-11.1.2}/PKG-INFO +4 -4
- clarifai-11.1.2/clarifai/__init__.py +1 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/dockerfile_template/Dockerfile.template +8 -8
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/model_builder.py +79 -53
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/const.py +4 -6
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/loader.py +12 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/logging.py +5 -1
- {clarifai-11.1.1 → clarifai-11.1.2/clarifai.egg-info}/PKG-INFO +4 -4
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai.egg-info/requires.txt +3 -3
- {clarifai-11.1.1 → clarifai-11.1.2}/requirements.txt +3 -3
- clarifai-11.1.1/clarifai/__init__.py +0 -1
- {clarifai-11.1.1 → clarifai-11.1.2}/LICENSE +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/MANIFEST.in +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/README.md +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/README.md +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/__main__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/base.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/compute_cluster.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/deployment.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/model.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli/nodepool.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/cli.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/app.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/auth/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/auth/helper.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/auth/register.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/auth/stub.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/base.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/compute_cluster.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/dataset.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/deployment.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/input.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/lister.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/model.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/module.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/nodepool.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/search.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/user.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/client/workflow.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/base.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/dataset.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/input.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/model.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/rag.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/search.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/constants/workflow.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/export/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/export/inputs_annotations.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/base.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/features.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/image.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/README.md +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/coco_captions.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/coco_detection.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/imagenet_classification.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/loaders/xview_detection.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/multimodal.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/text.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/datasets/upload/utils.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/errors.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/models/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/models/api.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/modules/README.md +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/modules/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/modules/css.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/modules/pages.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/modules/style.css +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/rag/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/rag/rag.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/rag/utils.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/base_typed_model.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/model_class.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/model_run_locally.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/model_runner.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/models/model_servicer.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/server.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/data_handler.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/data_utils.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/utils/url_fetcher.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/schema/search.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/urls/helper.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/cli.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/constants.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/evaluation/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/evaluation/helpers.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/evaluation/main.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/evaluation/testset_annotation_parser.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/misc.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/utils/model_train.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/versions.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/workflows/__init__.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/workflows/export.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/workflows/utils.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai/workflows/validate.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai.egg-info/SOURCES.txt +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai.egg-info/dependency_links.txt +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai.egg-info/entry_points.txt +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/clarifai.egg-info/top_level.txt +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/pyproject.toml +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/setup.cfg +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/setup.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_app.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_auth.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_data_upload.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_eval.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_misc.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_model_predict.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_model_train.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_modules.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_rag.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_search.py +0 -0
- {clarifai-11.1.1 → clarifai-11.1.2}/tests/test_stub.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.1.
|
3
|
+
Version: 11.1.2
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -29,9 +29,9 @@ Requires-Dist: PyYAML>=6.0.1
|
|
29
29
|
Requires-Dist: schema==0.7.5
|
30
30
|
Requires-Dist: Pillow>=9.5.0
|
31
31
|
Requires-Dist: tabulate>=0.9.0
|
32
|
-
Requires-Dist: fsspec
|
33
|
-
Requires-Dist: click
|
34
|
-
Requires-Dist: requests
|
32
|
+
Requires-Dist: fsspec>=2024.6.1
|
33
|
+
Requires-Dist: click>=8.1.7
|
34
|
+
Requires-Dist: requests>=2.32.3
|
35
35
|
Provides-Extra: all
|
36
36
|
Requires-Dist: pycocotools==2.0.6; extra == "all"
|
37
37
|
Dynamic: author
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "11.1.2"
|
{clarifai-11.1.1 → clarifai-11.1.2}/clarifai/runners/dockerfile_template/Dockerfile.template
RENAMED
@@ -1,14 +1,14 @@
|
|
1
|
-
# syntax=docker/dockerfile:1
|
1
|
+
# syntax=docker/dockerfile:1.13-labs
|
2
2
|
#############################
|
3
3
|
# User specific requirements installed in the pip_packages
|
4
4
|
#############################
|
5
|
-
FROM --platform=$TARGETPLATFORM ${
|
5
|
+
FROM --platform=$TARGETPLATFORM ${FINAL_IMAGE} as pip_packages
|
6
6
|
|
7
7
|
COPY --link requirements.txt /home/nonroot/requirements.txt
|
8
8
|
|
9
9
|
# Update clarifai package so we always have latest protocol to the API. Everything should land in /venv
|
10
|
-
RUN pip install --no-cache-dir -r /home/nonroot/requirements.txt
|
11
|
-
|
10
|
+
RUN ["pip", "install", "--no-cache-dir", "-r", "/home/nonroot/requirements.txt"]
|
11
|
+
RUN ["pip", "show", "clarifai"]
|
12
12
|
#############################
|
13
13
|
|
14
14
|
#############################
|
@@ -16,15 +16,15 @@ RUN pip install --no-cache-dir -r /home/nonroot/requirements.txt && \
|
|
16
16
|
#############################
|
17
17
|
FROM --platform=$TARGETPLATFORM ${DOWNLOADER_IMAGE} as downloader
|
18
18
|
|
19
|
-
# make sure we have the latest clarifai package.
|
20
|
-
RUN
|
19
|
+
# make sure we have the latest clarifai package. This version is filled in by SDK.
|
20
|
+
RUN ["pip", "install", "clarifai==${CLARIFAI_VERSION}"]
|
21
21
|
#####
|
22
22
|
|
23
23
|
|
24
24
|
#############################
|
25
25
|
# Final runtime image
|
26
26
|
#############################
|
27
|
-
FROM --platform=$TARGETPLATFORM ${
|
27
|
+
FROM --platform=$TARGETPLATFORM ${FINAL_IMAGE} as final
|
28
28
|
|
29
29
|
# Set the NUMBA cache dir to /tmp
|
30
30
|
# Set the TORCHINDUCTOR cache dir to /tmp
|
@@ -54,7 +54,7 @@ RUN ["python", "-m", "clarifai.cli", "model", "download-checkpoints", "--model_p
|
|
54
54
|
|
55
55
|
|
56
56
|
#####
|
57
|
-
# Copy the python packages from the
|
57
|
+
# Copy the python packages from the builder stage.
|
58
58
|
COPY --link=true --from=pip_packages /venv /venv
|
59
59
|
#####
|
60
60
|
|
@@ -16,12 +16,33 @@ from rich.markup import escape
|
|
16
16
|
|
17
17
|
from clarifai.client import BaseClient
|
18
18
|
from clarifai.runners.models.model_class import ModelClass
|
19
|
-
from clarifai.runners.utils.const import (
|
20
|
-
|
21
|
-
|
19
|
+
from clarifai.runners.utils.const import (AVAILABLE_PYTHON_IMAGES, AVAILABLE_TORCH_IMAGES,
|
20
|
+
CONCEPTS_REQUIRED_MODEL_TYPE, DEFAULT_PYTHON_VERSION,
|
21
|
+
PYTHON_BASE_IMAGE, TORCH_BASE_IMAGE)
|
22
22
|
from clarifai.runners.utils.loader import HuggingFaceLoader
|
23
23
|
from clarifai.urls.helper import ClarifaiUrlHelper
|
24
24
|
from clarifai.utils.logging import logger
|
25
|
+
from clarifai.versions import CLIENT_VERSION
|
26
|
+
|
27
|
+
# parse the user's requirements.txt to determine the proper base image to build on top of, based on the torch and other large dependencies and it's versions
|
28
|
+
# List of dependencies to look for
|
29
|
+
dependencies = [
|
30
|
+
'torch',
|
31
|
+
'clarifai',
|
32
|
+
]
|
33
|
+
# Escape dependency names for regex
|
34
|
+
dep_pattern = '|'.join(map(re.escape, dependencies))
|
35
|
+
# All possible version specifiers
|
36
|
+
version_specifiers = '==|>=|<=|!=|~=|>|<'
|
37
|
+
# Compile a regex pattern with verbose mode for readability
|
38
|
+
pattern = re.compile(r"""
|
39
|
+
^\s* # Start of line, optional whitespace
|
40
|
+
(?P<dependency>""" + dep_pattern + r""") # Dependency name
|
41
|
+
\s* # Optional whitespace
|
42
|
+
(?P<specifier>""" + version_specifiers + r""")? # Optional version specifier
|
43
|
+
\s* # Optional whitespace
|
44
|
+
(?P<version>[^\s;]+)? # Optional version (up to space or semicolon)
|
45
|
+
""", re.VERBOSE)
|
25
46
|
|
26
47
|
|
27
48
|
def _clear_line(n: int = 1) -> None:
|
@@ -290,32 +311,15 @@ class ModelBuilder:
|
|
290
311
|
return self.client.STUB.PostModels(request)
|
291
312
|
|
292
313
|
def _parse_requirements(self):
|
293
|
-
|
294
|
-
# List of dependencies to look for
|
295
|
-
dependencies = [
|
296
|
-
'torch',
|
297
|
-
]
|
298
|
-
# Escape dependency names for regex
|
299
|
-
dep_pattern = '|'.join(map(re.escape, dependencies))
|
300
|
-
# All possible version specifiers
|
301
|
-
version_specifiers = '==|>=|<=|!=|~=|>|<'
|
302
|
-
# Compile a regex pattern with verbose mode for readability
|
303
|
-
pattern = re.compile(r"""
|
304
|
-
^\s* # Start of line, optional whitespace
|
305
|
-
(?P<dependency>""" + dep_pattern + r""") # Dependency name
|
306
|
-
\s* # Optional whitespace
|
307
|
-
(?P<specifier>""" + version_specifiers + r""")? # Optional version specifier
|
308
|
-
\s* # Optional whitespace
|
309
|
-
(?P<version>[^\s;]+)? # Optional version (up to space or semicolon)
|
310
|
-
""", re.VERBOSE)
|
311
|
-
|
312
|
-
deendencies_version = {}
|
314
|
+
dependencies_version = {}
|
313
315
|
with open(os.path.join(self.folder, 'requirements.txt'), 'r') as file:
|
314
316
|
for line in file:
|
315
317
|
# Skip empty lines and comments
|
316
318
|
line = line.strip()
|
317
319
|
if not line or line.startswith('#'):
|
318
320
|
continue
|
321
|
+
# split on whitespace followed by #
|
322
|
+
line = re.split(r'\s+#', line)[0]
|
319
323
|
match = pattern.match(line)
|
320
324
|
if match:
|
321
325
|
dependency = match.group('dependency')
|
@@ -324,8 +328,8 @@ class ModelBuilder:
|
|
324
328
|
'whl/cpu') > 0: # Ignore torch-cpu whl files, use base mage.
|
325
329
|
continue
|
326
330
|
|
327
|
-
|
328
|
-
return
|
331
|
+
dependencies_version[dependency] = version if version else None
|
332
|
+
return dependencies_version
|
329
333
|
|
330
334
|
def create_dockerfile(self):
|
331
335
|
dockerfile_template = os.path.join(
|
@@ -357,9 +361,8 @@ class ModelBuilder:
|
|
357
361
|
python_version = DEFAULT_PYTHON_VERSION
|
358
362
|
|
359
363
|
# This is always the final image used for runtime.
|
360
|
-
|
361
|
-
|
362
|
-
downloader_image = PYTHON_BUILDER_IMAGE.format(python_version=python_version)
|
364
|
+
final_image = PYTHON_BASE_IMAGE.format(python_version=python_version)
|
365
|
+
downloader_image = PYTHON_BASE_IMAGE.format(python_version=python_version)
|
363
366
|
|
364
367
|
# Parse the requirements.txt file to determine the base image
|
365
368
|
dependencies = self._parse_requirements()
|
@@ -370,23 +373,45 @@ class ModelBuilder:
|
|
370
373
|
for image in sorted(AVAILABLE_TORCH_IMAGES, reverse=True):
|
371
374
|
if torch_version in image and f'py{python_version}' in image:
|
372
375
|
cuda_version = image.split('-')[-1].replace('cuda', '')
|
373
|
-
|
376
|
+
final_image = TORCH_BASE_IMAGE.format(
|
374
377
|
torch_version=torch_version,
|
375
378
|
python_version=python_version,
|
376
379
|
cuda_version=cuda_version,
|
377
380
|
)
|
378
|
-
# download_image = base_image
|
379
381
|
logger.info(f"Using Torch version {torch_version} base image to build the Docker image")
|
380
382
|
break
|
381
|
-
|
382
|
-
|
383
|
-
|
383
|
+
|
384
|
+
if 'clarifai' not in dependencies:
|
385
|
+
raise Exception(
|
386
|
+
f"clarifai not found in requirements.txt, please add clarifai to the requirements.txt file with a fixed version. Current version is clarifai=={CLIENT_VERSION}"
|
387
|
+
)
|
388
|
+
clarifai_version = dependencies['clarifai']
|
389
|
+
if not clarifai_version:
|
390
|
+
logger.warn(
|
391
|
+
f"clarifai version not found in requirements.txt, using the latest version {CLIENT_VERSION}"
|
392
|
+
)
|
393
|
+
clarifai_version = CLIENT_VERSION
|
394
|
+
lines = []
|
395
|
+
with open(os.path.join(self.folder, 'requirements.txt'), 'r') as file:
|
396
|
+
for line in file:
|
397
|
+
# if the line without whitespace is "clarifai"
|
398
|
+
# split on whitespace followed by #
|
399
|
+
matchline = re.split(r'\s+#', line)[0]
|
400
|
+
match = pattern.match(matchline)
|
401
|
+
if match and match.group('dependency') == "clarifai":
|
402
|
+
lines.append(line.replace("clarifai", f"clarifai=={CLIENT_VERSION}"))
|
403
|
+
else:
|
404
|
+
lines.append(line)
|
405
|
+
with open(os.path.join(self.folder, 'requirements.txt'), 'w') as file:
|
406
|
+
file.writelines(lines)
|
407
|
+
logger.warn(f"Updated requirements.txt to have clarifai=={CLIENT_VERSION}")
|
408
|
+
|
384
409
|
# Replace placeholders with actual values
|
385
410
|
dockerfile_content = dockerfile_template.safe_substitute(
|
386
411
|
name='main',
|
387
|
-
|
388
|
-
RUNTIME_IMAGE=runtime_image, # for runtime
|
412
|
+
FINAL_IMAGE=final_image, # for pip requirements
|
389
413
|
DOWNLOADER_IMAGE=downloader_image, # for downloading checkpoints
|
414
|
+
CLARIFAI_VERSION=clarifai_version, # for clarifai
|
390
415
|
)
|
391
416
|
|
392
417
|
# Write Dockerfile
|
@@ -477,7 +502,8 @@ class ModelBuilder:
|
|
477
502
|
for concept in labels:
|
478
503
|
concept_proto = json_format.ParseDict(concept, resources_pb2.Concept())
|
479
504
|
model_version_proto.output_info.data.concepts.append(concept_proto)
|
480
|
-
|
505
|
+
elif self.config.get("checkpoints") and HuggingFaceLoader.validate_concept(
|
506
|
+
self.checkpoint_path):
|
481
507
|
labels = HuggingFaceLoader.fetch_labels(self.checkpoint_path)
|
482
508
|
logger.info(f"Found {len(labels)} concepts from the model checkpoints.")
|
483
509
|
# sort the concepts by id and then update the config file
|
@@ -495,7 +521,7 @@ class ModelBuilder:
|
|
495
521
|
|
496
522
|
def upload_model_version(self, download_checkpoints):
|
497
523
|
file_path = f"{self.folder}.tar.gz"
|
498
|
-
logger.
|
524
|
+
logger.debug(f"Will tar it into file: {file_path}")
|
499
525
|
|
500
526
|
model_type_id = self.config.get('model').get('model_type_id')
|
501
527
|
|
@@ -536,10 +562,10 @@ class ModelBuilder:
|
|
536
562
|
|
537
563
|
with tarfile.open(self.tar_file, "w:gz") as tar:
|
538
564
|
tar.add(self.folder, arcname=".", filter=filter_func)
|
539
|
-
logger.
|
565
|
+
logger.debug("Tarring complete, about to start upload.")
|
540
566
|
|
541
567
|
file_size = os.path.getsize(self.tar_file)
|
542
|
-
logger.
|
568
|
+
logger.debug(f"Size of the tar is: {file_size} bytes")
|
543
569
|
|
544
570
|
self.storage_request_size = self._get_tar_file_content_size(file_path)
|
545
571
|
if not download_checkpoints and self.config.get("checkpoints"):
|
@@ -572,7 +598,6 @@ class ModelBuilder:
|
|
572
598
|
f"request_id: {response.status.req_id}",
|
573
599
|
end='\r',
|
574
600
|
flush=True)
|
575
|
-
logger.info("")
|
576
601
|
if response.status.code != status_code_pb2.MODEL_BUILDING:
|
577
602
|
logger.error(f"Failed to upload model version: {response}")
|
578
603
|
return
|
@@ -583,7 +608,7 @@ class ModelBuilder:
|
|
583
608
|
self.monitor_model_build()
|
584
609
|
finally:
|
585
610
|
if os.path.exists(self.tar_file):
|
586
|
-
logger.
|
611
|
+
logger.debug(f"Cleaning up upload file: {self.tar_file}")
|
587
612
|
os.remove(self.tar_file)
|
588
613
|
|
589
614
|
def model_version_stream_upload_iterator(self, model_version_proto, file_path):
|
@@ -593,9 +618,9 @@ class ModelBuilder:
|
|
593
618
|
chunk_size = int(127 * 1024 * 1024) # 127MB chunk size
|
594
619
|
num_chunks = (file_size // chunk_size) + 1
|
595
620
|
logger.info("Uploading file...")
|
596
|
-
logger.
|
597
|
-
logger.
|
598
|
-
logger.
|
621
|
+
logger.debug(f"File size: {file_size}")
|
622
|
+
logger.debug(f"Chunk size: {chunk_size}")
|
623
|
+
logger.debug(f"Number of chunks: {num_chunks}")
|
599
624
|
read_so_far = 0
|
600
625
|
for part_id in range(num_chunks):
|
601
626
|
try:
|
@@ -615,12 +640,12 @@ class ModelBuilder:
|
|
615
640
|
break
|
616
641
|
|
617
642
|
if read_so_far == file_size:
|
618
|
-
logger.info("
|
643
|
+
logger.info("Upload complete!")
|
619
644
|
|
620
645
|
def init_upload_model_version(self, model_version_proto, file_path):
|
621
646
|
file_size = os.path.getsize(file_path)
|
622
|
-
logger.
|
623
|
-
logger.
|
647
|
+
logger.debug(f"Uploading model version of model {self.model_proto.id}")
|
648
|
+
logger.debug(f"Using file '{os.path.basename(file_path)}' of size: {file_size} bytes")
|
624
649
|
result = service_pb2.PostModelVersionsUploadRequest(
|
625
650
|
upload_config=service_pb2.PostModelVersionsUploadConfig(
|
626
651
|
user_app_id=self.client.user_app_id,
|
@@ -655,18 +680,19 @@ class ModelBuilder:
|
|
655
680
|
version_id=self.model_version_id,
|
656
681
|
))
|
657
682
|
status_code = resp.model_version.status.code
|
683
|
+
logs = self.get_model_build_logs()
|
684
|
+
for log_entry in logs.log_entries:
|
685
|
+
if log_entry.url not in seen_logs:
|
686
|
+
seen_logs.add(log_entry.url)
|
687
|
+
logger.info(f"{escape(log_entry.message.strip())}")
|
658
688
|
if status_code == status_code_pb2.MODEL_BUILDING:
|
659
689
|
print(f"Model is building... (elapsed {time.time() - st:.1f}s)", end='\r', flush=True)
|
660
690
|
|
661
691
|
# Fetch and display the logs
|
662
|
-
logs = self.get_model_build_logs()
|
663
|
-
for log_entry in logs.log_entries:
|
664
|
-
if log_entry.url not in seen_logs:
|
665
|
-
seen_logs.add(log_entry.url)
|
666
|
-
logger.info(f"{escape(log_entry.message.strip())}")
|
667
692
|
time.sleep(1)
|
668
693
|
elif status_code == status_code_pb2.MODEL_TRAINED:
|
669
|
-
logger.info(
|
694
|
+
logger.info("Model build complete!")
|
695
|
+
logger.info(f"Build time elapsed {time.time() - st:.1f}s)")
|
670
696
|
logger.info(f"Check out the model at {self.model_url} version: {self.model_version_id}")
|
671
697
|
return True
|
672
698
|
else:
|
@@ -2,9 +2,10 @@ import os
|
|
2
2
|
|
3
3
|
registry = os.environ.get('CLARIFAI_BASE_IMAGE_REGISTRY', 'public.ecr.aws/clarifai-models')
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
GIT_SHA = "df565436eea93efb3e8d1eb558a0a46df29523ec"
|
6
|
+
|
7
|
+
PYTHON_BASE_IMAGE = registry + '/python-base:{python_version}-' + GIT_SHA
|
8
|
+
TORCH_BASE_IMAGE = registry + '/torch:{torch_version}-py{python_version}-cuda{cuda_version}-' + GIT_SHA
|
8
9
|
|
9
10
|
# List of available python base images
|
10
11
|
AVAILABLE_PYTHON_IMAGES = ['3.11', '3.12']
|
@@ -14,13 +15,10 @@ DEFAULT_PYTHON_VERSION = 3.12
|
|
14
15
|
# List of available torch images
|
15
16
|
# Keep sorted by most recent cuda version.
|
16
17
|
AVAILABLE_TORCH_IMAGES = [
|
17
|
-
'2.4.0-py3.11-cuda124',
|
18
18
|
'2.4.1-py3.11-cuda124',
|
19
19
|
'2.5.1-py3.11-cuda124',
|
20
|
-
'2.4.0-py3.12-cuda124',
|
21
20
|
'2.4.1-py3.12-cuda124',
|
22
21
|
'2.5.1-py3.12-cuda124',
|
23
|
-
# '2.4.0-py3.13-cuda124',
|
24
22
|
# '2.4.1-py3.13-cuda124',
|
25
23
|
# '2.5.1-py3.13-cuda124',
|
26
24
|
]
|
@@ -162,6 +162,18 @@ class HuggingFaceLoader:
|
|
162
162
|
return os.path.exists(checkpoint_path) and os.path.exists(
|
163
163
|
os.path.join(checkpoint_path, 'config.json'))
|
164
164
|
|
165
|
+
@staticmethod
|
166
|
+
def validate_concept(checkpoint_path: str):
|
167
|
+
# check if downloaded concept exists in hf model
|
168
|
+
config_path = os.path.join(checkpoint_path, 'config.json')
|
169
|
+
with open(config_path, 'r') as f:
|
170
|
+
config = json.load(f)
|
171
|
+
|
172
|
+
labels = config.get('id2label', None)
|
173
|
+
if labels:
|
174
|
+
return True
|
175
|
+
return False
|
176
|
+
|
165
177
|
@staticmethod
|
166
178
|
def fetch_labels(checkpoint_path: str):
|
167
179
|
# Fetch labels for classification, detection and segmentation models
|
@@ -142,8 +142,12 @@ def _configure_logger(name: str, logger_level: Union[int, str] = logging.NOTSET)
|
|
142
142
|
logger.addHandler(handler)
|
143
143
|
else:
|
144
144
|
# Add the new rich handler and formatter
|
145
|
+
try:
|
146
|
+
width, _ = os.get_terminal_size()
|
147
|
+
except OSError:
|
148
|
+
width = 255
|
145
149
|
handler = RichHandler(
|
146
|
-
rich_tracebacks=True, log_time_format="%Y-%m-%d %H:%M:%S.%f", console=Console(width=
|
150
|
+
rich_tracebacks=True, log_time_format="%Y-%m-%d %H:%M:%S.%f", console=Console(width=width))
|
147
151
|
formatter = logging.Formatter('%(message)s')
|
148
152
|
handler.setFormatter(formatter)
|
149
153
|
logger.addHandler(handler)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.1.
|
3
|
+
Version: 11.1.2
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -29,9 +29,9 @@ Requires-Dist: PyYAML>=6.0.1
|
|
29
29
|
Requires-Dist: schema==0.7.5
|
30
30
|
Requires-Dist: Pillow>=9.5.0
|
31
31
|
Requires-Dist: tabulate>=0.9.0
|
32
|
-
Requires-Dist: fsspec
|
33
|
-
Requires-Dist: click
|
34
|
-
Requires-Dist: requests
|
32
|
+
Requires-Dist: fsspec>=2024.6.1
|
33
|
+
Requires-Dist: click>=8.1.7
|
34
|
+
Requires-Dist: requests>=2.32.3
|
35
35
|
Provides-Extra: all
|
36
36
|
Requires-Dist: pycocotools==2.0.6; extra == "all"
|
37
37
|
Dynamic: author
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "11.1.1"
|
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.1.1 → clarifai-11.1.2}/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
|