clarifai 11.1.5rc8__py3-none-any.whl → 11.1.6rc1__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.
Files changed (29) hide show
  1. clarifai/__init__.py +1 -1
  2. clarifai/cli/__pycache__/__main__.cpython-310.pyc +0 -0
  3. clarifai/cli/__pycache__/model.cpython-310.pyc +0 -0
  4. clarifai/cli/model.py +40 -50
  5. clarifai/client/model.py +393 -157
  6. clarifai/runners/__init__.py +7 -2
  7. clarifai/runners/__pycache__/__init__.cpython-310.pyc +0 -0
  8. clarifai/runners/dockerfile_template/Dockerfile.template +1 -4
  9. clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc +0 -0
  10. clarifai/runners/models/__pycache__/model_builder.cpython-310.pyc +0 -0
  11. clarifai/runners/models/__pycache__/model_class.cpython-310.pyc +0 -0
  12. clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc +0 -0
  13. clarifai/runners/models/base_typed_model.py +238 -0
  14. clarifai/runners/models/model_builder.py +9 -26
  15. clarifai/runners/models/model_class.py +28 -256
  16. clarifai/runners/models/model_run_locally.py +78 -3
  17. clarifai/runners/models/model_runner.py +0 -2
  18. clarifai/runners/models/model_servicer.py +2 -11
  19. clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc +0 -0
  20. clarifai/runners/utils/__pycache__/data_types.cpython-310.pyc +0 -0
  21. clarifai/runners/utils/__pycache__/method_signatures.cpython-310.pyc +0 -0
  22. clarifai/runners/utils/__pycache__/serializers.cpython-310.pyc +0 -0
  23. clarifai/runners/utils/data_handler.py +205 -308
  24. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/METADATA +1 -2
  25. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/RECORD +29 -28
  26. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/LICENSE +0 -0
  27. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/WHEEL +0 -0
  28. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/entry_points.txt +0 -0
  29. {clarifai-11.1.5rc8.dist-info → clarifai-11.1.6rc1.dist-info}/top_level.txt +0 -0
@@ -1,334 +1,231 @@
1
- import io
2
- from typing import Iterable, List, get_args, get_origin
1
+ from typing import Dict, List, Tuple, Union
3
2
 
4
3
  import numpy as np
5
- from clarifai_grpc.grpc.api.resources_pb2 import Audio as AudioProto
6
- from clarifai_grpc.grpc.api.resources_pb2 import Concept as ConceptProto
7
- from clarifai_grpc.grpc.api.resources_pb2 import Frame as FrameProto
8
- from clarifai_grpc.grpc.api.resources_pb2 import Image as ImageProto
9
- from clarifai_grpc.grpc.api.resources_pb2 import Region as RegionProto
10
- from clarifai_grpc.grpc.api.resources_pb2 import Text as TextProto
11
- from clarifai_grpc.grpc.api.resources_pb2 import Video as VideoProto
12
- from PIL import Image as PILImage
4
+ from clarifai_grpc.grpc.api import resources_pb2
5
+ from clarifai_grpc.grpc.api.status import status_code_pb2, status_pb2
6
+ from PIL import Image
13
7
 
8
+ from clarifai.client.auth.helper import ClarifaiAuthHelper
14
9
 
15
- class MessageData:
10
+ from .data_utils import bytes_to_image, image_to_bytes
16
11
 
17
- def to_proto(self):
18
- raise NotImplementedError
19
12
 
20
- @classmethod
21
- def from_proto(cls, proto):
22
- raise NotImplementedError
23
-
24
- def cast(self, python_type):
25
- if python_type == self.__class__:
26
- return self
27
- raise TypeError(f'Incompatible type for {self.__class__.__name__}: {python_type}')
28
-
29
-
30
- class Output(dict):
31
- __getattr__ = dict.__getitem__
32
- __setattr__ = dict.__setitem__
33
-
34
- def __origin__(self):
35
- return self
36
-
37
- def __args__(self):
38
- return list(self.keys())
39
-
40
-
41
- class Input(dict):
42
- __getattr__ = dict.__getitem__
43
- __setattr__ = dict.__setitem__
44
-
45
- def __origin__(self):
46
- return self
47
-
48
- def __args__(self):
49
- return list(self.keys())
50
-
51
-
52
- class Stream(Iterable):
53
- pass
54
-
55
-
56
- class Text(MessageData):
57
-
58
- def __init__(self, text: str, url: str = None):
59
- self.text = text
60
- self.url = url
61
-
62
- def to_proto(self) -> TextProto:
63
- return TextProto(raw=self.text or '', self_url=self.url or '')
64
-
65
- @classmethod
66
- def from_proto(cls, proto: TextProto) -> "Text":
67
- return cls(proto.raw, proto.url or None)
68
-
69
- def cast(self, python_type):
70
- if python_type == str:
71
- return self.text
72
- if python_type == Text:
73
- return self
74
- raise TypeError(f'Incompatible type for Text: {python_type}')
75
-
76
-
77
- class Concept(MessageData):
13
+ class BaseDataHandler:
78
14
 
