clarifai 11.1.7rc2__py3-none-any.whl → 11.1.7rc4__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/client/model_client.py +14 -3
- clarifai/runners/dockerfile_template/Dockerfile.template +0 -3
- clarifai/runners/models/model_builder.py +47 -6
- clarifai/runners/models/model_class.py +26 -9
- clarifai/runners/utils/data_types.py +43 -4
- clarifai/runners/utils/method_signatures.py +10 -4
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/METADATA +4 -4
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/RECORD +13 -13
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/LICENSE +0 -0
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/WHEEL +0 -0
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/entry_points.txt +0 -0
- {clarifai-11.1.7rc2.dist-info → clarifai-11.1.7rc4.dist-info}/top_level.txt +0 -0
clarifai/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "11.1.
|
1
|
+
__version__ = "11.1.7rc4"
|
clarifai/client/model_client.py
CHANGED
@@ -121,6 +121,17 @@ class ModelClient:
|
|
121
121
|
raise TypeError(
|
122
122
|
f"{method_name}() takes {len(method_argnames)} positional arguments but {len(args)} were given"
|
123
123
|
)
|
124
|
+
|
125
|
+
if len(args) + len(kwargs) > len(method_argnames):
|
126
|
+
raise TypeError(
|
127
|
+
f"{method_name}() got an unexpected keyword argument {next(iter(kwargs))}")
|
128
|
+
if len(args) == 1 and (not kwargs) and isinstance(args[0], list):
|
129
|
+
batch_inputs = args[0]
|
130
|
+
# Validate each input is a dictionary
|
131
|
+
is_batch_input_valid = all(isinstance(input, dict) for input in batch_inputs)
|
132
|
+
if is_batch_input_valid:
|
133
|
+
return call_func(batch_inputs, method_name)
|
134
|
+
|
124
135
|
for name, arg in zip(method_argnames, args): # handle positional with zip shortest
|
125
136
|
if name in kwargs:
|
126
137
|
raise TypeError(f"Multiple values for argument {name}")
|
@@ -135,6 +146,7 @@ class ModelClient:
|
|
135
146
|
# set names, annotations and docstrings
|
136
147
|
f.__name__ = method_name
|
137
148
|
f.__qualname__ = f'{self.__class__.__name__}.{method_name}'
|
149
|
+
# TODO: set signature from annotations to the function, currently MethodSignature don't have `annotations_json` field
|
138
150
|
# input_annotations = json.loads(method_signature.annotations_json)
|
139
151
|
# return_annotation = input_annotations.pop('return', None)
|
140
152
|
# sig = inspect.signature(f).replace(
|
@@ -175,6 +187,7 @@ class ModelClient:
|
|
175
187
|
inputs, # TODO set up functions according to fetched signatures?
|
176
188
|
method_name: str = 'predict',
|
177
189
|
) -> Any:
|
190
|
+
|
178
191
|
input_signature = self._method_signatures[method_name].input_fields
|
179
192
|
output_signature = self._method_signatures[method_name].output_fields
|
180
193
|
|
@@ -186,11 +199,11 @@ class ModelClient:
|
|
186
199
|
proto_inputs = []
|
187
200
|
for input in inputs:
|
188
201
|
proto = resources_pb2.Input()
|
202
|
+
|
189
203
|
serialize(input, input_signature, proto.data)
|
190
204
|
proto_inputs.append(proto)
|
191
205
|
|
192
206
|
response = self._predict_by_proto(proto_inputs, method_name)
|
193
|
-
#print(response)
|
194
207
|
|
195
208
|
outputs = []
|
196
209
|
for output in response.outputs:
|
@@ -273,7 +286,6 @@ class ModelClient:
|
|
273
286
|
proto_inputs.append(proto)
|
274
287
|
|
275
288
|
response_stream = self._generate_by_proto(proto_inputs, method_name)
|
276
|
-
#print(response)
|
277
289
|
|
278
290
|
for response in response_stream:
|
279
291
|
outputs = []
|
@@ -385,7 +397,6 @@ class ModelClient:
|
|
385
397
|
yield proto
|
386
398
|
|
387
399
|
response_stream = self._stream_by_proto(_input_proto_stream(), method_name)
|
388
|
-
#print(response)
|
389
400
|
|
390
401
|
for response in response_stream:
|
391
402
|
assert len(response.outputs) == 1, 'streaming methods must have exactly one output'
|
@@ -44,9 +44,6 @@ ENV PYTHONPATH=${PYTHONPATH}:/home/nonroot/main \
|
|
44
44
|
CLARIFAI_COMPUTE_CLUSTER_ID=${CLARIFAI_COMPUTE_CLUSTER_ID} \
|
45
45
|
CLARIFAI_API_BASE=${CLARIFAI_API_BASE:-https://api.clarifai.com}
|
46
46
|
|
47
|
-
# # Write out the model function signatures
|
48
|
-
# RUN ["python", "-m", "clarifai.cli", "model", "signatures", "--model_path", "/home/nonroot/main", "--out_path", "/home/nonroot/main/signatures.yaml"]
|
49
|
-
|
50
47
|
# Finally run the clarifai entrypoint to start the runner loop and local dev server.
|
51
48
|
# Note(zeiler): we may want to make this a clarifai CLI call.
|
52
49
|
ENTRYPOINT ["python", "-m", "clarifai.runners.server"]
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import builtins
|
1
2
|
import importlib
|
2
3
|
import inspect
|
3
4
|
import os
|
@@ -6,6 +7,7 @@ import sys
|
|
6
7
|
import tarfile
|
7
8
|
import time
|
8
9
|
from string import Template
|
10
|
+
from unittest.mock import MagicMock
|
9
11
|
|
10
12
|
import yaml
|
11
13
|
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
@@ -80,7 +82,7 @@ class ModelBuilder:
|
|
80
82
|
|
81
83
|
def load_model_class(self):
|
82
84
|
"""
|
83
|
-
Import the model class from the model.py file
|
85
|
+
Import the model class from the model.py file, dynamically handling missing dependencies
|
84
86
|
"""
|
85
87
|
# look for default model.py file location
|
86
88
|
for loc in ["model.py", "1/model.py"]:
|
@@ -95,7 +97,29 @@ class ModelBuilder:
|
|
95
97
|
spec = importlib.util.spec_from_file_location(module_name, model_file)
|
96
98
|
module = importlib.util.module_from_spec(spec)
|
97
99
|
sys.modules[module_name] = module
|
98
|
-
|
100
|
+
|
101
|
+
original_import = builtins.__import__
|
102
|
+
|
103
|
+
def custom_import(name, globals=None, locals=None, fromlist=(), level=0):
|
104
|
+
|
105
|
+
# Allow standard libraries and clarifai
|
106
|
+
if self._is_standard_or_clarifai(name):
|
107
|
+
return original_import(name, globals, locals, fromlist, level)
|
108
|
+
|
109
|
+
# Mock all third-party imports to avoid ImportErrors or other issues
|
110
|
+
return MagicMock()
|
111
|
+
|
112
|
+
# Replace the built-in __import__ function with our custom one
|
113
|
+
builtins.__import__ = custom_import
|
114
|
+
|
115
|
+
try:
|
116
|
+
spec.loader.exec_module(module)
|
117
|
+
except Exception as e:
|
118
|
+
logger.error(f"Error loading model.py: {e}")
|
119
|
+
raise
|
120
|
+
finally:
|
121
|
+
# Restore the original __import__ function
|
122
|
+
builtins.__import__ = original_import
|
99
123
|
|
100
124
|
# Find all classes in the model.py file that are subclasses of ModelClass
|
101
125
|
classes = [
|
@@ -122,6 +146,23 @@ class ModelBuilder:
|
|
122
146
|
model_class = classes[0]
|
123
147
|
return model_class
|
124
148
|
|
149
|
+
def _is_standard_or_clarifai(self, name):
|
150
|
+
"""Check if import is from standard library or clarifai"""
|
151
|
+
if name.startswith("clarifai"):
|
152
|
+
return True
|
153
|
+
|
154
|
+
# Handle Python <3.10 compatibility
|
155
|
+
stdlib_names = getattr(sys, "stdlib_module_names", sys.builtin_module_names)
|
156
|
+
if name in stdlib_names:
|
157
|
+
return True
|
158
|
+
|
159
|
+
# Handle submodules (e.g., os.path)
|
160
|
+
parts = name.split(".")
|
161
|
+
for i in range(1, len(parts)):
|
162
|
+
if ".".join(parts[:i]) in stdlib_names:
|
163
|
+
return True
|
164
|
+
return False
|
165
|
+
|
125
166
|
def _validate_folder(self, folder):
|
126
167
|
if folder == ".":
|
127
168
|
folder = "" # will getcwd() next which ends with /
|
@@ -267,7 +308,7 @@ class ModelBuilder:
|
|
267
308
|
"""
|
268
309
|
model_class = self.load_model_class()
|
269
310
|
method_info = model_class._get_method_info()
|
270
|
-
signatures = {name:
|
311
|
+
signatures = {method.name: method.signature for method in method_info.values()}
|
271
312
|
return signatures_to_yaml(signatures)
|
272
313
|
|
273
314
|
def get_method_signatures(self):
|
@@ -557,13 +598,12 @@ class ModelBuilder:
|
|
557
598
|
logger.info(f"Updated config.yaml with {len(concepts)} concepts.")
|
558
599
|
|
559
600
|
def get_model_version_proto(self):
|
560
|
-
|
601
|
+
signatures = self.get_method_signatures()
|
561
602
|
model_version_proto = resources_pb2.ModelVersion(
|
562
603
|
pretrained_model_config=resources_pb2.PretrainedModelConfig(),
|
563
604
|
inference_compute_info=self.inference_compute_info,
|
605
|
+
method_signatures=signatures,
|
564
606
|
)
|
565
|
-
# TODO: update this to `model_signatures` field when it's available in the API
|
566
|
-
model_version_proto.model_signature.extend(self.get_method_signatures())
|
567
607
|
|
568
608
|
model_type_id = self.config.get('model').get('model_type_id')
|
569
609
|
if model_type_id in CONCEPTS_REQUIRED_MODEL_TYPE:
|
@@ -750,6 +790,7 @@ class ModelBuilder:
|
|
750
790
|
model_id=self.model_proto.id,
|
751
791
|
version_id=self.model_version_id,
|
752
792
|
))
|
793
|
+
|
753
794
|
status_code = resp.model_version.status.code
|
754
795
|
logs = self.get_model_build_logs()
|
755
796
|
for log_entry in logs.log_entries:
|
@@ -8,6 +8,7 @@ from typing import Any, Dict, Iterator, List
|
|
8
8
|
|
9
9
|
from clarifai_grpc.grpc.api import resources_pb2, service_pb2
|
10
10
|
from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
|
11
|
+
from google.protobuf import json_format
|
11
12
|
|
12
13
|
from clarifai.runners.utils import data_types
|
13
14
|
from clarifai.runners.utils.method_signatures import (build_function_signature, deserialize,
|
@@ -84,6 +85,7 @@ class ModelClass(ABC):
|
|
84
85
|
try:
|
85
86
|
# TODO add method name field to proto
|
86
87
|
method_name = 'predict'
|
88
|
+
inference_params = get_inference_params(request)
|
87
89
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
88
90
|
method_name = request.inputs[0].data.metadata['_method_name']
|
89
91
|
if method_name == '_GET_SIGNATURES': # special case to fetch signatures, TODO add endpoint for this
|
@@ -94,8 +96,8 @@ class ModelClass(ABC):
|
|
94
96
|
method_info = method._cf_method_info
|
95
97
|
signature = method_info.signature
|
96
98
|
python_param_types = method_info.python_param_types
|
97
|
-
inputs = self._convert_input_protos_to_python(request.inputs,
|
98
|
-
python_param_types)
|
99
|
+
inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
|
100
|
+
signature.input_fields, python_param_types)
|
99
101
|
if len(inputs) == 1:
|
100
102
|
inputs = inputs[0]
|
101
103
|
output = method(**inputs)
|
@@ -121,6 +123,7 @@ class ModelClass(ABC):
|
|
121
123
|
) -> Iterator[service_pb2.MultiOutputResponse]:
|
122
124
|
try:
|
123
125
|
method_name = 'generate'
|
126
|
+
inference_params = get_inference_params(request)
|
124
127
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
125
128
|
method_name = request.inputs[0].data.metadata['_method_name']
|
126
129
|
method = getattr(self, method_name)
|
@@ -128,8 +131,8 @@ class ModelClass(ABC):
|
|
128
131
|
signature = method_info.signature
|
129
132
|
python_param_types = method_info.python_param_types
|
130
133
|
|
131
|
-
inputs = self._convert_input_protos_to_python(request.inputs,
|
132
|
-
python_param_types)
|
134
|
+
inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
|
135
|
+
signature.input_fields, python_param_types)
|
133
136
|
if len(inputs) == 1:
|
134
137
|
inputs = inputs[0]
|
135
138
|
for output in method(**inputs):
|
@@ -161,6 +164,7 @@ class ModelClass(ABC):
|
|
161
164
|
assert len(request.inputs) == 1, "Streaming requires exactly one input"
|
162
165
|
|
163
166
|
method_name = 'generate'
|
167
|
+
inference_params = get_inference_params(request)
|
164
168
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
165
169
|
method_name = request.inputs[0].data.metadata['_method_name']
|
166
170
|
method = getattr(self, method_name)
|
@@ -175,8 +179,8 @@ class ModelClass(ABC):
|
|
175
179
|
stream_argname = stream_sig.name
|
176
180
|
|
177
181
|
# convert all inputs for the first request, including the first stream value
|
178
|
-
inputs = self._convert_input_protos_to_python(request.inputs,
|
179
|
-
python_param_types)
|
182
|
+
inputs = self._convert_input_protos_to_python(request.inputs, inference_params,
|
183
|
+
signature.input_fields, python_param_types)
|
180
184
|
kwargs = inputs[0]
|
181
185
|
|
182
186
|
# first streaming item
|
@@ -187,8 +191,8 @@ class ModelClass(ABC):
|
|
187
191
|
yield first_item
|
188
192
|
# subsequent streaming items contain only the streaming input
|
189
193
|
for request in request_iterator:
|
190
|
-
item = self._convert_input_protos_to_python(request.inputs,
|
191
|
-
python_param_types)
|
194
|
+
item = self._convert_input_protos_to_python(request.inputs, inference_params,
|
195
|
+
[stream_sig], python_param_types)
|
192
196
|
item = item[0][stream_argname]
|
193
197
|
yield item
|
194
198
|
|
@@ -210,11 +214,12 @@ class ModelClass(ABC):
|
|
210
214
|
stack_trace=traceback.format_exc().split('\n')))
|
211
215
|
|
212
216
|
def _convert_input_protos_to_python(self, inputs: List[resources_pb2.Input],
|
217
|
+
inference_params: dict,
|
213
218
|
variables_signature: List[resources_pb2.ModelTypeField],
|
214
219
|
python_param_types) -> List[Dict[str, Any]]:
|
215
220
|
result = []
|
216
221
|
for input in inputs:
|
217
|
-
kwargs = deserialize(input.data, variables_signature)
|
222
|
+
kwargs = deserialize(input.data, variables_signature, inference_params)
|
218
223
|
# dynamic cast to annotated types
|
219
224
|
for k, v in kwargs.items():
|
220
225
|
if k not in python_param_types:
|
@@ -262,6 +267,18 @@ class ModelClass(ABC):
|
|
262
267
|
return method_info
|
263
268
|
|
264
269
|
|
270
|
+
# Helper function to get the inference params
|
271
|
+
def get_inference_params(request) -> dict:
|
272
|
+
"""Get the inference params from the request."""
|
273
|
+
inference_params = {}
|
274
|
+
if request.model.model_version.id != "":
|
275
|
+
output_info = request.model.model_version.output_info
|
276
|
+
output_info = json_format.MessageToDict(output_info, preserving_proto_field_name=True)
|
277
|
+
if "params" in output_info:
|
278
|
+
inference_params = output_info["params"]
|
279
|
+
return inference_params
|
280
|
+
|
281
|
+
|
265
282
|
class _MethodInfo:
|
266
283
|
|
267
284
|
def __init__(self, method):
|
@@ -175,8 +175,20 @@ class Concept(MessageData):
|
|
175
175
|
|
176
176
|
class Region(MessageData):
|
177
177
|
|
178
|
-
def __init__(self,
|
178
|
+
def __init__(self,
|
179
|
+
proto_region: RegionProto = None,
|
180
|
+
box: List[float] = None,
|
181
|
+
concepts: List[Concept] = None):
|
182
|
+
if proto_region is None:
|
183
|
+
proto_region = RegionProto()
|
179
184
|
self.proto = proto_region
|
185
|
+
# use setters for init vals
|
186
|
+
if box and isinstance(
|
187
|
+
box, list) and len(box) == 4 and all(isinstance(val, (int, float)) for val in box):
|
188
|
+
self.box = box
|
189
|
+
if concepts and isinstance(concepts,
|
190
|
+
list) and all(isinstance(concept, Concept) for concept in concepts):
|
191
|
+
self.concepts = concepts
|
180
192
|
|
181
193
|
@property
|
182
194
|
def box(self) -> List[float]:
|
@@ -291,9 +303,16 @@ class Image(MessageData):
|
|
291
303
|
|
292
304
|
class Audio(MessageData):
|
293
305
|
|
294
|
-
def __init__(self, proto_audio: AudioProto):
|
306
|
+
def __init__(self, proto_audio: AudioProto = None, url: str = None, bytes: bytes = None):
|
307
|
+
if proto_audio is None:
|
308
|
+
proto_audio = AudioProto()
|
295
309
|
self.proto = proto_audio
|
296
310
|
|
311
|
+
if url:
|
312
|
+
self.url = url
|
313
|
+
if bytes:
|
314
|
+
self.bytes = bytes
|
315
|
+
|
297
316
|
@property
|
298
317
|
def url(self) -> str:
|
299
318
|
return self.proto.url
|
@@ -333,8 +352,21 @@ class Audio(MessageData):
|
|
333
352
|
|
334
353
|
class Frame(MessageData):
|
335
354
|
|
336
|
-
def __init__(self,
|
355
|
+
def __init__(self,
|
356
|
+
proto_frame: FrameProto = None,
|
357
|
+
image: Image = None,
|
358
|
+
regions: List[Region] = None,
|
359
|
+
time: float = None):
|
360
|
+
if proto_frame is None:
|
361
|
+
proto_frame = FrameProto()
|
337
362
|
self.proto = proto_frame
|
363
|
+
# use setters for init vals
|
364
|
+
if image:
|
365
|
+
self.image = image
|
366
|
+
if regions:
|
367
|
+
self.regions = regions
|
368
|
+
if time:
|
369
|
+
self.time = time
|
338
370
|
|
339
371
|
@property
|
340
372
|
def time(self) -> float:
|
@@ -372,9 +404,16 @@ class Frame(MessageData):
|
|
372
404
|
|
373
405
|
class Video(MessageData):
|
374
406
|
|
375
|
-
def __init__(self, proto_video: VideoProto):
|
407
|
+
def __init__(self, proto_video: VideoProto = None, url: str = None, bytes: bytes = None):
|
408
|
+
if proto_video is None:
|
409
|
+
proto_video = VideoProto()
|
376
410
|
self.proto = proto_video
|
377
411
|
|
412
|
+
if url:
|
413
|
+
self.url = url
|
414
|
+
if bytes:
|
415
|
+
self.bytes = bytes
|
416
|
+
|
378
417
|
@property
|
379
418
|
def url(self) -> str:
|
380
419
|
return self.proto.url
|
@@ -260,7 +260,7 @@ def serialize(kwargs, signatures, proto=None, is_output=False):
|
|
260
260
|
return proto
|
261
261
|
|
262
262
|
|
263
|
-
def deserialize(proto, signatures, is_output=False):
|
263
|
+
def deserialize(proto, signatures, inference_params={}, is_output=False):
|
264
264
|
'''
|
265
265
|
Deserialize the given proto into kwargs using the given signatures.
|
266
266
|
'''
|
@@ -271,7 +271,12 @@ def deserialize(proto, signatures, is_output=False):
|
|
271
271
|
for sig_i, sig in enumerate(signatures):
|
272
272
|
serializer = serializer_from_signature(sig)
|
273
273
|
part = parts_by_name.get(sig.name)
|
274
|
-
|
274
|
+
inference_params_value = inference_params.get(sig.name)
|
275
|
+
if part is not None:
|
276
|
+
kwargs[sig.name] = serializer.deserialize(part.data)
|
277
|
+
elif inference_params_value is not None:
|
278
|
+
kwargs[sig.name] = inference_params_value
|
279
|
+
else:
|
275
280
|
if sig_i == 0:
|
276
281
|
# possible inlined first value
|
277
282
|
value = serializer.deserialize(proto)
|
@@ -280,10 +285,10 @@ def deserialize(proto, signatures, is_output=False):
|
|
280
285
|
# an actual zero value passed in must be set in an explicit part
|
281
286
|
kwargs[sig.name] = value
|
282
287
|
continue
|
288
|
+
|
283
289
|
if sig.required or is_output: # TODO allow optional outputs?
|
284
290
|
raise ValueError(f'Missing required field: {sig.name}')
|
285
291
|
continue
|
286
|
-
kwargs[sig.name] = serializer.deserialize(part.data)
|
287
292
|
if len(kwargs) == 1 and 'return' in kwargs:
|
288
293
|
return kwargs['return']
|
289
294
|
return kwargs
|
@@ -325,7 +330,8 @@ def _normalize_data_type(tp):
|
|
325
330
|
|
326
331
|
# jsonable list and dict, these can be serialized as json
|
327
332
|
# (tuple we want to keep as a tuple for args and returns, so don't include here)
|
328
|
-
if tp in (list, dict) or (get_origin(tp) in (list, dict) and _is_jsonable(tp)
|
333
|
+
if tp in (list, dict) or (get_origin(tp) in (list, dict) and _is_jsonable(tp) and
|
334
|
+
get_args(tp) is None):
|
329
335
|
return data_types.JSON
|
330
336
|
|
331
337
|
# container types that need to be serialized as parts
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.1.
|
3
|
+
Version: 11.1.7rc4
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -20,8 +20,8 @@ Classifier: Operating System :: OS Independent
|
|
20
20
|
Requires-Python: >=3.8
|
21
21
|
Description-Content-Type: text/markdown
|
22
22
|
License-File: LICENSE
|
23
|
-
Requires-Dist: clarifai-grpc>=11.
|
24
|
-
Requires-Dist: clarifai-protocol>=0.0.
|
23
|
+
Requires-Dist: clarifai-grpc>=11.2.4
|
24
|
+
Requires-Dist: clarifai-protocol>=0.0.20
|
25
25
|
Requires-Dist: numpy>=1.22.0
|
26
26
|
Requires-Dist: tqdm>=4.65.0
|
27
27
|
Requires-Dist: rich>=13.4.2
|
@@ -32,7 +32,7 @@ Requires-Dist: tabulate>=0.9.0
|
|
32
32
|
Requires-Dist: fsspec>=2024.6.1
|
33
33
|
Requires-Dist: click>=8.1.7
|
34
34
|
Requires-Dist: requests>=2.32.3
|
35
|
-
Requires-Dist: aiohttp>=3.
|
35
|
+
Requires-Dist: aiohttp>=3.10.0
|
36
36
|
Provides-Extra: all
|
37
37
|
Requires-Dist: pycocotools==2.0.6; extra == "all"
|
38
38
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
clarifai/__init__.py,sha256=
|
1
|
+
clarifai/__init__.py,sha256=ifkdBMaRvYCzXalTvOKcl2DNqYnmG2YMz8JBP1t1moU,26
|
2
2
|
clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
clarifai/errors.py,sha256=RwzTajwds51wLD0MVlMC5kcpBnzRpreDLlazPSBZxrg,2605
|
4
4
|
clarifai/versions.py,sha256=jctnczzfGk_S3EnVqb2FjRKfSREkNmvNEwAAa_VoKiQ,222
|
@@ -31,7 +31,7 @@ clarifai/client/deployment.py,sha256=w7Y6pA1rYG4KRK1SwusRZc2sQRXlG8wezuVdzSWpCo0
|
|
31
31
|
clarifai/client/input.py,sha256=obMAHMDU1OwfXZ8KraOnGFlWzlW-3F7Ob_2lcOQMlhY,46339
|
32
32
|
clarifai/client/lister.py,sha256=03KGMvs5RVyYqxLsSrWhNc34I8kiF1Ph0NeyEwu7nMU,2082
|
33
33
|
clarifai/client/model.py,sha256=DFlZLIExMUvYXc9hDzVLYka6_AbfG3vqLlhZkk4GfIY,76835
|
34
|
-
clarifai/client/model_client.py,sha256=
|
34
|
+
clarifai/client/model_client.py,sha256=FwI9XEDZjyrubK3ue0-gyTKwK_lShQcm8SoFc66aXiw,17537
|
35
35
|
clarifai/client/module.py,sha256=FTkm8s9m-EaTKN7g9MnLhGJ9eETUfKG7aWZ3o1RshYs,4204
|
36
36
|
clarifai/client/nodepool.py,sha256=la3vTFrO4LX8zm2eQ5jqf2L0-kQ63Dano8FibadoZbk,10152
|
37
37
|
clarifai/client/search.py,sha256=GaPWN6JmTQGZaCHr6U1yv0zqR6wKFl7i9IVLg2ul1CI,14254
|
@@ -135,11 +135,11 @@ clarifai/runners/__pycache__/__init__.cpython-39.pyc,sha256=-nXCOCynrtendkWHFkfy
|
|
135
135
|
clarifai/runners/dockerfile_template/Dockerfile.cpu.template,sha256=WD9B_gpTZ8mzWPQXtWWr5Bp_TEhVJzbznKVIjyPK8yk,1136
|
136
136
|
clarifai/runners/dockerfile_template/Dockerfile.cuda.template,sha256=LAn7H1zi_lyk5iQdGdNifQrwrTifAZe9FHgxPCYg8D0,1464
|
137
137
|
clarifai/runners/dockerfile_template/Dockerfile.nim,sha256=CSdUAehj3uOwminioLnT5v3hIXzkkv3sgx9RT4k5Lks,2806
|
138
|
-
clarifai/runners/dockerfile_template/Dockerfile.template,sha256=
|
138
|
+
clarifai/runners/dockerfile_template/Dockerfile.template,sha256=5cjv7U8PmWa3DB_5B1CqSYh_6GE0E0np52TIAa7EIDE,2312
|
139
139
|
clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
140
140
|
clarifai/runners/models/base_typed_model.py,sha256=0QCWxch8CcyJSKvE1D4PILd2RSnQZHTmx4DXlQQ6dpo,7856
|
141
|
-
clarifai/runners/models/model_builder.py,sha256=
|
142
|
-
clarifai/runners/models/model_class.py,sha256=
|
141
|
+
clarifai/runners/models/model_builder.py,sha256=GlMpJn1krpckvI0cqd8ujrCnoU62z-kqSI3nJfGJEwY,34788
|
142
|
+
clarifai/runners/models/model_class.py,sha256=qK5qk4geoFpqrRtl4VmKK90CIJKyWmD_vjJMqLWR_CQ,11854
|
143
143
|
clarifai/runners/models/model_class_refract.py,sha256=HxuozxSW7ag5yWCPxjNwgLArQ6dORhyGXlnpPaZz2-c,3211
|
144
144
|
clarifai/runners/models/model_run_locally.py,sha256=VZetm9Mko8MBjcjwr6PCnTU9gF3glgD5qvpbj-8tW2s,17962
|
145
145
|
clarifai/runners/models/model_runner.py,sha256=qyc73pe4xc9BsUKHwnOyC9g-RNCARiFis4GTh-yg0vg,6219
|
@@ -159,11 +159,11 @@ clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
|
|
159
159
|
clarifai/runners/utils/const.py,sha256=bwj-Pcw558-pasdIFbNhnkn-9oiCdojYH1fNTTUG2gU,1048
|
160
160
|
clarifai/runners/utils/data_handler.py,sha256=b7k6MWYPXSgjrfw6wsDf82xFYa0D7UjYmjE4mw5HzHM,8499
|
161
161
|
clarifai/runners/utils/data_handler_refract.py,sha256=3M-V4hkOoF-9Ix4hE6ocXWiTJPc9dewtu6FMtddd-jQ,6343
|
162
|
-
clarifai/runners/utils/data_types.py,sha256=
|
162
|
+
clarifai/runners/utils/data_types.py,sha256=A6IYU55pdPFfoh0K6HkEgTPlgQVv2JUG5lOlqTu1w44,12258
|
163
163
|
clarifai/runners/utils/data_utils.py,sha256=R1iQ82TuQ9JwxCJk8yEB1Lyb0BYVhVbWJI9YDi1zGOs,318
|
164
164
|
clarifai/runners/utils/loader.py,sha256=SgNHMwRmCCymFQm8aDp73NmIUHhM-N60CBlTKbPzmVc,7470
|
165
165
|
clarifai/runners/utils/logger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
166
|
-
clarifai/runners/utils/method_signatures.py,sha256=
|
166
|
+
clarifai/runners/utils/method_signatures.py,sha256=hwrZnSbnt4OSGqnrN7INghtuJm8EJm0CEnTpwlsGgmw,17468
|
167
167
|
clarifai/runners/utils/serializers.py,sha256=S4sRsOVvH191vAGTRTAAdwLlQwlK4T5QVRDGPptg9nQ,7191
|
168
168
|
clarifai/runners/utils/url_fetcher.py,sha256=v_8JOWmkyFAzsBulsieKX7Nfjy1Yg7wGSZeqfEvw2cg,1640
|
169
169
|
clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc,sha256=0GGbXIecXlOZmQKMCkSRhEBY_a1zvoimv-mHG4pJuNA,167
|
@@ -229,9 +229,9 @@ clarifai/workflows/__pycache__/__init__.cpython-39.pyc,sha256=9nA--jULSW7OFrYOcs
|
|
229
229
|
clarifai/workflows/__pycache__/export.cpython-310.pyc,sha256=phEGwi2gAojCUhRTqjZVeTDn7Gk6LCVBeSTjAj4m9iY,2418
|
230
230
|
clarifai/workflows/__pycache__/utils.cpython-310.pyc,sha256=M9_KTM7GOOS5SPrWwAzqHDqyGvgKi3xuSGvyw6MNf-I,1925
|
231
231
|
clarifai/workflows/__pycache__/validate.cpython-310.pyc,sha256=c18Jgp_-CAm8RD_tmUpDCPoqZeexaoWELG0yBzb9rjw,2149
|
232
|
-
clarifai-11.1.
|
233
|
-
clarifai-11.1.
|
234
|
-
clarifai-11.1.
|
235
|
-
clarifai-11.1.
|
236
|
-
clarifai-11.1.
|
237
|
-
clarifai-11.1.
|
232
|
+
clarifai-11.1.7rc4.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
|
233
|
+
clarifai-11.1.7rc4.dist-info/METADATA,sha256=kufmH0KOUsaV0LTIz5ckGf8oF4zfCr5giQbrsAucNRo,22215
|
234
|
+
clarifai-11.1.7rc4.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
235
|
+
clarifai-11.1.7rc4.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
|
236
|
+
clarifai-11.1.7rc4.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
|
237
|
+
clarifai-11.1.7rc4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|