clarifai 11.5.3rc1__py3-none-any.whl → 11.5.4__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/runners/models/model_runner.py +31 -5
- clarifai/runners/models/model_servicer.py +26 -3
- clarifai/runners/utils/data_types/data_types.py +1 -15
- clarifai/runners/utils/url_fetcher.py +55 -10
- {clarifai-11.5.3rc1.dist-info → clarifai-11.5.4.dist-info}/METADATA +1 -1
- clarifai-11.5.4.dist-info/RECORD +126 -0
- clarifai/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/__pycache__/errors.cpython-312.pyc +0 -0
- clarifai/__pycache__/errors.cpython-38.pyc +0 -0
- clarifai/__pycache__/errors.cpython-39.pyc +0 -0
- clarifai/__pycache__/versions.cpython-312.pyc +0 -0
- clarifai/__pycache__/versions.cpython-38.pyc +0 -0
- clarifai/__pycache__/versions.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/app.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/app.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/app.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/base.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/base.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/base.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/compute_cluster.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/compute_cluster.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/compute_cluster.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/dataset.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/dataset.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/dataset.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/deployment.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/deployment.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/deployment.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/input.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/input.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/input.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/lister.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/lister.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/lister.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/model.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/model.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/model.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/module.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/module.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/module.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/nodepool.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/nodepool.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/nodepool.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/search.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/search.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/search.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/user.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/user.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/user.cpython-39.pyc +0 -0
- clarifai/client/__pycache__/workflow.cpython-312.pyc +0 -0
- clarifai/client/__pycache__/workflow.cpython-38.pyc +0 -0
- clarifai/client/__pycache__/workflow.cpython-39.pyc +0 -0
- clarifai/client/auth/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/client/auth/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/client/auth/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/client/auth/__pycache__/helper.cpython-312.pyc +0 -0
- clarifai/client/auth/__pycache__/helper.cpython-38.pyc +0 -0
- clarifai/client/auth/__pycache__/helper.cpython-39.pyc +0 -0
- clarifai/client/auth/__pycache__/register.cpython-312.pyc +0 -0
- clarifai/client/auth/__pycache__/register.cpython-38.pyc +0 -0
- clarifai/client/auth/__pycache__/register.cpython-39.pyc +0 -0
- clarifai/client/auth/__pycache__/stub.cpython-312.pyc +0 -0
- clarifai/client/auth/__pycache__/stub.cpython-38.pyc +0 -0
- clarifai/client/auth/__pycache__/stub.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/base.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/base.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/base.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/dataset.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/dataset.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/dataset.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/input.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/input.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/input.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/model.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/model.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/model.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/search.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/search.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/search.cpython-39.pyc +0 -0
- clarifai/constants/__pycache__/workflow.cpython-312.pyc +0 -0
- clarifai/constants/__pycache__/workflow.cpython-38.pyc +0 -0
- clarifai/constants/__pycache__/workflow.cpython-39.pyc +0 -0
- clarifai/datasets/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/datasets/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/datasets/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/datasets/export/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/datasets/export/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/datasets/export/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/datasets/export/__pycache__/inputs_annotations.cpython-312.pyc +0 -0
- clarifai/datasets/export/__pycache__/inputs_annotations.cpython-38.pyc +0 -0
- clarifai/datasets/export/__pycache__/inputs_annotations.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/base.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/base.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/base.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/features.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/features.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/features.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/image.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/image.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/image.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/multimodal.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/multimodal.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/multimodal.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/text.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/text.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/text.cpython-39.pyc +0 -0
- clarifai/datasets/upload/__pycache__/utils.cpython-312.pyc +0 -0
- clarifai/datasets/upload/__pycache__/utils.cpython-38.pyc +0 -0
- clarifai/datasets/upload/__pycache__/utils.cpython-39.pyc +0 -0
- clarifai/schema/__pycache__/search.cpython-312.pyc +0 -0
- clarifai/schema/__pycache__/search.cpython-38.pyc +0 -0
- clarifai/schema/__pycache__/search.cpython-39.pyc +0 -0
- clarifai/urls/__pycache__/helper.cpython-312.pyc +0 -0
- clarifai/urls/__pycache__/helper.cpython-38.pyc +0 -0
- clarifai/urls/__pycache__/helper.cpython-39.pyc +0 -0
- clarifai/utils/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/utils/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/utils/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/utils/__pycache__/constants.cpython-312.pyc +0 -0
- clarifai/utils/__pycache__/constants.cpython-38.pyc +0 -0
- clarifai/utils/__pycache__/constants.cpython-39.pyc +0 -0
- clarifai/utils/__pycache__/logging.cpython-312.pyc +0 -0
- clarifai/utils/__pycache__/logging.cpython-38.pyc +0 -0
- clarifai/utils/__pycache__/logging.cpython-39.pyc +0 -0
- clarifai/utils/__pycache__/misc.cpython-312.pyc +0 -0
- clarifai/utils/__pycache__/misc.cpython-38.pyc +0 -0
- clarifai/utils/__pycache__/misc.cpython-39.pyc +0 -0
- clarifai/utils/__pycache__/model_train.cpython-312.pyc +0 -0
- clarifai/utils/__pycache__/model_train.cpython-38.pyc +0 -0
- clarifai/utils/__pycache__/model_train.cpython-39.pyc +0 -0
- clarifai/workflows/__pycache__/__init__.cpython-312.pyc +0 -0
- clarifai/workflows/__pycache__/__init__.cpython-38.pyc +0 -0
- clarifai/workflows/__pycache__/__init__.cpython-39.pyc +0 -0
- clarifai/workflows/__pycache__/export.cpython-312.pyc +0 -0
- clarifai/workflows/__pycache__/export.cpython-38.pyc +0 -0
- clarifai/workflows/__pycache__/export.cpython-39.pyc +0 -0
- clarifai/workflows/__pycache__/utils.cpython-312.pyc +0 -0
- clarifai/workflows/__pycache__/utils.cpython-38.pyc +0 -0
- clarifai/workflows/__pycache__/utils.cpython-39.pyc +0 -0
- clarifai/workflows/__pycache__/validate.cpython-312.pyc +0 -0
- clarifai/workflows/__pycache__/validate.cpython-38.pyc +0 -0
- clarifai/workflows/__pycache__/validate.cpython-39.pyc +0 -0
- clarifai-11.5.3rc1.dist-info/RECORD +0 -270
- {clarifai-11.5.3rc1.dist-info → clarifai-11.5.4.dist-info}/WHEEL +0 -0
- {clarifai-11.5.3rc1.dist-info → clarifai-11.5.4.dist-info}/entry_points.txt +0 -0
- {clarifai-11.5.3rc1.dist-info → clarifai-11.5.4.dist-info}/licenses/LICENSE +0 -0
- {clarifai-11.5.3rc1.dist-info → clarifai-11.5.4.dist-info}/top_level.txt +0 -0
clarifai/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "11.5.
|
1
|
+
__version__ = "11.5.4"
|
@@ -5,6 +5,8 @@ from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
|
|
5
5
|
from clarifai_protocol import BaseRunner
|
6
6
|
from clarifai_protocol.utils.health import HealthProbeRequestHandler
|
7
7
|
|
8
|
+
from clarifai.client.auth.helper import ClarifaiAuthHelper
|
9
|
+
|
8
10
|
from ..utils.url_fetcher import ensure_urls_downloaded
|
9
11
|
from .model_class import ModelClass
|
10
12
|
|
@@ -42,6 +44,28 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
42
44
|
)
|
43
45
|
self.model = model
|
44
46
|
|
47
|
+
# Store authentication parameters for URL fetching
|
48
|
+
self._user_id = user_id
|
49
|
+
self._pat = pat
|
50
|
+
self._token = token
|
51
|
+
self._base_url = base_url
|
52
|
+
|
53
|
+
# Create auth helper if we have sufficient authentication information
|
54
|
+
self._auth_helper = None
|
55
|
+
if self._user_id and (self._pat or self._token):
|
56
|
+
try:
|
57
|
+
self._auth_helper = ClarifaiAuthHelper(
|
58
|
+
user_id=self._user_id,
|
59
|
+
app_id="", # app_id not needed for URL fetching
|
60
|
+
pat=self._pat or "",
|
61
|
+
token=self._token or "",
|
62
|
+
base=self._base_url,
|
63
|
+
validate=False, # Don't validate since app_id is empty
|
64
|
+
)
|
65
|
+
except Exception:
|
66
|
+
# If auth helper creation fails, proceed without authentication
|
67
|
+
self._auth_helper = None
|
68
|
+
|
45
69
|
# After model load successfully set the health probe to ready and startup
|
46
70
|
HealthProbeRequestHandler.is_ready = True
|
47
71
|
HealthProbeRequestHandler.is_startup = True
|
@@ -81,7 +105,7 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
81
105
|
if not runner_item.HasField('post_model_outputs_request'):
|
82
106
|
raise Exception("Unexpected work item type: {}".format(runner_item))
|
83
107
|
request = runner_item.post_model_outputs_request
|
84
|
-
ensure_urls_downloaded(request)
|
108
|
+
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
85
109
|
|
86
110
|
resp = self.model.predict_wrapper(request)
|
87
111
|
if resp.status.code != status_code_pb2.SUCCESS:
|
@@ -114,7 +138,7 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
114
138
|
if not runner_item.HasField('post_model_outputs_request'):
|
115
139
|
raise Exception("Unexpected work item type: {}".format(runner_item))
|
116
140
|
request = runner_item.post_model_outputs_request
|
117
|
-
ensure_urls_downloaded(request)
|
141
|
+
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
118
142
|
|
119
143
|
for resp in self.model.generate_wrapper(request):
|
120
144
|
if resp.status.code != status_code_pb2.SUCCESS:
|
@@ -150,7 +174,9 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
150
174
|
self, runner_item_iterator: Iterator[service_pb2.RunnerItem]
|
151
175
|
) -> Iterator[service_pb2.RunnerItemOutput]:
|
152
176
|
# Call the generate() method the underlying model implements.
|
153
|
-
for resp in self.model.stream_wrapper(
|
177
|
+
for resp in self.model.stream_wrapper(
|
178
|
+
pmo_iterator(runner_item_iterator, self._auth_helper)
|
179
|
+
):
|
154
180
|
if resp.status.code != status_code_pb2.SUCCESS:
|
155
181
|
yield service_pb2.RunnerItemOutput(multi_output_response=resp)
|
156
182
|
continue
|
@@ -181,9 +207,9 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
181
207
|
yield service_pb2.RunnerItemOutput(multi_output_response=resp)
|
182
208
|
|
183
209
|
|
184
|
-
def pmo_iterator(runner_item_iterator):
|
210
|
+
def pmo_iterator(runner_item_iterator, auth_helper=None):
|
185
211
|
for runner_item in runner_item_iterator:
|
186
212
|
if not runner_item.HasField('post_model_outputs_request'):
|
187
213
|
raise Exception("Unexpected work item type: {}".format(runner_item))
|
188
|
-
ensure_urls_downloaded(runner_item.post_model_outputs_request)
|
214
|
+
ensure_urls_downloaded(runner_item.post_model_outputs_request, auth_helper=auth_helper)
|
189
215
|
yield runner_item.post_model_outputs_request
|
@@ -5,6 +5,8 @@ from typing import Iterator
|
|
5
5
|
from clarifai_grpc.grpc.api import service_pb2, service_pb2_grpc
|
6
6
|
from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
|
7
7
|
|
8
|
+
from clarifai.client.auth.helper import ClarifaiAuthHelper
|
9
|
+
|
8
10
|
from ..utils.url_fetcher import ensure_urls_downloaded
|
9
11
|
|
10
12
|
_RAISE_EXCEPTIONS = os.getenv("RAISE_EXCEPTIONS", "false").lower() in ("true", "1")
|
@@ -23,6 +25,27 @@ class ModelServicer(service_pb2_grpc.V2Servicer):
|
|
23
25
|
"""
|
24
26
|
self.model = model
|
25
27
|
|
28
|
+
# Try to create auth helper from environment variables if available
|
29
|
+
self._auth_helper = None
|
30
|
+
try:
|
31
|
+
user_id = os.environ.get("CLARIFAI_USER_ID")
|
32
|
+
pat = os.environ.get("CLARIFAI_PAT")
|
33
|
+
token = os.environ.get("CLARIFAI_SESSION_TOKEN")
|
34
|
+
base_url = os.environ.get("CLARIFAI_API_BASE", "https://api.clarifai.com")
|
35
|
+
|
36
|
+
if user_id and (pat or token):
|
37
|
+
self._auth_helper = ClarifaiAuthHelper(
|
38
|
+
user_id=user_id,
|
39
|
+
app_id="", # app_id not needed for URL fetching
|
40
|
+
pat=pat or "",
|
41
|
+
token=token or "",
|
42
|
+
base=base_url,
|
43
|
+
validate=False, # Don't validate since app_id is empty
|
44
|
+
)
|
45
|
+
except Exception:
|
46
|
+
# If auth helper creation fails, proceed without authentication
|
47
|
+
self._auth_helper = None
|
48
|
+
|
26
49
|
def PostModelOutputs(
|
27
50
|
self, request: service_pb2.PostModelOutputsRequest, context=None
|
28
51
|
) -> service_pb2.MultiOutputResponse:
|
@@ -32,7 +55,7 @@ class ModelServicer(service_pb2_grpc.V2Servicer):
|
|
32
55
|
"""
|
33
56
|
|
34
57
|
# Download any urls that are not already bytes.
|
35
|
-
ensure_urls_downloaded(request)
|
58
|
+
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
36
59
|
|
37
60
|
try:
|
38
61
|
return self.model.predict_wrapper(request)
|
@@ -56,7 +79,7 @@ class ModelServicer(service_pb2_grpc.V2Servicer):
|
|
56
79
|
returns an output.
|
57
80
|
"""
|
58
81
|
# Download any urls that are not already bytes.
|
59
|
-
ensure_urls_downloaded(request)
|
82
|
+
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
60
83
|
|
61
84
|
try:
|
62
85
|
yield from self.model.generate_wrapper(request)
|
@@ -84,7 +107,7 @@ class ModelServicer(service_pb2_grpc.V2Servicer):
|
|
84
107
|
|
85
108
|
# Download any urls that are not already bytes.
|
86
109
|
for req in request:
|
87
|
-
ensure_urls_downloaded(req)
|
110
|
+
ensure_urls_downloaded(req, auth_helper=self._auth_helper)
|
88
111
|
|
89
112
|
try:
|
90
113
|
yield from self.model.stream_wrapper(request_copy)
|
@@ -207,7 +207,6 @@ class Region(MessageData):
|
|
207
207
|
track_id: str = None,
|
208
208
|
text: str = None,
|
209
209
|
id: str = None,
|
210
|
-
value: float = None,
|
211
210
|
):
|
212
211
|
if proto_region is None:
|
213
212
|
self.proto = RegionProto()
|
@@ -224,8 +223,6 @@ class Region(MessageData):
|
|
224
223
|
self.track_id = track_id
|
225
224
|
if text:
|
226
225
|
self.text = text
|
227
|
-
if value:
|
228
|
-
self.value = value
|
229
226
|
self.id = id if id is not None else uuid.uuid4().hex
|
230
227
|
elif isinstance(proto_region, RegionProto):
|
231
228
|
self.proto = proto_region
|
@@ -325,19 +322,8 @@ class Region(MessageData):
|
|
325
322
|
point_proto = PointProto(col=x, row=y, z=z)
|
326
323
|
self.proto.region_info.point.CopyFrom(point_proto)
|
327
324
|
|
328
|
-
@property
|
329
|
-
def value(self) -> float:
|
330
|
-
"""Value of the region, typically used for confidence scores."""
|
331
|
-
return self.proto.value
|
332
|
-
|
333
|
-
@value.setter
|
334
|
-
def value(self, value: float):
|
335
|
-
if not isinstance(value, (int, float)):
|
336
|
-
raise TypeError(f"Expected int or float for value, got {type(value).__name__}")
|
337
|
-
self.proto.value = float(value)
|
338
|
-
|
339
325
|
def __repr__(self) -> str:
|
340
|
-
return f"Region(id={self.id},box={self.box or []}, concepts={self.concepts or None}, point={self.point or None}, mask={self.mask or None}, track_id={self.track_id or None}
|
326
|
+
return f"Region(id={self.id},box={self.box or []}, concepts={self.concepts or None}, point={self.point or None}, mask={self.mask or None}, track_id={self.track_id or None})"
|
341
327
|
|
342
328
|
def to_proto(self) -> RegionProto:
|
343
329
|
return self.proto
|
@@ -5,43 +5,88 @@ import fsspec
|
|
5
5
|
from clarifai.utils.logging import logger
|
6
6
|
|
7
7
|
|
8
|
-
def download_input(input):
|
9
|
-
_download_input_data(input.data)
|
8
|
+
def download_input(input, auth_helper=None):
|
9
|
+
_download_input_data(input.data, auth_helper=auth_helper)
|
10
10
|
if input.data.parts:
|
11
11
|
for i in range(len(input.data.parts)):
|
12
|
-
_download_input_data(input.data.parts[i].data)
|
12
|
+
_download_input_data(input.data.parts[i].data, auth_helper=auth_helper)
|
13
13
|
|
14
14
|
|
15
|
-
def _download_input_data(input_data):
|
15
|
+
def _download_input_data(input_data, auth_helper=None):
|
16
16
|
"""
|
17
17
|
This function will download any urls that are not already bytes.
|
18
|
+
|
19
|
+
Args:
|
20
|
+
input_data: The input data containing URLs to download
|
21
|
+
auth_helper: Optional ClarifaiAuthHelper instance for authentication
|
18
22
|
"""
|
23
|
+
# Get auth headers if auth_helper is provided
|
24
|
+
auth_kwargs = {}
|
25
|
+
if auth_helper is not None:
|
26
|
+
auth_kwargs = _get_auth_kwargs(auth_helper)
|
27
|
+
|
19
28
|
if input_data.image.url and not input_data.image.base64:
|
20
29
|
# Download the image
|
21
|
-
with fsspec.open(input_data.image.url, 'rb') as f:
|
30
|
+
with fsspec.open(input_data.image.url, 'rb', **auth_kwargs) as f:
|
22
31
|
input_data.image.base64 = f.read()
|
23
32
|
if input_data.video.url and not input_data.video.base64:
|
24
33
|
# Download the video
|
25
|
-
with fsspec.open(input_data.video.url, 'rb') as f:
|
34
|
+
with fsspec.open(input_data.video.url, 'rb', **auth_kwargs) as f:
|
26
35
|
input_data.video.base64 = f.read()
|
27
36
|
if input_data.audio.url and not input_data.audio.base64:
|
28
37
|
# Download the audio
|
29
|
-
with fsspec.open(input_data.audio.url, 'rb') as f:
|
38
|
+
with fsspec.open(input_data.audio.url, 'rb', **auth_kwargs) as f:
|
30
39
|
input_data.audio.base64 = f.read()
|
31
40
|
if input_data.text.url and not input_data.text.raw:
|
32
41
|
# Download the text
|
33
|
-
with fsspec.open(input_data.text.url, 'r') as f:
|
42
|
+
with fsspec.open(input_data.text.url, 'r', **auth_kwargs) as f:
|
34
43
|
input_data.text.raw = f.read()
|
35
44
|
|
36
45
|
|
37
|
-
def
|
46
|
+
def _get_auth_kwargs(auth_helper):
|
47
|
+
"""
|
48
|
+
Convert ClarifaiAuthHelper metadata to fsspec-compatible kwargs.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
auth_helper: ClarifaiAuthHelper instance
|
52
|
+
|
53
|
+
Returns:
|
54
|
+
dict: kwargs to pass to fsspec.open() for authentication
|
55
|
+
"""
|
56
|
+
if auth_helper is None:
|
57
|
+
return {}
|
58
|
+
|
59
|
+
try:
|
60
|
+
# Get authentication metadata from the helper
|
61
|
+
metadata = auth_helper.metadata
|
62
|
+
|
63
|
+
# Convert gRPC metadata tuples to HTTP headers dict
|
64
|
+
headers = {}
|
65
|
+
for key, value in metadata:
|
66
|
+
# Skip non-auth headers
|
67
|
+
if key in ('authorization', 'x-clarifai-session-token'):
|
68
|
+
headers[key] = value
|
69
|
+
|
70
|
+
# Return fsspec-compatible kwargs
|
71
|
+
return {'client_kwargs': {'headers': headers}}
|
72
|
+
except Exception as e:
|
73
|
+
logger.warning(f"Failed to get authentication headers: {e}")
|
74
|
+
return {}
|
75
|
+
|
76
|
+
|
77
|
+
def ensure_urls_downloaded(request, max_threads=128, auth_helper=None):
|
38
78
|
"""
|
39
79
|
This function will download any urls that are not already bytes and parallelize with a thread pool.
|
80
|
+
|
81
|
+
Args:
|
82
|
+
request: The request containing inputs with URLs to download
|
83
|
+
max_threads: Maximum number of threads to use for parallel downloads
|
84
|
+
auth_helper: Optional ClarifaiAuthHelper instance for authentication
|
40
85
|
"""
|
41
86
|
with concurrent.futures.ThreadPoolExecutor(max_workers=max_threads) as executor:
|
42
87
|
futures = []
|
43
88
|
for input in request.inputs:
|
44
|
-
futures.append(executor.submit(download_input, input))
|
89
|
+
futures.append(executor.submit(download_input, input, auth_helper))
|
45
90
|
for future in concurrent.futures.as_completed(futures):
|
46
91
|
try:
|
47
92
|
future.result()
|
@@ -0,0 +1,126 @@
|
|
1
|
+
clarifai/__init__.py,sha256=dX3Oi94KTZEq35Tm3ca-zFtWYOWbwopKBoxPCzh9NFo,23
|
2
|
+
clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
+
clarifai/errors.py,sha256=GXa6D4v_L404J83jnRNFPH7s-1V9lk7w6Ws99f1g-AY,2772
|
4
|
+
clarifai/versions.py,sha256=ecSuEB_nOL2XSoYHDw2n23XUbm_KPOGjudMXmQrGdS8,224
|
5
|
+
clarifai/cli/README.md,sha256=YGApHfeUyu5P0Pdth-mqQCQftWHDxz6bugDlvDXDhOE,1942
|
6
|
+
clarifai/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
clarifai/cli/__main__.py,sha256=7nPbLW7Jr2shkgMPvnxpn4xYGMvIcnqluJ69t9w4H_k,74
|
8
|
+
clarifai/cli/base.py,sha256=mzfAHRhon6tKntpxk241GD-Sjrb2-V99nAOasElLuuw,8254
|
9
|
+
clarifai/cli/compute_cluster.py,sha256=8Xss0Obrp6l1XuxJe0luOqU_pf8vXGDRi6jyIe8qR6k,2282
|
10
|
+
clarifai/cli/deployment.py,sha256=9C4I6_kyMxRkWl6h681wc79-3mAtDHtTUaxRv05OZMs,4262
|
11
|
+
clarifai/cli/model.py,sha256=71u7JS0xnxQOLp3s9cKGbT1hyhf1CIVxMeFMU2fiLTM,31553
|
12
|
+
clarifai/cli/nodepool.py,sha256=H6OIdUW_EiyDUwZogzEDoYmVwEjLMsgoDlPyE7gjIuU,4245
|
13
|
+
clarifai/cli/pipeline.py,sha256=M8gW72IB5hx1OIf0pOytZhnw50euPnXxW4vuZ9Fqyqw,5477
|
14
|
+
clarifai/cli/pipeline_step.py,sha256=eOxU4MdPBuB01A00Rz6m9THLyTaTLOTKwGwSVyegkyI,3808
|
15
|
+
clarifai/cli/templates/__init__.py,sha256=HbMlZuYOMyVJde73ijNAevmSRUpIttGlHdwyO4W-JOs,44
|
16
|
+
clarifai/cli/templates/model_templates.py,sha256=_ZonIBnY9KKSJY31KZbUys_uN_k_Txu7Dip12KWfmSU,9633
|
17
|
+
clarifai/cli/templates/pipeline_step_templates.py,sha256=HU1BoU7wG71MviQAvyecxT_qo70XhTtPGYtoIQ-U-l0,1663
|
18
|
+
clarifai/cli/templates/pipeline_templates.py,sha256=mfHrEoRxICIv00zxfgIct2IpxcMmZ6zjHG8WLF1TPcI,4409
|
19
|
+
clarifai/client/__init__.py,sha256=NhpNFRJY6mTi8ca-5hUeTEmYeDKHDNXY48FN63pDuos,703
|
20
|
+
clarifai/client/app.py,sha256=1M9XDsPWIEsj0g-mgIeZ9Mvkt85UHSbrv6pEr-QKfNg,41423
|
21
|
+
clarifai/client/base.py,sha256=rXQlB0BXbKLOgLVJW_2axYh0Vd_F0BbgJE_DXTQoG4U,9109
|
22
|
+
clarifai/client/compute_cluster.py,sha256=ViPyh-FibXL1J0ypsVOTaQnR1ymKohmZEuA13RwA-hc,10254
|
23
|
+
clarifai/client/dataset.py,sha256=OgdpZkQ_vYmRxL8-qphcNozpvPV1bWTlte9Jv6UkKb8,35299
|
24
|
+
clarifai/client/deployment.py,sha256=QBf0tzkKBEpzNgmOEmWUJMOlVWdFEFc70Y44o8y75Gs,2875
|
25
|
+
clarifai/client/input.py,sha256=jpX47qwn7aUBBIEuSSLHF5jk70XaWEh0prD065c9b-E,51205
|
26
|
+
clarifai/client/lister.py,sha256=1YEm2suNxPaJO4x9V5szgD_YX6N_00vgSO-7m0HagY8,2208
|
27
|
+
clarifai/client/model.py,sha256=Oh2zCa7XA_pBAEx9D8ME81H_BBqD7wJYoeB5CEjlI5E,89989
|
28
|
+
clarifai/client/model_client.py,sha256=4gIS0mKBdiNMA1x_6Wo6H7WbfLsmQix64EpONcQjQV4,37129
|
29
|
+
clarifai/client/module.py,sha256=jLViQYvVV3FmRN_ivvbk83uwsx7CgYGeEx4dYAr6yD4,4537
|
30
|
+
clarifai/client/nodepool.py,sha256=Y5zQ0JLdTjAp2TmVnx7AAOwaB2YUslk3nl7s6BQ90FQ,16415
|
31
|
+
clarifai/client/runner.py,sha256=5xCiqByGGscfNm0IjHelhDTx8-9l8G0C3HL-3YZogK8,2253
|
32
|
+
clarifai/client/search.py,sha256=3LLfATrdU43a0mRNITmJV-E53bhfafZkYsbwkTtlnyU,15661
|
33
|
+
clarifai/client/user.py,sha256=YDAXSOh7ACsvCjVctugiTu8MXFN_TDBoXuEKGXv_uHg,21997
|
34
|
+
clarifai/client/workflow.py,sha256=Bqh8lAmJcSbviJebckchTxucYlU11UQEhFSov7elpsk,13417
|
35
|
+
clarifai/client/auth/__init__.py,sha256=7EwR0NrozkAUwpUnCsqXvE_p0wqx_SelXlSpKShKJK0,136
|
36
|
+
clarifai/client/auth/helper.py,sha256=h6R4zsDEY6C1VmcxjYrIsFPOO_ujEjRR_JtpQ5WVuo4,16117
|
37
|
+
clarifai/client/auth/register.py,sha256=xIg1OoZ_GGnc0KQKII-R6q_cKN1JXW3BGcU2eyS-Kkc,871
|
38
|
+
clarifai/client/auth/stub.py,sha256=nKod8eNWaBnmsaNZ59dEt42TTcwC9mMgCzEMYPZggxc,9537
|
39
|
+
clarifai/constants/base.py,sha256=ogmFSZYoF0YhGjHg5aiOc3MLqPr_poKAls6xaD0_C3U,89
|
40
|
+
clarifai/constants/dataset.py,sha256=9saFE_VxCTCMlPTQbOU4KM_SzN_TQjwsrsFnpsc_Epo,556
|
41
|
+
clarifai/constants/input.py,sha256=WcHwToUVIK9ItAhDefaSohQHCLNeR55PSjZ0BFnoZ3U,28
|
42
|
+
clarifai/constants/model.py,sha256=ghcdvKIbx-g22H9RwxmMfUt1CrKz5Oa-iTExt0VpUVU,463
|
43
|
+
clarifai/constants/rag.py,sha256=WcHwToUVIK9ItAhDefaSohQHCLNeR55PSjZ0BFnoZ3U,28
|
44
|
+
clarifai/constants/search.py,sha256=yYEqTaFg-KdnpJE_Ytp-EPVHIIC395iNtZrpVlLIf4o,101
|
45
|
+
clarifai/constants/workflow.py,sha256=cECq1xdvf44MCdtK2AbkiuuwhyL-6OWZdQfYbsLKy_o,33
|
46
|
+
clarifai/datasets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
47
|
+
clarifai/datasets/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
+
clarifai/datasets/export/inputs_annotations.py,sha256=1PFjIw30dRO9NSUa_yvox_07W30tlAnrk4mEAVgfXBY,10980
|
49
|
+
clarifai/datasets/upload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
+
clarifai/datasets/upload/base.py,sha256=8b13tmAokgZVH0d-HRpU-O15Swa46eJy2Fp6zU7jQkU,2441
|
51
|
+
clarifai/datasets/upload/features.py,sha256=Yy0MP1F_ev2IbWnEyXDLt5SaEb11bXSUu5ux8tD1oxY,2115
|
52
|
+
clarifai/datasets/upload/image.py,sha256=0Fs02KK1WuDE24RAJ2ZOdktva1iOqzE25J9jJJYJUDk,10122
|
53
|
+
clarifai/datasets/upload/multimodal.py,sha256=IZYjmyxVJpNjwyNyzptQENZcCKDbdTU_t70QSdK23Ec,2762
|
54
|
+
clarifai/datasets/upload/text.py,sha256=L2IEbickNhZcmrhbBfQciCXQf4JPcqWulRWJ7HDpJLc,2482
|
55
|
+
clarifai/datasets/upload/utils.py,sha256=VdTn7AqIWB8D60rX9YD4T-4fi-7xMEocHATJvvaPjxQ,10508
|
56
|
+
clarifai/datasets/upload/loaders/README.md,sha256=aNRutSCTzLp2ruIZx74ZkN5AxpzwKOxMa7OzabnKpwg,2980
|
57
|
+
clarifai/datasets/upload/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
|
+
clarifai/datasets/upload/loaders/coco_captions.py,sha256=v6e8lh6BCUFOlurnvDfBEY-drl6JhpIE9nt2Qnz7XQ8,1623
|
59
|
+
clarifai/datasets/upload/loaders/coco_detection.py,sha256=0FsGV84MT0IkerXoe9hdxQSr9wd96j9cPOne-rhzBPw,3190
|
60
|
+
clarifai/datasets/upload/loaders/imagenet_classification.py,sha256=w2Tiot_YK0QYiyAVbWSxoKthZgUsRo9LiWWY2lVzPrQ,2247
|
61
|
+
clarifai/datasets/upload/loaders/xview_detection.py,sha256=dukodZRdyVH-s5MtmCDtKwseKGwSCWAK2Uwuwa6kJu4,8035
|
62
|
+
clarifai/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
|
+
clarifai/models/api.py,sha256=YhbGqZMC5mH_ZqnbaEmgfJdrIhSkLevpWih8ZqC3BL4,12193
|
64
|
+
clarifai/modules/README.md,sha256=mx8pVx6cPp-pP4LcFPT_nX3ngGmhygVK0WiXeD3cbIo,367
|
65
|
+
clarifai/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
66
|
+
clarifai/modules/css.py,sha256=Jg67jXo2mZoGQp7M-At74ywyk4cN90s-aJTLjfqsaB4,2176
|
67
|
+
clarifai/modules/pages.py,sha256=DZVO7YjIjYQdUyHYF-zxLkc5qkYC5KNnUxGiKQGo3Uk,1509
|
68
|
+
clarifai/modules/style.css,sha256=j7FNPZVhLPj35vvBksAJ90RuX5sLuqzDR5iM2WIEhiA,6073
|
69
|
+
clarifai/rag/__init__.py,sha256=wu3PzAzo7uqgrEzuaC9lY_3gj1HFiR3GU3elZIKTT5g,40
|
70
|
+
clarifai/rag/rag.py,sha256=EG3GoFrHFCmA70Tz49_0Jo1-3WIaHSgWGHecPeErcdc,14170
|
71
|
+
clarifai/rag/utils.py,sha256=_gVZdABuMnraCKViLruV75x0F3IpgFXN6amYSGE5_xc,4462
|
72
|
+
clarifai/runners/__init__.py,sha256=wXLaSljH7qLeJCrZdKEnlQh2tNqTQAIZKWOu2rZ6wGs,279
|
73
|
+
clarifai/runners/server.py,sha256=9qVAs8pRHmtyY0RCNIQ1uP8nqDADIFZ03LnkoDt1h4U,4692
|
74
|
+
clarifai/runners/dockerfile_template/Dockerfile.template,sha256=DUH7F0-uLOV0LTjnPde-9chSzscAAxBAwjTxi9b_l9g,2425
|
75
|
+
clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
|
+
clarifai/runners/models/dummy_openai_model.py,sha256=pcmAVbqTTGG4J3BLVjKfvM_SQ-GET_XexIUdLcr9Zvo,8373
|
77
|
+
clarifai/runners/models/mcp_class.py,sha256=RdKn7rW4vYol0VRDZiLTSMfkqjLhO1ijXAQ0Rq0Jfnw,6647
|
78
|
+
clarifai/runners/models/model_builder.py,sha256=D47H1zm3_Xr-nlPYb_1dY8dxlMiM93kU4QYGEtyxK88,63403
|
79
|
+
clarifai/runners/models/model_class.py,sha256=-euUF-eHUi4KXR_e1pIwvToDZ13CM6TSz2FolzildjM,16069
|
80
|
+
clarifai/runners/models/model_run_locally.py,sha256=6-6WjEKc0ba3gAv4wOLdMs2XOzS3b-2bZHJS0wdVqJY,20088
|
81
|
+
clarifai/runners/models/model_runner.py,sha256=CE5UkxW8wCm-g8dn_i1TNkZDORpOGRoVwZK-Uk75Xws,8407
|
82
|
+
clarifai/runners/models/model_servicer.py,sha256=415RqiXCPH-1WgFHrtZMDH1nb8gaQDpVlrQ_tvtbjOg,4523
|
83
|
+
clarifai/runners/models/openai_class.py,sha256=aXlk5W6LWkh-A4eZYi74DeLW0i_86_9DYYGxpJHXI0w,6688
|
84
|
+
clarifai/runners/models/visual_classifier_class.py,sha256=1ZoLfCT2crrgRbejjTMAIwpTRgQMiH9N9yflOVpFxSg,2721
|
85
|
+
clarifai/runners/models/visual_detector_class.py,sha256=ky4oFAkGCKPpGPdgaOso-n6D3HcmnbKee_8hBsNiV8U,2883
|
86
|
+
clarifai/runners/pipeline_steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
87
|
+
clarifai/runners/pipeline_steps/pipeline_step_builder.py,sha256=E6Ce3b0RolYLMJHaUrKukphD7ndNZafZ8gIsaONiYUk,21047
|
88
|
+
clarifai/runners/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
|
+
clarifai/runners/pipelines/pipeline_builder.py,sha256=z_bCwjwQPFa_1AYkorhh5r6t6r5hC5K2D8Z1LTEzIpg,12801
|
90
|
+
clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
|
+
clarifai/runners/utils/code_script.py,sha256=4wkInN_7MgCvMt9KLJA5_13iF5UFdeQLEhs0T5GvsHQ,13830
|
92
|
+
clarifai/runners/utils/const.py,sha256=MK7lTzzJKbOiyiUtG_jlJXfz_xNKMn5LjkQ9vjbttXE,1538
|
93
|
+
clarifai/runners/utils/data_utils.py,sha256=HRpMYR2O0OiDpXXhOManLHTeomC4bFnXMHVAiT_12yE,20856
|
94
|
+
clarifai/runners/utils/loader.py,sha256=K5Y8MPbIe5STw2gDnrL8KqFgKNxEo7bz-RV0ip1T4PM,10900
|
95
|
+
clarifai/runners/utils/method_signatures.py,sha256=qdHaO8ZIgP6BBXXMhMPhcQ46dse-XMP2t4VJCNG7O3Q,18335
|
96
|
+
clarifai/runners/utils/model_utils.py,sha256=Cn3_89ZMhIR6f61H-btcK_Luwq0CMAx5fMxPxwngo68,4530
|
97
|
+
clarifai/runners/utils/openai_convertor.py,sha256=ZlIrvvfHttD_DavLvmKZdL8gNq_TQvQtZVnYamwdWz4,8248
|
98
|
+
clarifai/runners/utils/pipeline_validation.py,sha256=RWWWUA3mNCXHCSNpuofMGfXfWEYe7LrYKwIc-1VFvQs,6444
|
99
|
+
clarifai/runners/utils/serializers.py,sha256=pI7GqMTC0T3Lu_X8v8TO4RiplO-gC_49Ns37jYwsPtg,7908
|
100
|
+
clarifai/runners/utils/url_fetcher.py,sha256=blKgROquJjZc4e2tLLjM3eUXA6grjdJISHK_8j2Ducs,3379
|
101
|
+
clarifai/runners/utils/data_types/__init__.py,sha256=iBtmPkIoLK9ew6ZiXElGt2YBBTDLEA0fmxE_eOYzvhk,478
|
102
|
+
clarifai/runners/utils/data_types/data_types.py,sha256=UBHTNPshr94qUs2KqkYis0VlArm23rcSG_EyO_Uetgc,19823
|
103
|
+
clarifai/schema/search.py,sha256=o9-ct8ulLZByB3RCVwZWPgaDwdcW7cM5s-g8oyAz89s,2421
|
104
|
+
clarifai/urls/helper.py,sha256=z6LnLGgLHxD8scFtyRdxqYIRJNhxqPkfLe53UtTLUBY,11727
|
105
|
+
clarifai/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
106
|
+
clarifai/utils/cli.py,sha256=7lHajIsWzyEU7jfgH1nykwYG63wcHCZ3ep7a6amWZH4,5413
|
107
|
+
clarifai/utils/config.py,sha256=jMSWYxJfp_D8eoGqz-HTdsngn5bg_1ymjLidYz6rdLA,7073
|
108
|
+
clarifai/utils/constants.py,sha256=nvKNAOnfvHza03mYHVLfyOfm_AcFiNKr2CzwyEQgoQI,2110
|
109
|
+
clarifai/utils/logging.py,sha256=0we53uTqUvzrulC86whu-oeWNxn1JjJL0OQ98Bwf9vo,15198
|
110
|
+
clarifai/utils/misc.py,sha256=x7JP8oxU672Z9yAav47Y1anFiL4RD8WvlKBHMVlbyZM,3137
|
111
|
+
clarifai/utils/model_train.py,sha256=0XSAoTkSsrwf4f-W9yw2mkXZtkal7LBLJSoi86CFCn4,9250
|
112
|
+
clarifai/utils/protobuf.py,sha256=VMhnNsPuWQ16VarKm8BOr5zccXMe26UlrxdJxIzEZNM,6220
|
113
|
+
clarifai/utils/evaluation/__init__.py,sha256=PYkurUrXrGevByj7RFb6CoU1iC7fllyQSfnnlo9WnY8,69
|
114
|
+
clarifai/utils/evaluation/helpers.py,sha256=0t6eIDXeZEoiVvnmHTnsIF_-v4BzrQW1hFaqc_psifU,21079
|
115
|
+
clarifai/utils/evaluation/main.py,sha256=N_sfRuMjHrUeuWN0Pzms65M1PbkQkgYg3WoQVaDR1Jw,17764
|
116
|
+
clarifai/utils/evaluation/testset_annotation_parser.py,sha256=Nmodfi5BYFYEbybWcC8tmU5-wtwRBsWIbnpd3OvKSmA,5414
|
117
|
+
clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
118
|
+
clarifai/workflows/export.py,sha256=HvUYG9N_-UZoRR0-_tdGbZ950_AeBqawSppgUxQebR0,1913
|
119
|
+
clarifai/workflows/utils.py,sha256=ESL3INcouNcLKCh-nMpfXX-YbtCzX7tz7hT57_RGQ3M,2079
|
120
|
+
clarifai/workflows/validate.py,sha256=UhmukyHkfxiMFrPPeBdUTiCOHQT5-shqivlBYEyKTlU,2931
|
121
|
+
clarifai-11.5.4.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
|
122
|
+
clarifai-11.5.4.dist-info/METADATA,sha256=9PlKYam9cZ_1StX7ECiTXQMpS1ci4LjgvKhNi59W-8c,22736
|
123
|
+
clarifai-11.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
124
|
+
clarifai-11.5.4.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
|
125
|
+
clarifai-11.5.4.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
|
126
|
+
clarifai-11.5.4.dist-info/RECORD,,
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|