79
- def __init__(self, name: str, value: float = 0):
80
- self.name = name
81
- self.value = value
15
+ def __init__(self,
16
+ proto: Union[resources_pb2.Input, resources_pb2.Output],
17
+ auth: ClarifaiAuthHelper = None):
18
+ self._proto = proto
19
+ self._auth = auth
82
20
 
83
- def __repr__(self) -> str:
84
- return f"Concept(name={self.name!r}, value={self.value})"
85
-
86
- def to_proto(self):
87
- return ConceptProto(name=self.name, value=self.value)
88
-
89
- @classmethod
90
- def from_proto(cls, proto: ConceptProto) -> "Concept":
91
- return cls(proto.name, proto.value)
92
-
93
-
94
- class Region(MessageData):
95
-
96
- def __init__(self, proto_region: RegionProto):
97
- self.proto = proto_region
21
+ #
22
+ def to_python(self):
23
+ return dict(text=self.text, image=self.image, audio=self.audio)
98
24
 
25
+ # ---------------- Start get/setters ---------------- #
26
+ # Proto
99
27
  @property
100
- def box(self) -> List[float]:
101
- bbox = self.proto.region_info.bounding_box
102
- return [bbox.left_col, bbox.top_row, bbox.right_col, bbox.bottom_row] # x1, y1, x2, y2
103
-
104
- @box.setter
105
- def box(self, value: List[float]):
106
- bbox = self.proto.region_info.bounding_box
107
- bbox.left_col, bbox.top_row, bbox.right_col, bbox.bottom_row = value
28
+ def proto(self):
29
+ return self._proto
108
30
 
31
+ # Status
109
32
  @property
110
- def concepts(self) -> List[Concept]:
111
- return [Concept.from_proto(proto) for proto in self.proto.data.concepts]
112
-
113
- @concepts.setter
114
- def concepts(self, value: List[Concept]):
115
- self.proto.data.concepts.extend([concept.to_proto() for concept in value])
116
-
117
- def __repr__(self) -> str:
118
- return f"Region(box={self.box}, concepts={self.concepts})"
119
-
120
- def to_proto(self) -> RegionProto:
121
- return self.proto
122
-
123
- @classmethod
124
- def from_proto(cls, proto: RegionProto) -> "Region":
125
- return cls(proto)
126
-
127
-
128
- class Image(MessageData):
129
-
130
- def __init__(self, proto_image: ImageProto = None, url: str = None, bytes: bytes = None):
131
- if proto_image is None:
132
- proto_image = ImageProto()
133
- self.proto = proto_image
134
- # use setters for init vals
135
- if url:
136
- self.url = url
137
- if bytes:
138
- self.bytes = bytes
139
-
140
- @property
141
- def url(self) -> str:
142
- return self.proto.url
143
-
144
- @url.setter
145
- def url(self, value: str):
146
- self.proto.url = value
147
-
148
- @property
149
- def bytes(self) -> bytes:
150
- return self.proto.base64
151
-
152
- @bytes.setter
153
- def bytes(self, value: bytes):
154
- self.proto.base64 = value
33
+ def status(self) -> status_pb2.Status:
34
+ return self._proto.status
155
35
 
156
- def __repr__(self) -> str:
157
- attrs = []
158
- if self.url:
159
- attrs.append(f"url={self.url!r}")
160
- if self.bytes:
161
- attrs.append(f"bytes=<{len(self.bytes)} bytes>")
162
- return f"Image({', '.join(attrs)})"
163
-
164
- @classmethod
165
- def from_url(cls, url: str) -> "Image":
166
- proto_image = ImageProto(url=url)
167
- return cls(proto_image)
168
-
169
- @classmethod
170
- def from_pil(cls, pil_image: PILImage.Image) -> "Image":
171
- with io.BytesIO() as output:
172
- pil_image.save(output, format="PNG")
173
- image_bytes = output.getvalue()
174
- proto_image = ImageProto(base64=image_bytes)
175
- return cls(proto_image)
176
-
177
- def to_pil(self) -> PILImage.Image:
178
- if not self.proto.base64:
179
- raise ValueError("Image has no bytes")
180
- return PILImage.open(io.BytesIO(self.proto.base64))
181
-
182
- def to_numpy(self) -> np.ndarray:
183
- return np.asarray(self.to_pil())
184
-
185
- def to_proto(self) -> ImageProto:
186
- return self.proto
187
-
188
- @classmethod
189
- def from_proto(cls, proto: ImageProto) -> "Image":
190
- return cls(proto)
191
-
192
- def cast(self, python_type):
193
- if python_type == Image:
194
- return self
195
- if python_type in (PILImage.Image, PILImage):
196
- return self.to_pil()
197
- if python_type == np.ndarray or get_origin(python_type) == np.ndarray:
198
- return self.to_numpy()
199
- raise TypeError(f'Incompatible type for Image: {python_type}')
200
-
201
-
202
- class Audio(MessageData):
203
-
204
- def __init__(self, proto_audio: AudioProto):
205
- self.proto = proto_audio
36
+ def set_status(self, code: str, description: str = ""):
37
+ self._proto.status.code = code
38
+ self._proto.status.description = description
206
39
 
