clarifai 11.7.5__py3-none-any.whl → 11.8.0__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/base.py +2 -2
- clarifai/cli/model.py +261 -139
- clarifai/cli/pipeline.py +31 -11
- clarifai/cli/templates/pipeline_templates.py +34 -28
- clarifai/client/pipeline.py +20 -4
- clarifai/runners/models/model_builder.py +141 -10
- clarifai/runners/models/model_runner.py +114 -76
- clarifai/runners/models/openai_class.py +18 -0
- clarifai/runners/pipeline_steps/pipeline_step_builder.py +10 -1
- clarifai/runners/server.py +1 -1
- clarifai/runners/utils/loader.py +24 -4
- clarifai/utils/misc.py +20 -0
- clarifai/utils/secrets.py +96 -1
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/METADATA +1 -1
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/RECORD +20 -20
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/WHEEL +0 -0
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/entry_points.txt +0 -0
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/licenses/LICENSE +0 -0
- {clarifai-11.7.5.dist-info → clarifai-11.8.0.dist-info}/top_level.txt +0 -0
clarifai/runners/utils/loader.py
CHANGED
@@ -72,6 +72,17 @@ class HuggingFaceLoader:
|
|
72
72
|
else:
|
73
73
|
self.ignore_patterns = ignore_file_patterns
|
74
74
|
|
75
|
+
repo_files_to_download = self.get_repo_files_list(
|
76
|
+
allowed_file_patterns=allowed_file_patterns,
|
77
|
+
ignore_file_patterns=self.ignore_patterns,
|
78
|
+
)
|
79
|
+
total_size = self.get_huggingface_checkpoint_total_size(
|
80
|
+
self.repo_id, checkpoint_files_list=repo_files_to_download
|
81
|
+
)
|
82
|
+
total_size = total_size / (1024**2)
|
83
|
+
logger.info(f"Total download size: {total_size:.2f} MB")
|
84
|
+
|
85
|
+
logger.info("Downloading model checkpoints...")
|
75
86
|
snapshot_download(
|
76
87
|
repo_id=self.repo_id,
|
77
88
|
local_dir=checkpoint_path,
|
@@ -134,9 +145,7 @@ class HuggingFaceLoader:
|
|
134
145
|
else:
|
135
146
|
return repo_exists(self.repo_id)
|
136
147
|
|
137
|
-
def
|
138
|
-
self, checkpoint_path: str, allowed_file_patterns: list, ignore_file_patterns: list
|
139
|
-
):
|
148
|
+
def get_repo_files_list(self, allowed_file_patterns: list, ignore_file_patterns: list):
|
140
149
|
# check if model exists on HF
|
141
150
|
try:
|
142
151
|
from huggingface_hub import list_repo_files
|
@@ -169,6 +178,14 @@ class HuggingFaceLoader:
|
|
169
178
|
return any(fnmatch.fnmatch(file_path, pattern) for pattern in patterns)
|
170
179
|
|
171
180
|
repo_files = [f for f in repo_files if not should_ignore(f)]
|
181
|
+
return repo_files
|
182
|
+
|
183
|
+
def validate_download(
|
184
|
+
self, checkpoint_path: str, allowed_file_patterns: list, ignore_file_patterns: list
|
185
|
+
):
|
186
|
+
repo_files = self.get_repo_files_list(
|
187
|
+
allowed_file_patterns=allowed_file_patterns, ignore_file_patterns=ignore_file_patterns
|
188
|
+
)
|
172
189
|
|
173
190
|
# Check if downloaded files match the files we expect (ignoring ignored patterns)
|
174
191
|
checkpoint_dir_files = []
|
@@ -258,13 +275,14 @@ class HuggingFaceLoader:
|
|
258
275
|
return labels
|
259
276
|
|
260
277
|
@staticmethod
|
261
|
-
def get_huggingface_checkpoint_total_size(repo_name):
|
278
|
+
def get_huggingface_checkpoint_total_size(repo_name, checkpoint_files_list=None):
|
262
279
|
"""
|
263
280
|
Fetches the JSON data for a Hugging Face model using the API with `?blobs=true`.
|
264
281
|
Calculates the total size from the JSON output.
|
265
282
|
|
266
283
|
Args:
|
267
284
|
repo_name (str): The name of the model on Hugging Face Hub. e.g. "casperhansen/llama-3-8b-instruct-awq"
|
285
|
+
checkpoint_files_list (list, optional): A list of specific files to include in the size calculation. If None, all files are included.
|
268
286
|
|
269
287
|
Returns:
|
270
288
|
int: The total size in bytes.
|
@@ -282,6 +300,8 @@ class HuggingFaceLoader:
|
|
282
300
|
|
283
301
|
total_size = 0
|
284
302
|
for file in data['siblings']:
|
303
|
+
if checkpoint_files_list and (file['rfilename'] not in checkpoint_files_list):
|
304
|
+
continue
|
285
305
|
total_size += file['size']
|
286
306
|
return total_size
|
287
307
|
except Exception as e:
|
clarifai/utils/misc.py
CHANGED
@@ -221,6 +221,26 @@ def clone_github_repo(repo_url, target_dir, github_pat=None, branch=None):
|
|
221
221
|
return False
|
222
222
|
|
223
223
|
|
224
|
+
def get_list_of_files_to_download(
|
225
|
+
downloader, owner, repo, folder_path, branch, files_to_download, depth=1
|
226
|
+
):
|
227
|
+
data = downloader.get_folder_contents(owner, repo, folder_path, branch=branch)
|
228
|
+
for point in data:
|
229
|
+
if (point['type'] == 'dir') and (depth > 0):
|
230
|
+
files_to_download = get_list_of_files_to_download(
|
231
|
+
downloader,
|
232
|
+
owner,
|
233
|
+
repo,
|
234
|
+
point['path'],
|
235
|
+
branch,
|
236
|
+
files_to_download,
|
237
|
+
depth=(depth - 1),
|
238
|
+
)
|
239
|
+
else:
|
240
|
+
files_to_download.append(point['path'])
|
241
|
+
return files_to_download
|
242
|
+
|
243
|
+
|
224
244
|
class GitHubDownloader:
|
225
245
|
def __init__(
|
226
246
|
self, max_retries: int = 3, backoff_factor: float = 0.3, github_token: str = None
|
clarifai/utils/secrets.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
import os
|
2
2
|
import time
|
3
|
+
from contextlib import contextmanager
|
3
4
|
from pathlib import Path
|
4
5
|
from threading import Thread
|
5
|
-
from typing import Any, Callable, Optional
|
6
|
+
from typing import Any, Callable, Dict, List, Optional
|
6
7
|
|
7
8
|
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
8
9
|
from google.protobuf import struct_pb2
|
@@ -165,6 +166,100 @@ def inject_secrets(request: Optional[service_pb2.PostModelOutputsRequest]) -> No
|
|
165
166
|
return
|
166
167
|
|
167
168
|
|
169
|
+
def extract_req_secrets(
|
170
|
+
request: Optional[service_pb2.PostModelOutputsRequest],
|
171
|
+
) -> List[Dict[str, Any]]:
|
172
|
+
"""Extract request-type secrets from the model parameters.
|
173
|
+
|
174
|
+
Args:
|
175
|
+
request: The PostModelOutputsRequest containing the model parameters
|
176
|
+
|
177
|
+
Returns:
|
178
|
+
list: request-type secrets with env_var and value fields
|
179
|
+
"""
|
180
|
+
if not request or not request.HasField("model"):
|
181
|
+
return []
|
182
|
+
|
183
|
+
if not (
|
184
|
+
request.model.HasField("model_version")
|
185
|
+
and request.model.model_version.HasField("output_info")
|
186
|
+
and request.model.model_version.output_info.HasField("params")
|
187
|
+
):
|
188
|
+
return []
|
189
|
+
|
190
|
+
try:
|
191
|
+
params_dict = MessageToDict(request.model.model_version.output_info.params)
|
192
|
+
secrets_array = params_dict.get("secrets", [])
|
193
|
+
|
194
|
+
req_secrets = []
|
195
|
+
for secret in secrets_array:
|
196
|
+
if isinstance(secret, dict) and secret.get("secret_type") == "req":
|
197
|
+
secret_id = secret.get("id")
|
198
|
+
env_var = secret.get("env_var")
|
199
|
+
value = secret.get("value")
|
200
|
+
if env_var and value:
|
201
|
+
req_secrets.append({"env_var": env_var, "value": str(value)})
|
202
|
+
else:
|
203
|
+
logger.warning(
|
204
|
+
f"Invalid req-type secret missing env_var or value: {secret_id}"
|
205
|
+
)
|
206
|
+
return req_secrets
|
207
|
+
except Exception as e:
|
208
|
+
logger.error(f"Error extracting req secrets: {e}")
|
209
|
+
return []
|
210
|
+
|
211
|
+
|
212
|
+
@contextmanager
|
213
|
+
def temporary_env_vars(env_vars: Dict[str, str]):
|
214
|
+
"""Context manager to temporarily set environment variables and restore them after.
|
215
|
+
|
216
|
+
Args:
|
217
|
+
env_vars: Dictionary of environment variable names and values to set
|
218
|
+
"""
|
219
|
+
if not env_vars:
|
220
|
+
yield
|
221
|
+
return
|
222
|
+
|
223
|
+
original_values = {}
|
224
|
+
for key in env_vars.keys():
|
225
|
+
original_values[key] = os.environ.get(key)
|
226
|
+
|
227
|
+
try:
|
228
|
+
for key, value in env_vars.items():
|
229
|
+
os.environ[key] = value
|
230
|
+
logger.debug(f"Temporarily set environment variable: {key}")
|
231
|
+
yield
|
232
|
+
finally:
|
233
|
+
# Restore original environment state
|
234
|
+
for key, original_value in original_values.items():
|
235
|
+
if original_value is None:
|
236
|
+
if key in os.environ:
|
237
|
+
del os.environ[key]
|
238
|
+
logger.debug(f"Removed temporary environment variable: {key}")
|
239
|
+
else:
|
240
|
+
os.environ[key] = original_value
|
241
|
+
logger.debug(f"Restored environment variable: {key}")
|
242
|
+
|
243
|
+
|
244
|
+
@contextmanager
|
245
|
+
def req_secrets_context(request: Optional[service_pb2.PostModelOutputsRequest]):
|
246
|
+
"""Context manager to handle request-type secrets during model prediction.
|
247
|
+
|
248
|
+
Args:
|
249
|
+
request: The PostModelOutputsRequest to extract secrets from
|
250
|
+
"""
|
251
|
+
req_secrets = extract_req_secrets(request)
|
252
|
+
|
253
|
+
if not req_secrets:
|
254
|
+
yield
|
255
|
+
return
|
256
|
+
|
257
|
+
env_vars = {secret["env_var"]: secret["value"] for secret in req_secrets}
|
258
|
+
logger.debug(f"Setting {len(env_vars)} request-type secrets as environment variables")
|
259
|
+
with temporary_env_vars(env_vars):
|
260
|
+
yield
|
261
|
+
|
262
|
+
|
168
263
|
def get_secrets(
|
169
264
|
request: Optional[service_pb2.PostModelOutputsRequest],
|
170
265
|
) -> dict[str, Any]:
|
@@ -1,21 +1,21 @@
|
|
1
|
-
clarifai/__init__.py,sha256=
|
1
|
+
clarifai/__init__.py,sha256=i-ilTWt69mdcN4GqSDKAmTIOlguLxG2mm9Xhzz2U_aw,23
|
2
2
|
clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
clarifai/errors.py,sha256=GXa6D4v_L404J83jnRNFPH7s-1V9lk7w6Ws99f1g-AY,2772
|
4
4
|
clarifai/versions.py,sha256=ecSuEB_nOL2XSoYHDw2n23XUbm_KPOGjudMXmQrGdS8,224
|
5
5
|
clarifai/cli/README.md,sha256=Rm0Sk61u7PrWQBgA6idv0R6ldJGhnVHSlIF2rVzRk8g,3428
|
6
6
|
clarifai/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
clarifai/cli/__main__.py,sha256=7nPbLW7Jr2shkgMPvnxpn4xYGMvIcnqluJ69t9w4H_k,74
|
8
|
-
clarifai/cli/base.py,sha256=
|
8
|
+
clarifai/cli/base.py,sha256=FQEEmi3a9_LBOmM_-X4EYdpAmDK1UljTxrHOIIsOZbM,10696
|
9
9
|
clarifai/cli/compute_cluster.py,sha256=8Xss0Obrp6l1XuxJe0luOqU_pf8vXGDRi6jyIe8qR6k,2282
|
10
10
|
clarifai/cli/deployment.py,sha256=9C4I6_kyMxRkWl6h681wc79-3mAtDHtTUaxRv05OZMs,4262
|
11
|
-
clarifai/cli/model.py,sha256=
|
11
|
+
clarifai/cli/model.py,sha256=afThcvpEy7ni8zezel-UjvoJkALbVLQEI4WDZIdyDL0,47948
|
12
12
|
clarifai/cli/nodepool.py,sha256=H6OIdUW_EiyDUwZogzEDoYmVwEjLMsgoDlPyE7gjIuU,4245
|
13
|
-
clarifai/cli/pipeline.py,sha256=
|
13
|
+
clarifai/cli/pipeline.py,sha256=MmyPaVX1XsIZlrYTrT7Ctd71ao_d3ZWkuF_fv_NJS8s,13944
|
14
14
|
clarifai/cli/pipeline_step.py,sha256=dvoC2vAsDcxOCy88VV0X42PG22_7JSu9sfBVsk-Cix4,6133
|
15
15
|
clarifai/cli/templates/__init__.py,sha256=HbMlZuYOMyVJde73ijNAevmSRUpIttGlHdwyO4W-JOs,44
|
16
16
|
clarifai/cli/templates/model_templates.py,sha256=f3fvXTwHLBExjSOpdcEgp7X1CH28jjzpLFKljWi5arQ,9793
|
17
17
|
clarifai/cli/templates/pipeline_step_templates.py,sha256=w1IJghF_4wWyEmHR1925N0hpGKocy3G7ezhxTH-0XCc,1716
|
18
|
-
clarifai/cli/templates/pipeline_templates.py,sha256=
|
18
|
+
clarifai/cli/templates/pipeline_templates.py,sha256=iLVxkmd0usc7jervTZTFzLwRVVF_623RszGW-oIuPDw,4234
|
19
19
|
clarifai/client/__init__.py,sha256=MWEG_jTGn6UWbGCznsZxObJ5h65k2igD1462qID2pgI,840
|
20
20
|
clarifai/client/app.py,sha256=8_Y5esptlFSGW2WS0uly9IBop37hJVpxnhs-vBIZrtc,47205
|
21
21
|
clarifai/client/base.py,sha256=aduMVVSPUSQ-MsDpj4yuHmCTUNbCTPt76dhRZ14euVg,10284
|
@@ -28,7 +28,7 @@ clarifai/client/model.py,sha256=CQP5UiHaLR2hHcG1nU-ac_utN9ZXalOzbOqaICa0VyQ,9201
|
|
28
28
|
clarifai/client/model_client.py,sha256=pyPg1C3gb5Q3_DXmMmOB5AeORR1IDaaM7n0LGc3ciLk,38217
|
29
29
|
clarifai/client/module.py,sha256=jLViQYvVV3FmRN_ivvbk83uwsx7CgYGeEx4dYAr6yD4,4537
|
30
30
|
clarifai/client/nodepool.py,sha256=0E8-VgNMpdx2sAGotS3ZwfeUc9k3DBa3QJEJ1wKroVA,16700
|
31
|
-
clarifai/client/pipeline.py,sha256=
|
31
|
+
clarifai/client/pipeline.py,sha256=R2DAaph-vlVJO_49PMfGXZ_1Prnd0vdkcgksnqK1jJA,15731
|
32
32
|
clarifai/client/pipeline_step.py,sha256=_R0PhVCspAQatCss-0O0O9p9CpvU_y9cSSEeUp_7cV0,2765
|
33
33
|
clarifai/client/runner.py,sha256=5xCiqByGGscfNm0IjHelhDTx8-9l8G0C3HL-3YZogK8,2253
|
34
34
|
clarifai/client/search.py,sha256=3LLfATrdU43a0mRNITmJV-E53bhfafZkYsbwkTtlnyU,15661
|
@@ -72,28 +72,28 @@ clarifai/rag/__init__.py,sha256=wu3PzAzo7uqgrEzuaC9lY_3gj1HFiR3GU3elZIKTT5g,40
|
|
72
72
|
clarifai/rag/rag.py,sha256=EG3GoFrHFCmA70Tz49_0Jo1-3WIaHSgWGHecPeErcdc,14170
|
73
73
|
clarifai/rag/utils.py,sha256=_gVZdABuMnraCKViLruV75x0F3IpgFXN6amYSGE5_xc,4462
|
74
74
|
clarifai/runners/__init__.py,sha256=wXLaSljH7qLeJCrZdKEnlQh2tNqTQAIZKWOu2rZ6wGs,279
|
75
|
-
clarifai/runners/server.py,sha256=
|
75
|
+
clarifai/runners/server.py,sha256=qTWpFw01UqdVHSUSKojnnC7P-jKx6dQvPs0C4vJCOw4,12442
|
76
76
|
clarifai/runners/dockerfile_template/Dockerfile.template,sha256=nEnIMqzhAXDbd0Ht7QQm0U7AVPIHWQD6kYnFZ0TKJUM,2428
|
77
77
|
clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
78
|
clarifai/runners/models/dummy_openai_model.py,sha256=LfAJu173uTEYsN6xpaJ6TyimohyTooX16H6YYk9qVLs,8636
|
79
79
|
clarifai/runners/models/mcp_class.py,sha256=RdKn7rW4vYol0VRDZiLTSMfkqjLhO1ijXAQ0Rq0Jfnw,6647
|
80
|
-
clarifai/runners/models/model_builder.py,sha256=
|
80
|
+
clarifai/runners/models/model_builder.py,sha256=uHEbUs-madANZIjroCbdWFrD6ss9jtLQNIrLgrqEaJA,75881
|
81
81
|
clarifai/runners/models/model_class.py,sha256=Ndh437BNMkpFBo6B108GuKL8sGYaGnSplZ6FxOgd_v8,20010
|
82
82
|
clarifai/runners/models/model_run_locally.py,sha256=6-6WjEKc0ba3gAv4wOLdMs2XOzS3b-2bZHJS0wdVqJY,20088
|
83
|
-
clarifai/runners/models/model_runner.py,sha256=
|
83
|
+
clarifai/runners/models/model_runner.py,sha256=bZeqIGvoR6t9kzI7ko5Wh2sB8DiT-HcCgFwTqgeu_JY,14573
|
84
84
|
clarifai/runners/models/model_servicer.py,sha256=ZNF5rFI76YCmXXQIrz4wacPMtlFfl2KRsmPw29luGKI,4729
|
85
|
-
clarifai/runners/models/openai_class.py,sha256=
|
85
|
+
clarifai/runners/models/openai_class.py,sha256=MYnL7_U4_m5FX3CoVaTd6B9Qminh-q4pYizZQsV3zSk,9557
|
86
86
|
clarifai/runners/models/visual_classifier_class.py,sha256=1ZoLfCT2crrgRbejjTMAIwpTRgQMiH9N9yflOVpFxSg,2721
|
87
87
|
clarifai/runners/models/visual_detector_class.py,sha256=ky4oFAkGCKPpGPdgaOso-n6D3HcmnbKee_8hBsNiV8U,2883
|
88
88
|
clarifai/runners/pipeline_steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
|
-
clarifai/runners/pipeline_steps/pipeline_step_builder.py,sha256=
|
89
|
+
clarifai/runners/pipeline_steps/pipeline_step_builder.py,sha256=jcbs3ntbeyUiAaPh00Pscni4uJopbqVNVJblUX1pYVc,21808
|
90
90
|
clarifai/runners/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
91
|
clarifai/runners/pipelines/pipeline_builder.py,sha256=0FBjb8l7mWlCwBsBLkHM3znNQB9HPLEOYrrE53ntjCE,13810
|
92
92
|
clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
93
|
clarifai/runners/utils/code_script.py,sha256=zZ5xjd13z2oV4CUWgMU0w6J6dRr01Kl2K-8pPyw0MiY,14346
|
94
94
|
clarifai/runners/utils/const.py,sha256=MK7lTzzJKbOiyiUtG_jlJXfz_xNKMn5LjkQ9vjbttXE,1538
|
95
95
|
clarifai/runners/utils/data_utils.py,sha256=HRpMYR2O0OiDpXXhOManLHTeomC4bFnXMHVAiT_12yE,20856
|
96
|
-
clarifai/runners/utils/loader.py,sha256=
|
96
|
+
clarifai/runners/utils/loader.py,sha256=hQwdRKRLgrunDzLTiqjz2qVdxiL8WQ04PUSwrh-JWZ0,12077
|
97
97
|
clarifai/runners/utils/method_signatures.py,sha256=qdHaO8ZIgP6BBXXMhMPhcQ46dse-XMP2t4VJCNG7O3Q,18335
|
98
98
|
clarifai/runners/utils/model_utils.py,sha256=MCYhV_00anptIO1Qtxgzn3DlGI2UHV0ESFT3wLNcAMM,6413
|
99
99
|
clarifai/runners/utils/openai_convertor.py,sha256=ZlIrvvfHttD_DavLvmKZdL8gNq_TQvQtZVnYamwdWz4,8248
|
@@ -109,10 +109,10 @@ clarifai/utils/cli.py,sha256=xTenEXjhWV-lpTqlfeRO4WNakT5QszNi8GO4yH4qcMs,13184
|
|
109
109
|
clarifai/utils/config.py,sha256=dENYtcWW7Il5MInvIaYe0MZn0hW1fbIb0Lzk8rQ_geQ,7671
|
110
110
|
clarifai/utils/constants.py,sha256=klcdSiVccrdJVRXL9qq08p2lWL3KerXcQOTIG6y9298,2414
|
111
111
|
clarifai/utils/logging.py,sha256=0we53uTqUvzrulC86whu-oeWNxn1JjJL0OQ98Bwf9vo,15198
|
112
|
-
clarifai/utils/misc.py,sha256=
|
112
|
+
clarifai/utils/misc.py,sha256=ATj4RR6S06GeLE0X4tMU4bmTz4Sz4j2WemTddsnSfMI,23458
|
113
113
|
clarifai/utils/model_train.py,sha256=0XSAoTkSsrwf4f-W9yw2mkXZtkal7LBLJSoi86CFCn4,9250
|
114
114
|
clarifai/utils/protobuf.py,sha256=VMhnNsPuWQ16VarKm8BOr5zccXMe26UlrxdJxIzEZNM,6220
|
115
|
-
clarifai/utils/secrets.py,sha256=
|
115
|
+
clarifai/utils/secrets.py,sha256=nmdgHpjVvx93eSXvk8NbOikj7JsFu5tnqXNMj-0qDBA,11253
|
116
116
|
clarifai/utils/evaluation/__init__.py,sha256=PYkurUrXrGevByj7RFb6CoU1iC7fllyQSfnnlo9WnY8,69
|
117
117
|
clarifai/utils/evaluation/helpers.py,sha256=0t6eIDXeZEoiVvnmHTnsIF_-v4BzrQW1hFaqc_psifU,21079
|
118
118
|
clarifai/utils/evaluation/main.py,sha256=N_sfRuMjHrUeuWN0Pzms65M1PbkQkgYg3WoQVaDR1Jw,17764
|
@@ -121,9 +121,9 @@ clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
121
121
|
clarifai/workflows/export.py,sha256=HvUYG9N_-UZoRR0-_tdGbZ950_AeBqawSppgUxQebR0,1913
|
122
122
|
clarifai/workflows/utils.py,sha256=ESL3INcouNcLKCh-nMpfXX-YbtCzX7tz7hT57_RGQ3M,2079
|
123
123
|
clarifai/workflows/validate.py,sha256=UhmukyHkfxiMFrPPeBdUTiCOHQT5-shqivlBYEyKTlU,2931
|
124
|
-
clarifai-11.
|
125
|
-
clarifai-11.
|
126
|
-
clarifai-11.
|
127
|
-
clarifai-11.
|
128
|
-
clarifai-11.
|
129
|
-
clarifai-11.
|
124
|
+
clarifai-11.8.0.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
|
125
|
+
clarifai-11.8.0.dist-info/METADATA,sha256=7bi487EKBn-zOSchR-9uC-l7j5-1KsWWNfbXQpjHaZk,23161
|
126
|
+
clarifai-11.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
127
|
+
clarifai-11.8.0.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
|
128
|
+
clarifai-11.8.0.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
|
129
|
+
clarifai-11.8.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|