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 CHANGED
@@ -1 +1 @@
1
- __version__ = "11.1.7rc2"
1
+ __version__ = "11.1.7rc4"
@@ -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
- spec.loader.exec_module(module)
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: m.signature for name, m in method_info.values()}
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, signature.input_fields,
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, signature.input_fields,
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, signature.input_fields,
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, [stream_sig],
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, proto_region: RegionProto):
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, proto_frame: FrameProto):
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
- if part is None:
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.7rc2
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.1.3
24
- Requires-Dist: clarifai-protocol>=0.0.16
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.8.1
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=wdUgSsqM2z4GI0P61jMvu6qis3DRIZLxpNZx-WIA-A4,26
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=JCHawIxxJvPMAD3W-gmVKz6_XQDP1shoxFYaZCEN1X8,16943
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=NRybJOAOCtnIec-CyxQDG-vqdSLrPV_MEFFHmEv_9tc,2509
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=cMS6P8II9FCtGmlz9A89NmogdDdjmjYbQf5JbJn_tFw,33538
142
- clarifai/runners/models/model_class.py,sha256=llFJhIhA8unzvROryma2_dmzoZNduN7Ki5AOLzGdCLA,11034
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=nJS9n4oQHcwf2scxH8pl5TjHcY9l6ZdY401fTwpEoe4,11032
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=nVrxqD9rHxUzFYK-RSmX-D6uhw0nP_pVkFfIQ9IMEaM,17224
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.7rc2.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
233
- clarifai-11.1.7rc2.dist-info/METADATA,sha256=OnchJXRxSSzZ62JYttF3CYL9AS5IVJ-sxoD-5JBLYnw,22214
234
- clarifai-11.1.7rc2.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
235
- clarifai-11.1.7rc2.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
236
- clarifai-11.1.7rc2.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
237
- clarifai-11.1.7rc2.dist-info/RECORD,,
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,,