40
+ # Text
207
41
  @property
208
- def url(self) -> str:
209
- return self.proto.url
210
-
211
- @url.setter
212
- def url(self, value: str):
213
- self.proto.url = value
214
-
42
+ def text(self) -> Union[None, str]:
43
+ data = self._proto.data.text
44
+ text = None
45
+ if data.ByteSize():
46
+ if data.raw:
47
+ text = data.raw
48
+ else:
49
+ raise NotImplementedError
50
+ return text
51
+
52
+ def set_text(self, text: str):
53
+ self._proto.data.text.raw = text
54
+
55
+ # Image
215
56
  @property
216
- def bytes(self) -> bytes:
217
- return self.proto.base64
218
-
219
- @bytes.setter
220
- def bytes(self, value: bytes):
221
- self.proto.base64 = value
222
-
223
- @classmethod
224
- def from_url(cls, url: str) -> "Audio":
225
- proto_audio = AudioProto(url=url)
226
- return cls(proto_audio)
227
-
228
- def __repr__(self) -> str:
229
- attrs = []
230
- if self.url:
231
- attrs.append(f"url={self.url!r}")
232
- if self.bytes:
233
- attrs.append(f"bytes=<{len(self.bytes)} bytes>")
234
- return f"Audio({', '.join(attrs)})"
235
-
236
- def to_proto(self) -> AudioProto:
237
- return self.proto
238
-
239
- @classmethod
240
- def from_proto(cls, proto: AudioProto) -> "Audio":
241
- return cls(proto)
242
-
243
-
244
- class Frame(MessageData):
245
-
246
- def __init__(self, proto_frame: FrameProto):
247
- self.proto = proto_frame
248
-
57
+ def image(self, format: str = "np") -> Union[None, Image.Image, np.ndarray]:
58
+ data = self._proto.data.image
59
+ image = None
60
+ if data.ByteSize():
61
+ data: resources_pb2.Image = data
62
+ if data.base64:
63
+ image = data.base64
64
+ elif data.url:
65
+ raise NotImplementedError
66
+ image = bytes_to_image(image)
67
+ image = image if not format == "np" else np.asarray(image).astype("uint8")
68
+ return image
69
+
70
+ def set_image(self, image: Union[Image.Image, np.ndarray]):
71
+ if isinstance(image, np.ndarray):
72
+ image = Image.fromarray(image)
73
+ self._proto.data.image.base64 = image_to_bytes(image)
74
+
75
+ # Audio
249
76
  @property
250
- def time(self) -> float:
251
- # TODO: time is a uint32, so this will overflow at 49.7 days
252
- # we should be using double or uint64 in the proto instead
253
- return self.proto.frame_info.time / 1000.0
254
-
255
- @time.setter
256
- def time(self, value: float):
257
- self.proto.frame_info.time = int(value * 1000)
258
-
77
+ def audio(self) -> bytes:
78
+ data = self._proto.data.audio
79
+ audio = None
80
+ if data.ByteSize():
81
+ if data.base64:
82
+ audio = data.base64
83
+ return audio
84
+
85
+ def set_audio(self, audio: bytes):
86
+ self._proto.data.audio.base64 = audio
87
+
88
+ # Bboxes
259
89
  @property
260
- def image(self) -> Image:
261
- return Image.from_proto(self.proto.data.image)
262
-
263
- @image.setter
264
- def image(self, value: Image):
265
- self.proto.data.image.CopyFrom(value.to_proto())
266
-
90
+ def bboxes(self, real_coord: bool = False, image_width: int = None,
91
+ image_height: int = None) -> Tuple[List, List, List]:
92
+ if real_coord:
93
+ assert (image_height or image_width
94
+ ), "image_height and image_width are required when when return real coordinates"
95
+ xyxy = []
96
+ scores = []
97
+ concepts = []
98
+ for _, each in enumerate(self._proto.data.regions):
99
+ box = each.region_info
100
+ score = each.value
101
+ concept = each.data.concepts[0].id
102
+ x1 = box.left_col
103
+ y1 = box.top_row
104
+ x2 = box.right_col
105
+ y2 = box.bottom_row
106
+ if real_coord:
107
+ x1 = x1 * image_width
108
+ y1 = y1 * image_height
109
+ x2 = x2 * image_width
110
+ y2 = y2 * image_height
111
+ xyxy.append([x1, y1, x2, y2])
112
+ scores.append(score)
113
+ concepts.append(concept)
114
+
115
+ return xyxy, scores, concepts
116
+
117
+ def set_bboxes(self,
118
+ boxes: list,
119
+ scores: list,
120
+ concepts: list,
121
+ real_coord: bool = False,
122
+ image_width: int = None,
123
+ image_height: int = None):
124
+ if real_coord:
125
+ assert (image_height and
126
+ image_width), "image_height and image_width are required when `real_coord` is set"
127
+ bboxes = [[x[1] / image_height, x[0] / image_width, x[3] / image_height, x[2] / image_width]
128
+ for x in boxes] # normalize the bboxes to [0,1] and [y1 x1 y2 x2]
129
+ bboxes = np.clip(bboxes, 0, 1.0)
130
+
131
+ regions = []
132
+ for ith, bbox in enumerate(bboxes):
133
+ score = scores[ith]
134
+ concept = concepts[ith]
135
+ if any([each > 1.0 for each in bbox]):
136
+ assert ValueError(
137
+ "Box coordinates is not normalized between [0, 1]. Please set format_box to True and provide image_height and image_width to normalize"
138
+ )
139
+ region = resources_pb2.RegionInfo(bounding_box=resources_pb2.BoundingBox(
140
+ top_row=bbox[0], # y_min
141
+ left_col=bbox[1], # x_min
142
+ bottom_row=bbox[2], # y_max
143
+ right_col=bbox[3], # x_max
144
+ ))
145
+ data = resources_pb2.Data(concepts=resources_pb2.Concept(id=concept, value=score))
146
+ regions.append(resources_pb2.Region(region_info=region, data=data))
147
+
148
+ self._proto.data.regions = regions
149
+
150
+ # Concepts
267
151
  @property
268
- def regions(self) -> List[Region]:
269
- return [Region(region) for region in self.proto.data.regions]
270
-
271
- @regions.setter
272
- def regions(self, value: List[Region]):
273
- self.proto.data.regions.extend([region.proto for region in value])
274
-
275
- def to_proto(self) -> FrameProto:
276
- return self.proto
277
-
278
- @classmethod
279
- def from_proto(cls, proto: FrameProto) -> "Frame":
280
- return cls(proto)
281
-
282
-
283
- class Video(MessageData):
284
-
285
- def __init__(self, proto_video: VideoProto):
286
- self.proto = proto_video
287
-
152
+ def concepts(self) -> Dict[str, float]:
153
+ con_scores = {}
154
+ for each in self.proto.data.concepts:
155
+ con_scores.update({each.id: each.value})
156
+ return con_scores
157
+
158
+ def set_concepts(self, concept_score_pairs: Dict[str, float]):
159
+ concepts = []
160
+ for concept, score in concept_score_pairs.items():
161
+ con_score = resources_pb2.Concept(id=concept, name=concept, value=score)
162
+ concepts.append(con_score)
163
+ if concepts:
164
+ self._proto.data.ClearField("concepts")
165
+ for each in concepts:
166
+ self._proto.data.concepts.append(each)
167
+
168
+ # Embeddings
288
169
  @property
289
- def url(self) -> str:
290
- return self.proto.url
170
+ def embeddings(self) -> List[List[float]]:
171
+ return [each.vector for each in self.proto.data.embeddings]
291
172
 
292
- @url.setter
293
- def url(self, value: str):
294
- self.proto.url = value
173
+ def set_embeddings(self, list_vectors: List[List[float]]):
174
+ if list_vectors[0]:
175
+ self._proto.data.ClearField("embeddings")
176
+ for vec in list_vectors:
177
+ self._proto.data.embeddings.append(
178
+ resources_pb2.Embedding(vector=vec, num_dimensions=len(vec)))
295
179
 
296
- @property
297
- def bytes(self) -> bytes:
298
- return self.proto.base64
299
-
300
- @bytes.setter
301
- def bytes(self, value: bytes):
302
- self.proto.base64 = value
180
+ # ---------------- End get/setters ---------------- #
303
181
 
182
+ # Constructors
304
183
  @classmethod
305
- def from_url(cls, url: str) -> "Video":
306
- proto_video = VideoProto(url=url)
307
- return cls(proto_video)
308
-
309
- def __repr__(self) -> str:
310
- attrs = []
311
- if self.url:
312
- attrs.append(f"url={self.url!r}")
313
- if self.bytes:
314
- attrs.append(f"bytes=<{len(self.bytes)} bytes>")
315
- return f"Video({', '.join(attrs)})"
316
-
317
- def to_proto(self) -> VideoProto:
318
- return self.proto
184
+ def from_proto(cls, proto):
185
+ clss = cls(proto=proto)
186
+ return clss
319
187
 
320
188
  @classmethod
321
- def from_proto(cls, proto: VideoProto) -> "Video":
322
- return cls(proto)
323
-
324
-
325
- def cast(value, python_type):
326
- list_type = (get_origin(python_type) == list)
327
- if isinstance(value, MessageData):
328
- return value.cast(python_type)
329
- if list_type and isinstance(value, np.ndarray):
330
- return value.tolist()
331
- if list_type and isinstance(value, list):
332
- inner_type = get_args(python_type)[0]
333
- return [cast(item, inner_type) for item in value]
334
- return value
189
+ def from_data(
190
+ cls,
191
+ status_code: int = status_code_pb2.SUCCESS,
192
+ status_description: str = "",
193
+ text: str = None,
194
+ image: Union[Image.Image, np.ndarray] = None,
195
+ audio: bytes = None,
196
+ boxes: dict = None,
197
+ concepts: Dict[str, float] = {},
198
+ embeddings: List[List[float]] = [],
199
+ ) -> 'OutputDataHandler':
200
+ clss = cls(proto=resources_pb2.Output())
201
+ if isinstance(image, Image.Image) or isinstance(image, np.ndarray):
202
+ clss.set_image(image)
203
+ if text:
204
+ clss.set_text(text)
205
+ if audio:
206
+ clss.set_audio(audio)
207
+ if boxes:
208
+ clss.set_bboxes(**boxes)
209
+ if concepts:
210
+ clss.set_concepts(concepts)
211
+ if embeddings:
212
+ clss.set_embeddings(embeddings)
213
+
214
+ clss.set_status(code=status_code, description=status_description)
215
+ return clss
216
+
217
+
218
+ class InputDataHandler(BaseDataHandler):
219
+
220
+ def __init__(self,
221
+ proto: resources_pb2.Input = resources_pb2.Input(),
222
+ auth: ClarifaiAuthHelper = None):
223
+ super().__init__(proto=proto, auth=auth)
224
+
225
+
226
+ class OutputDataHandler(BaseDataHandler):
227
+
228
+ def __init__(self,
229
+ proto: resources_pb2.Output = resources_pb2.Output(),
230
+ auth: ClarifaiAuthHelper = None):
231
+ super().__init__(proto=proto, auth=auth)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: clarifai
3
- Version: 11.1.5rc8
3
+ Version: 11.1.6rc1
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -32,7 +32,6 @@ 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
36
35
  Provides-Extra: all
37
36
  Requires-Dist: pycocotools ==2.0.6 ; extra == 'all'
38
37
 
@@ -1,4 +1,4 @@
1
- clarifai/__init__.py,sha256=38eaHmyuM7K_sQmwsLI3iDp-O9zpQ0Ad2nPrqGnGQCw,26
1
+ clarifai/__init__.py,sha256=6rp6x13qSs-Ygf51vy09gdh_0LlaS4lRKX2x5Sm7wDM,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
@@ -12,14 +12,14 @@ clarifai/cli/__main__.py~,sha256=ozwaF8wYiURORkuFhk0_wsDPUYZjH547Wz9eVk-4nro,70
12
12
  clarifai/cli/base.py,sha256=eaUsp7S1e2dslC437Hjk7gUBQsng13ID3N3lkYotB2U,3403
13
13
  clarifai/cli/compute_cluster.py,sha256=N2dNQNJEPg9nxsb8x2igEzYuGRzjn7l4kNttjFIxmhI,1827
14
14
  clarifai/cli/deployment.py,sha256=sUEuz5-rtozMx8deVcJXLi6lHsP2jc8x3y2MpUAVfqY,2506
15
- clarifai/cli/model.py,sha256=nxi7i21H5sNKLCvlJsP0oHS9-EBTbyN2gIC0aVERkI4,11990
15
+ clarifai/cli/model.py,sha256=9tSR_IiyZcSdTwrXOfv36MqaQ_61wLltpwsggh3yE4w,11677
16
16
  clarifai/cli/nodepool.py,sha256=yihxS_rIFoBBKzRlqBX8Ab42iPpBMJrJFsk8saph6ms,3049
17
17
  clarifai/cli/__pycache__/__init__.cpython-310.pyc,sha256=4ksYQqqaAMCKwyxNsG7hfJGjXDc8y78s9n7AxCEaTQo,160
18
- clarifai/cli/__pycache__/__main__.cpython-310.pyc,sha256=CM9FOqcSyt-DLnck7FovGDxqT4FPkge7ggq61EsRjjA,250
18
+ clarifai/cli/__pycache__/__main__.cpython-310.pyc,sha256=DddvGgYRrEZh9iwKsrGgMP2D7bslUckWV2UGRv2M2ZA,250
19
19
  clarifai/cli/__pycache__/base.cpython-310.pyc,sha256=a7mN_r511p_Ao8aXrWU9KPSe8wkDZJW4p8UhlD6EoB8,3151
20
20
  clarifai/cli/__pycache__/compute_cluster.cpython-310.pyc,sha256=NHLAcVEwqUhci0KB5DpnPWUqXcCttpWrA3F5zld4qN8,1985
21
21
  clarifai/cli/__pycache__/deployment.cpython-310.pyc,sha256=AhfbPlwjjj_TmC2UayjuRbNr00dOukDl6NfLhm2rIng,2278
22
- clarifai/cli/__pycache__/model.cpython-310.pyc,sha256=yTYDkHtcIkPYGSIz-Ro7BXCQg8q3gInzbcS1PA0LtZ8,8542
22
+ clarifai/cli/__pycache__/model.cpython-310.pyc,sha256=hMFmJcogfAxgU15tClmYYyqQ2g8G6Ds8IsBzNM37if4,9062
23
23
  clarifai/cli/__pycache__/nodepool.cpython-310.pyc,sha256=nEmM-s1HFg7xM5x-bpnqHFWAVLWj0J0ZskYtd6NSq20,2473
24
24
  clarifai/client/#model_client.py#,sha256=tZUWNl6D5TyeTY-XaREcdDsD3eM-Rgha2lmHziOok8w,16700
25
25
  clarifai/client/__init__.py,sha256=xI1U0l5AZdRThvQAXCLsd9axxyFzXXJ22m8LHqVjQRU,662
@@ -30,7 +30,7 @@ clarifai/client/dataset.py,sha256=y3zKT_VhP1gyN3OO-b3cPeW21ZXyKbQ7ZJkEG06bsTU,32
30
30
  clarifai/client/deployment.py,sha256=w7Y6pA1rYG4KRK1SwusRZc2sQRXlG8wezuVdzSWpCo0,2586
31
31
  clarifai/client/input.py,sha256=obMAHMDU1OwfXZ8KraOnGFlWzlW-3F7Ob_2lcOQMlhY,46339
32
32
  clarifai/client/lister.py,sha256=03KGMvs5RVyYqxLsSrWhNc34I8kiF1Ph0NeyEwu7nMU,2082
33
- clarifai/client/model.py,sha256=6Idc6-VhVwDtI4qof2Ir3g9LjmbaxBGuiVKWBQmYvRc,76817
33
+ clarifai/client/model.py,sha256=vb8ETvr_FTgMeQ68Wp5D1dogx6lOEM5cWirkRAV46Wo,88675
34
34
  clarifai/client/model_client.py,sha256=sr98ZeJan17JTQfVGgltEv7_M9lItYSz74DCyBbMIJ8,16681
35
35
  clarifai/client/module.py,sha256=FTkm8s9m-EaTKN7g9MnLhGJ9eETUfKG7aWZ3o1RshYs,4204
36
36
  clarifai/client/nodepool.py,sha256=la3vTFrO4LX8zm2eQ5jqf2L0-kQ63Dano8FibadoZbk,10152
@@ -127,30 +127,31 @@ clarifai/rag/utils.py,sha256=yr1jAcbpws4vFGBqlAwPPE7v1DRba48g8gixLFw8OhQ,4070
127
127
  clarifai/rag/__pycache__/__init__.cpython-310.pyc,sha256=xAV8OBmLU6qidHU5fr1p2OvQc5N4sy6X1W6ToAUX3mw,213
128
128
  clarifai/rag/__pycache__/rag.cpython-310.pyc,sha256=_xylc1DvMu1KYcDr-dtfUU2uzUjL29Uq3mRH-Iu7_h0,9738
129
129
  clarifai/rag/__pycache__/utils.cpython-310.pyc,sha256=IDUXR7Iv4KfHSY3sbx_bgPdJQn2ozyRCuz01EUTmCUw,3694
130
- clarifai/runners/__init__.py,sha256=cDJ31l41dDsqW4Xn6sFMkKxxdIMTnGH9IW6sVkq0TNw,207
130
+ clarifai/runners/__init__.py,sha256=FcTqyCvPn9lJFDsi2eGZ-YL8LgPhJmRAS8K5Wobk03s,411
131
131
  clarifai/runners/server.py,sha256=xHDLdhQApCgYG19QOKXqJNCGNyw1Vsvobq3UdryDrVc,4132
132
- clarifai/runners/__pycache__/__init__.cpython-310.pyc,sha256=-ZU1MJEGNOGAXBFqaGG0FGgISwX9424bfq3CHHUOnqM,530
132
+ clarifai/runners/__pycache__/__init__.cpython-310.pyc,sha256=DJaUcWzP2wXHbIbFIyNP8nWogSFT-opppo4Vh1iVAYw,530
133
133
  clarifai/runners/__pycache__/server.cpython-310.pyc,sha256=HfZ6_Vrr5q78nznFqP_aWhPENplHIol_qPaf8lLlotE,3229
134
134
  clarifai/runners/dockerfile_template/Dockerfile.debug,sha256=sRlfRmSLE_TiLORcVRx-3-B0vvSNeUYgm0CCrWmLvAA,667
135
135
  clarifai/runners/dockerfile_template/Dockerfile.debug~,sha256=7YOVg3adIaiudfSkfLGeyxt-FfIBbD3UIIYccrIVJTs,426
136
- clarifai/runners/dockerfile_template/Dockerfile.template,sha256=MWGjj0My6d18v-nyhWuNbSXUzCzR6KWkohRB1yInb7Q,2525
136
+ clarifai/runners/dockerfile_template/Dockerfile.template,sha256=5cjv7U8PmWa3DB_5B1CqSYh_6GE0E0np52TIAa7EIDE,2312
137
137
  clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- clarifai/runners/models/model_builder.py,sha256=UCAeJiP_fRFfIuVI1sOge7LMwe-psgvdBuZ0LsJQMpM,33062
139
- clarifai/runners/models/model_class.py,sha256=bfAyQ5oQ9fNfMeuek8RgTaHtLrLib3U8zy5qlg5kvTY,10759
140
- clarifai/runners/models/model_run_locally.py,sha256=VZetm9Mko8MBjcjwr6PCnTU9gF3glgD5qvpbj-8tW2s,17962
141
- clarifai/runners/models/model_runner.py,sha256=qyc73pe4xc9BsUKHwnOyC9g-RNCARiFis4GTh-yg0vg,6219
142
- clarifai/runners/models/model_servicer.py,sha256=A--b1P71PBCAMJCpy_-fpNDkfCVdvdMh1LleW15dSas,3037
138
+ clarifai/runners/models/base_typed_model.py,sha256=0QCWxch8CcyJSKvE1D4PILd2RSnQZHTmx4DXlQQ6dpo,7856
139
+ clarifai/runners/models/model_builder.py,sha256=CSGUbznix7xn4CMuRAH4BLfX9O91xAJ4GXFw3EzXgbY,32518
140
+ clarifai/runners/models/model_class.py,sha256=9JSPAr4U4K7xI0kSl-q0mHB06zknm2OR-8XIgBCto94,1611
141
+ clarifai/runners/models/model_run_locally.py,sha256=V770O-7yQQQlh80u48NZTEHkX3gj1HyclHbu1tjvaQ8,20864
142
+ clarifai/runners/models/model_runner.py,sha256=PyxwK-33hLlhkD07tTXkjWZ_iNlZHl9_8AZ2W7WfExI,6097
143
+ clarifai/runners/models/model_servicer.py,sha256=jtQmtGeQlvQ5ttMvVw7CMnNzq-rLkTaxR2IWF9SnHwk,2808
143
144
  clarifai/runners/models/__pycache__/__init__.cpython-310.pyc,sha256=GTFjzypyx5wnDGqxYeY01iya1CELKb5fOFBFLV031yU,171
144
- clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc,sha256=YIDliqLzGNw3IBdSDNbB_2Xn-MlYPSkMApfWIlYoCgM,8271
145
- clarifai/runners/models/__pycache__/model_builder.cpython-310.pyc,sha256=Y3LA8sJDwPl9yZakR9b4EQ-tGiuJC5rDB994uyUKx8U,26707
146
- clarifai/runners/models/__pycache__/model_class.cpython-310.pyc,sha256=eqtgRCj7XJjZ6-EAE9uuyFCQFQOiI-yfS9kbkLsiNdo,1889
145
+ clarifai/runners/models/__pycache__/base_typed_model.cpython-310.pyc,sha256=DCpUDsUUFf_e37yBLvzPwOHC0aNsBTUWXfcLF1LTnjc,8271
146
+ clarifai/runners/models/__pycache__/model_builder.cpython-310.pyc,sha256=avyCq8UMGVtKTtnH1GFTaYBv6iFmr3u-E_mbKQYlnow,26707
147
+ clarifai/runners/models/__pycache__/model_class.cpython-310.pyc,sha256=Kxc1v0WwLNI5ObT-jATxiYSm6qbctTTUNn3XX4EZ854,1889
147
148
  clarifai/runners/models/__pycache__/model_run_locally.cpython-310.pyc,sha256=maLshBrvhTy0C6grT26JPAA14P-nD9WDWN25E2BErsE,16976
148
- clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc,sha256=y5ieC41bcPT8q1bL3bev76ohtYXgVkXjErNGiRzcP6g,4964
149
+ clarifai/runners/models/__pycache__/model_runner.cpython-310.pyc,sha256=uOXQPDbXvsLFTEpcpcv5b9u7O9AhQzYi__RWw_VB7qQ,4964
149
150
  clarifai/runners/models/__pycache__/model_servicer.cpython-310.pyc,sha256=9QTYk4zVHBUtlTfkH3WaE6frNdN6ba57EVj4bKe18YA,2501
150
151
  clarifai/runners/models/__pycache__/model_upload.cpython-310.pyc,sha256=erkIUHtJv1ohMOFT8EAJuVfBsEY4o0GxpeXrZqjrfGk,21046
151
152
  clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
153
  clarifai/runners/utils/const.py,sha256=bwj-Pcw558-pasdIFbNhnkn-9oiCdojYH1fNTTUG2gU,1048
153
- clarifai/runners/utils/data_handler.py,sha256=zCA_C3mbxgMroqrygMa5xsyuMF476mgd697MUPlOR0E,8327
154
+ clarifai/runners/utils/data_handler.py,sha256=sxy9zlAgI6ETuxCQhUgEXAn2GCsaW1GxpK6GTaMne0g,6966
154
155
  clarifai/runners/utils/data_types.py,sha256=1OR676mTvpbLmqyqBBogjfOMSpP7-mevWrP_wTVWTjo,9661
155
156
  clarifai/runners/utils/data_utils.py,sha256=R1iQ82TuQ9JwxCJk8yEB1Lyb0BYVhVbWJI9YDi1zGOs,318
156
157
  clarifai/runners/utils/loader.py,sha256=SgNHMwRmCCymFQm8aDp73NmIUHhM-N60CBlTKbPzmVc,7470
@@ -159,13 +160,13 @@ clarifai/runners/utils/serializers.py,sha256=MNLZWETostu_paxgFGJThNZUN8h3HorssJj
159
160
  clarifai/runners/utils/url_fetcher.py,sha256=v_8JOWmkyFAzsBulsieKX7Nfjy1Yg7wGSZeqfEvw2cg,1640
160
161
  clarifai/runners/utils/__pycache__/__init__.cpython-310.pyc,sha256=PRPZOzUV5Z8grWizu5RKOkki0iLYxZDJBgsLfmCcieE,170
161
162
  clarifai/runners/utils/__pycache__/const.cpython-310.pyc,sha256=EBpjmzlqWBxRGqu_KXeVx80uDslhufrErs57SbLr3DE,953
162
- clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc,sha256=3HAQAt7bJxTfLybItgtlkKBZGwVL4iLV_gjcn8fE90o,7961
163
- clarifai/runners/utils/__pycache__/data_types.cpython-310.pyc,sha256=jeDlYTMMQs_fNwBen5cCdAQxH48vkINSVYPIZj6chpE,14158
163
+ clarifai/runners/utils/__pycache__/data_handler.cpython-310.pyc,sha256=Mz5dhwefiMAVzHjO7ePfqAm3NILUoSDSUoTS03pt0f8,7961
164
+ clarifai/runners/utils/__pycache__/data_types.cpython-310.pyc,sha256=S3PJCL10kHDN9upSyZoHYrOD6bM3XImDRUKetFI_Ygo,14158
164
165
  clarifai/runners/utils/__pycache__/data_utils.cpython-310.pyc,sha256=1e6NiK6bnJiiAo2KPsDmm91BSlbI3mVkQZKbDfh5hBI,642
165
166
  clarifai/runners/utils/__pycache__/loader.cpython-310.pyc,sha256=X1MwgLanVXLs-QLot1X145A36W29ONXZRZe5q6_jARo,7319
166
167
  clarifai/runners/utils/__pycache__/logging.cpython-310.pyc,sha256=VV0KFcnuYpFFtaG4EeDIgg7c4QEsBLo-eX_NnsyFEhA,331
167
- clarifai/runners/utils/__pycache__/method_signatures.cpython-310.pyc,sha256=TppfqSdOTnSZLbQmhPpmY5CrNX4UGsAkuSHKP5S4t-g,9694
168
- clarifai/runners/utils/__pycache__/serializers.cpython-310.pyc,sha256=zTI3CVO6LZtxJbjBG0LSMPXHU26DP3EPyPkVb-uVXDg,7212
168
+ clarifai/runners/utils/__pycache__/method_signatures.cpython-310.pyc,sha256=Z_NTuOgsZETvKKw-vNa1nXvSkBskqVPTjIxHRP7HryM,12770
169
+ clarifai/runners/utils/__pycache__/serializers.cpython-310.pyc,sha256=CcEzxUgI2PnQaeTVrUNj6RE5gZKFT_ok-qjQaooaDIk,8980
169
170
  clarifai/runners/utils/__pycache__/url_fetcher.cpython-310.pyc,sha256=jFxVdOmm7DCkgatv1GwIXeefHthpvlkg4ybBlMnmxss,1739
170
171
  clarifai/schema/search.py,sha256=JjTi8ammJgZZ2OGl4K6tIA4zEJ1Fr2ASZARXavI1j5c,2448
171
172
  clarifai/schema/__pycache__/search.cpython-310.pyc,sha256=aYuMHmn0ovwmeOhTDj7QAURrQAjlyLm1CwKaz6xktZU,2484
@@ -196,9 +197,9 @@ clarifai/workflows/__pycache__/__init__.cpython-310.pyc,sha256=oRKg6B7Z-wWQy0EW2
196
197
  clarifai/workflows/__pycache__/export.cpython-310.pyc,sha256=cNmGLnww7xVpm4htd1vRhQJoEZ1dhpN1oD8iLLAtVzM,2418
197
198
  clarifai/workflows/__pycache__/utils.cpython-310.pyc,sha256=rm2kWk4a3GOKWoerXpEAEeRvGhEe7wPd0ZZ6jHtEGqY,1925
198
199
  clarifai/workflows/__pycache__/validate.cpython-310.pyc,sha256=QA1i6YdDpY824cqtQvkEaFPpaCa2iqfOwFouqwZfAKY,2139
199
- clarifai-11.1.5rc8.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
200
- clarifai-11.1.5rc8.dist-info/METADATA,sha256=hX47juGxDF1D_vMfcaZ5IIJhFrRznfVIYXu5dDbfVcY,22229
201
- clarifai-11.1.5rc8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
202
- clarifai-11.1.5rc8.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
203
- clarifai-11.1.5rc8.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
204
- clarifai-11.1.5rc8.dist-info/RECORD,,
200
+ clarifai-11.1.6rc1.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
201
+ clarifai-11.1.6rc1.dist-info/METADATA,sha256=qC_leGNZ6FwOj6WvvMvtVapQUD6ez-B7-IzhkJF6F1s,22198
202
+ clarifai-11.1.6rc1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
203
+ clarifai-11.1.6rc1.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
204
+ clarifai-11.1.6rc1.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
205
+ clarifai-11.1.6rc1.dist-info/RECORD,,