clarifai 11.5.4__py3-none-any.whl → 11.5.5__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.py +4 -1
- clarifai/runners/models/model_builder.py +4 -4
- clarifai/runners/models/model_class.py +90 -22
- clarifai/runners/models/model_runner.py +23 -7
- clarifai/runners/utils/code_script.py +5 -1
- clarifai/runners/utils/model_utils.py +49 -0
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/METADATA +2 -2
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/RECORD +13 -13
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/WHEEL +0 -0
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/entry_points.txt +0 -0
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/licenses/LICENSE +0 -0
- {clarifai-11.5.4.dist-info → clarifai-11.5.5.dist-info}/top_level.txt +0 -0
clarifai/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "11.5.
|
1
|
+
__version__ = "11.5.5"
|
clarifai/client/model.py
CHANGED
@@ -528,7 +528,10 @@ class Model(Lister, BaseClient):
|
|
528
528
|
inference_params = kwargs.get('inference_params', {})
|
529
529
|
output_config = kwargs.get('output_config', {})
|
530
530
|
return self.client._predict_by_proto(
|
531
|
-
inputs=inputs,
|
531
|
+
inputs=inputs,
|
532
|
+
# method_name="PostModelOutputs",
|
533
|
+
inference_params=inference_params,
|
534
|
+
output_config=output_config,
|
532
535
|
)
|
533
536
|
|
534
537
|
return self.client.predict(*args, **kwargs)
|
@@ -457,8 +457,8 @@ class ModelBuilder:
|
|
457
457
|
Returns the method signatures for the model class in YAML format.
|
458
458
|
"""
|
459
459
|
model_class = self.load_model_class(mocking=True)
|
460
|
-
|
461
|
-
signatures = {method.name: method.signature for method in
|
460
|
+
method_infos = model_class._get_method_infos()
|
461
|
+
signatures = {method.name: method.signature for method in method_infos.values()}
|
462
462
|
return signatures_to_yaml(signatures)
|
463
463
|
|
464
464
|
def get_method_signatures(self, mocking=True):
|
@@ -472,8 +472,8 @@ class ModelBuilder:
|
|
472
472
|
list: A list of method signatures for the model class.
|
473
473
|
"""
|
474
474
|
model_class = self.load_model_class(mocking=mocking)
|
475
|
-
|
476
|
-
signatures = [method.signature for method in
|
475
|
+
method_infos = model_class._get_method_infos()
|
476
|
+
signatures = [method.signature for method in method_infos.values()]
|
477
477
|
return signatures
|
478
478
|
|
479
479
|
@property
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import inspect
|
2
2
|
import itertools
|
3
|
-
import logging
|
4
3
|
import os
|
5
4
|
import traceback
|
6
5
|
from abc import ABC
|
@@ -20,11 +19,16 @@ from clarifai.runners.utils.method_signatures import (
|
|
20
19
|
serialize,
|
21
20
|
signatures_to_json,
|
22
21
|
)
|
22
|
+
from clarifai.runners.utils.model_utils import is_proto_style_method
|
23
|
+
from clarifai.utils.logging import logger
|
23
24
|
|
24
25
|
_METHOD_INFO_ATTR = '_cf_method_info'
|
25
26
|
|
26
27
|
_RAISE_EXCEPTIONS = os.getenv("RAISE_EXCEPTIONS", "false").lower() in ("true", "1")
|
27
28
|
|
29
|
+
FALLBACK_METHOD_PROTO = 'PostModelOutputs'
|
30
|
+
FALLBACK_METHOD_PYTHON = 'predict'
|
31
|
+
|
28
32
|
|
29
33
|
class ModelClass(ABC):
|
30
34
|
'''
|
@@ -69,8 +73,12 @@ class ModelClass(ABC):
|
|
69
73
|
"""Load the model."""
|
70
74
|
|
71
75
|
def _handle_get_signatures_request(self) -> service_pb2.MultiOutputResponse:
|
72
|
-
methods = self.
|
73
|
-
signatures = {
|
76
|
+
methods = self._get_method_infos()
|
77
|
+
signatures = {
|
78
|
+
method.name: method.signature
|
79
|
+
for method in methods.values()
|
80
|
+
if method.signature is not None
|
81
|
+
}
|
74
82
|
resp = service_pb2.MultiOutputResponse(
|
75
83
|
status=status_pb2.Status(code=status_code_pb2.SUCCESS)
|
76
84
|
)
|
@@ -99,18 +107,61 @@ class ModelClass(ABC):
|
|
99
107
|
outputs = []
|
100
108
|
try:
|
101
109
|
# TODO add method name field to proto
|
102
|
-
|
110
|
+
# to support old callers who might not pass in the method name we have a few defaults.
|
111
|
+
# first we look for a PostModelOutputs method that is implemented as protos and use that
|
112
|
+
# if it exists.
|
113
|
+
# if not we default to 'predict'.
|
114
|
+
method_name = None
|
103
115
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
104
116
|
method_name = request.inputs[0].data.metadata['_method_name']
|
117
|
+
if method_name is None and FALLBACK_METHOD_PROTO in self._get_method_infos():
|
118
|
+
_info = self._get_method_infos(FALLBACK_METHOD_PROTO)
|
119
|
+
if _info.proto_method:
|
120
|
+
method_name = FALLBACK_METHOD_PROTO
|
121
|
+
if method_name is None:
|
122
|
+
method_name = FALLBACK_METHOD_PYTHON
|
105
123
|
if (
|
106
124
|
method_name == '_GET_SIGNATURES'
|
107
125
|
): # special case to fetch signatures, TODO add endpoint for this
|
108
126
|
return self._handle_get_signatures_request()
|
109
|
-
if method_name not in self.
|
127
|
+
if method_name not in self._get_method_infos():
|
110
128
|
raise ValueError(f"Method {method_name} not found in model class")
|
111
129
|
method = getattr(self, method_name)
|
112
|
-
method_info =
|
130
|
+
method_info = self._get_method_infos(method_name)
|
113
131
|
signature = method_info.signature
|
132
|
+
proto_method = method_info.proto_method
|
133
|
+
|
134
|
+
# If this is an old predict(proto) -> proto method, just call it and return
|
135
|
+
# the response.
|
136
|
+
if proto_method:
|
137
|
+
out_proto = method(request)
|
138
|
+
# if we already have out_proto.status.code set then return
|
139
|
+
if out_proto.status.code != status_code_pb2.ZERO:
|
140
|
+
return out_proto
|
141
|
+
|
142
|
+
successes = [
|
143
|
+
out.status.code == status_code_pb2.SUCCESS for out in out_proto.outputs
|
144
|
+
]
|
145
|
+
if all(successes):
|
146
|
+
# If all outputs are successful, we can return the response.
|
147
|
+
out_proto.status.CopyFrom(
|
148
|
+
status_pb2.Status(code=status_code_pb2.SUCCESS, description='Success')
|
149
|
+
)
|
150
|
+
return out_proto
|
151
|
+
if any(successes):
|
152
|
+
# If some outputs are successful and some are not, we return a mixed status.
|
153
|
+
out_proto.status.CopyFrom(
|
154
|
+
status_pb2.Status(
|
155
|
+
code=status_code_pb2.MIXED_STATUS, description='Mixed Status'
|
156
|
+
)
|
157
|
+
)
|
158
|
+
return out_proto
|
159
|
+
# If all outputs are failures, we return a failure status.
|
160
|
+
out_proto.status.CopyFrom(
|
161
|
+
status_pb2.Status(code=status_code_pb2.FAILURE, description='Failed')
|
162
|
+
)
|
163
|
+
return out_proto
|
164
|
+
|
114
165
|
python_param_types = method_info.python_param_types
|
115
166
|
for input in request.inputs:
|
116
167
|
# check if input is in old format
|
@@ -121,6 +172,7 @@ class ModelClass(ABC):
|
|
121
172
|
input.data, signature.input_fields
|
122
173
|
)
|
123
174
|
input.data.CopyFrom(new_data)
|
175
|
+
|
124
176
|
# convert inputs to python types
|
125
177
|
inputs = self._convert_input_protos_to_python(
|
126
178
|
request.inputs, signature.input_fields, python_param_types
|
@@ -148,7 +200,7 @@ class ModelClass(ABC):
|
|
148
200
|
except Exception as e:
|
149
201
|
if _RAISE_EXCEPTIONS:
|
150
202
|
raise
|
151
|
-
|
203
|
+
logger.exception("Error in predict")
|
152
204
|
return service_pb2.MultiOutputResponse(
|
153
205
|
status=status_pb2.Status(
|
154
206
|
code=status_code_pb2.FAILURE,
|
@@ -165,7 +217,7 @@ class ModelClass(ABC):
|
|
165
217
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
166
218
|
method_name = request.inputs[0].data.metadata['_method_name']
|
167
219
|
method = getattr(self, method_name)
|
168
|
-
method_info =
|
220
|
+
method_info = self._get_method_infos(method_name)
|
169
221
|
signature = method_info.signature
|
170
222
|
python_param_types = method_info.python_param_types
|
171
223
|
for input in request.inputs:
|
@@ -207,7 +259,7 @@ class ModelClass(ABC):
|
|
207
259
|
except Exception as e:
|
208
260
|
if _RAISE_EXCEPTIONS:
|
209
261
|
raise
|
210
|
-
|
262
|
+
logger.exception("Error in generate")
|
211
263
|
yield service_pb2.MultiOutputResponse(
|
212
264
|
status=status_pb2.Status(
|
213
265
|
code=status_code_pb2.FAILURE,
|
@@ -227,7 +279,7 @@ class ModelClass(ABC):
|
|
227
279
|
if len(request.inputs) > 0 and '_method_name' in request.inputs[0].data.metadata:
|
228
280
|
method_name = request.inputs[0].data.metadata['_method_name']
|
229
281
|
method = getattr(self, method_name)
|
230
|
-
method_info =
|
282
|
+
method_info = self._get_method_infos(method_name)
|
231
283
|
signature = method_info.signature
|
232
284
|
python_param_types = method_info.python_param_types
|
233
285
|
|
@@ -282,7 +334,7 @@ class ModelClass(ABC):
|
|
282
334
|
except Exception as e:
|
283
335
|
if _RAISE_EXCEPTIONS:
|
284
336
|
raise
|
285
|
-
|
337
|
+
logger.exception("Error in stream")
|
286
338
|
yield service_pb2.MultiOutputResponse(
|
287
339
|
status=status_pb2.Status(
|
288
340
|
code=status_code_pb2.FAILURE,
|
@@ -359,28 +411,44 @@ class ModelClass(ABC):
|
|
359
411
|
continue
|
360
412
|
methods[name] = method_info
|
361
413
|
# check for generic predict(request) -> response, etc. methods
|
362
|
-
#
|
363
|
-
#
|
364
|
-
|
365
|
-
|
366
|
-
|
414
|
+
# older models never had generate or stream so don't bother with them.
|
415
|
+
for name in [FALLBACK_METHOD_PROTO]: # , 'GenerateModelOutputs', 'StreamModelOutputs'):
|
416
|
+
if hasattr(cls, name) and name not in methods:
|
417
|
+
method = getattr(cls, name)
|
418
|
+
if not callable(method):
|
419
|
+
continue
|
420
|
+
if is_proto_style_method(method):
|
421
|
+
# If this is a proto-style method, we can add it to the registry as a special case.
|
422
|
+
methods[name] = _MethodInfo(method, proto_method=True)
|
367
423
|
# set method table for this class in the registry
|
368
424
|
return methods
|
369
425
|
|
370
426
|
@classmethod
|
371
|
-
def
|
427
|
+
def _get_method_infos(cls, func_name=None):
|
428
|
+
# FIXME: this is a re-use of the _METHOD_INFO_ATTR attribute to store the method info
|
429
|
+
# for all methods on the class. Should use a different attribute name to avoid confusion.
|
372
430
|
if not hasattr(cls, _METHOD_INFO_ATTR):
|
373
431
|
setattr(cls, _METHOD_INFO_ATTR, cls._register_model_methods())
|
374
|
-
|
432
|
+
method_infos = getattr(cls, _METHOD_INFO_ATTR)
|
375
433
|
if func_name:
|
376
|
-
return
|
377
|
-
return
|
434
|
+
return method_infos[func_name]
|
435
|
+
return method_infos
|
378
436
|
|
379
437
|
|
380
438
|
class _MethodInfo:
|
381
|
-
def __init__(self, method):
|
439
|
+
def __init__(self, method, proto_method=False):
|
440
|
+
"""Initialize a MethodInfo instance.
|
441
|
+
|
442
|
+
Args:
|
443
|
+
method: The method to wrap.
|
444
|
+
old_method: If True, this is an old proto-style method that returns a proto directly.
|
445
|
+
"""
|
382
446
|
self.name = method.__name__
|
383
|
-
self.
|
447
|
+
self.proto_method = proto_method
|
448
|
+
if not proto_method:
|
449
|
+
self.signature = build_function_signature(method)
|
450
|
+
else:
|
451
|
+
self.signature = None
|
384
452
|
self.python_param_types = {
|
385
453
|
p.name: p.annotation
|
386
454
|
for p in inspect.signature(method).parameters.values()
|
@@ -108,9 +108,19 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
108
108
|
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
109
109
|
|
110
110
|
resp = self.model.predict_wrapper(request)
|
111
|
-
if
|
111
|
+
# if we have any non-successful code already it's an error we can return.
|
112
|
+
if (
|
113
|
+
resp.status.code != status_code_pb2.SUCCESS
|
114
|
+
and resp.status.code != status_code_pb2.ZERO
|
115
|
+
):
|
112
116
|
return service_pb2.RunnerItemOutput(multi_output_response=resp)
|
113
|
-
successes = [
|
117
|
+
successes = []
|
118
|
+
for output in resp.outputs:
|
119
|
+
if not output.HasField('status') or not output.status.code:
|
120
|
+
raise Exception(
|
121
|
+
"Output must have a status code, please check the model implementation."
|
122
|
+
)
|
123
|
+
successes.append(output.status.code == status_code_pb2.SUCCESS)
|
114
124
|
if all(successes):
|
115
125
|
status = status_pb2.Status(
|
116
126
|
code=status_code_pb2.SUCCESS,
|
@@ -141,7 +151,11 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
141
151
|
ensure_urls_downloaded(request, auth_helper=self._auth_helper)
|
142
152
|
|
143
153
|
for resp in self.model.generate_wrapper(request):
|
144
|
-
if
|
154
|
+
# if we have any non-successful code already it's an error we can return.
|
155
|
+
if (
|
156
|
+
resp.status.code != status_code_pb2.SUCCESS
|
157
|
+
and resp.status.code != status_code_pb2.ZERO
|
158
|
+
):
|
145
159
|
yield service_pb2.RunnerItemOutput(multi_output_response=resp)
|
146
160
|
continue
|
147
161
|
successes = []
|
@@ -174,10 +188,12 @@ class ModelRunner(BaseRunner, HealthProbeRequestHandler):
|
|
174
188
|
self, runner_item_iterator: Iterator[service_pb2.RunnerItem]
|
175
189
|
) -> Iterator[service_pb2.RunnerItemOutput]:
|
176
190
|
# Call the generate() method the underlying model implements.
|
177
|
-
for resp in self.model.stream_wrapper(
|
178
|
-
|
179
|
-
|
180
|
-
|
191
|
+
for resp in self.model.stream_wrapper(pmo_iterator(runner_item_iterator)):
|
192
|
+
# if we have any non-successful code already it's an error we can return.
|
193
|
+
if (
|
194
|
+
resp.status.code != status_code_pb2.SUCCESS
|
195
|
+
and resp.status.code != status_code_pb2.ZERO
|
196
|
+
):
|
181
197
|
yield service_pb2.RunnerItemOutput(multi_output_response=resp)
|
182
198
|
continue
|
183
199
|
successes = []
|
@@ -18,7 +18,9 @@ def has_signature_method(
|
|
18
18
|
:param method_signatures: List of MethodSignature objects to search in.
|
19
19
|
:return: True if a method with the given name exists, False otherwise.
|
20
20
|
"""
|
21
|
-
return any(
|
21
|
+
return any(
|
22
|
+
method_signature.name == name for method_signature in method_signatures if method_signature
|
23
|
+
)
|
22
24
|
|
23
25
|
|
24
26
|
def generate_client_script(
|
@@ -153,6 +155,8 @@ model = Model("{model_ui_url}",
|
|
153
155
|
# Generate method signatures
|
154
156
|
method_signatures_str = []
|
155
157
|
for method_signature in method_signatures:
|
158
|
+
if method_signature is None:
|
159
|
+
continue
|
156
160
|
method_name = method_signature.name
|
157
161
|
client_script_str = f'response = model.{method_name}('
|
158
162
|
annotations = _get_annotations_source(method_signature)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import inspect
|
1
2
|
import os
|
2
3
|
import shlex
|
3
4
|
import signal
|
@@ -8,6 +9,7 @@ import time
|
|
8
9
|
|
9
10
|
import psutil
|
10
11
|
import requests
|
12
|
+
from clarifai_grpc.grpc.api import service_pb2
|
11
13
|
|
12
14
|
from clarifai.utils.logging import logger
|
13
15
|
|
@@ -133,3 +135,50 @@ def wait_for_server(base_url: str, timeout: int = None) -> None:
|
|
133
135
|
raise TimeoutError("Server did not become ready within timeout period")
|
134
136
|
except requests.exceptions.RequestException:
|
135
137
|
time.sleep(1)
|
138
|
+
|
139
|
+
|
140
|
+
def is_proto_style_method(method):
|
141
|
+
"""
|
142
|
+
Determines if the given method is likely an old-style proto method:
|
143
|
+
- Has a 'request' parameter after 'self'
|
144
|
+
- Optionally, returns a known proto response type
|
145
|
+
"""
|
146
|
+
try:
|
147
|
+
sig = inspect.signature(method)
|
148
|
+
params = list(sig.parameters.values())
|
149
|
+
|
150
|
+
# Must have at least 'self' and one argument
|
151
|
+
if len(params) < 2:
|
152
|
+
return False
|
153
|
+
|
154
|
+
# First parameter should be 'self'
|
155
|
+
if params[0].name != 'self':
|
156
|
+
return False
|
157
|
+
# Second param typically should be named 'request'
|
158
|
+
request_param = params[1]
|
159
|
+
if request_param.name != 'request':
|
160
|
+
return False
|
161
|
+
# Optionally: check annotation is a proto type
|
162
|
+
# (If signature is incomplete, this part will gracefully fall through)
|
163
|
+
return_annotation = sig.return_annotation
|
164
|
+
# If type annotation is available, check it's PostModelOutputsRequest
|
165
|
+
if (
|
166
|
+
request_param.annotation != inspect.Parameter.empty
|
167
|
+
and request_param.annotation != service_pb2.PostModelOutputsRequest
|
168
|
+
):
|
169
|
+
return False
|
170
|
+
# If return annotation is available, check it's MultiOutputResponse
|
171
|
+
if (
|
172
|
+
return_annotation != inspect.Signature.empty
|
173
|
+
and return_annotation != service_pb2.MultiOutputResponse
|
174
|
+
):
|
175
|
+
return False
|
176
|
+
if (
|
177
|
+
request_param.annotation is inspect.Parameter.empty
|
178
|
+
and return_annotation is inspect.Signature.empty
|
179
|
+
):
|
180
|
+
return True # signature OK, even if signature is empty
|
181
|
+
return True
|
182
|
+
|
183
|
+
except (ValueError, TypeError):
|
184
|
+
return False
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.5.
|
3
|
+
Version: 11.5.5
|
4
4
|
Home-page: https://github.com/Clarifai/clarifai-python
|
5
5
|
Author: Clarifai
|
6
6
|
Author-email: support@clarifai.com
|
@@ -32,7 +32,7 @@ Requires-Dist: click>=8.1.7
|
|
32
32
|
Requires-Dist: requests>=2.32.3
|
33
33
|
Requires-Dist: aiohttp>=3.10.0
|
34
34
|
Requires-Dist: uv==0.7.12
|
35
|
-
Requires-Dist:
|
35
|
+
Requires-Dist: psutil==7.0.0
|
36
36
|
Provides-Extra: all
|
37
37
|
Requires-Dist: pycocotools>=2.0.7; extra == "all"
|
38
38
|
Dynamic: author
|
@@ -1,4 +1,4 @@
|
|
1
|
-
clarifai/__init__.py,sha256=
|
1
|
+
clarifai/__init__.py,sha256=OF6Ppf-NDN6b_03eNnRsnEEmYm8mHwco3nReiqZIKq8,23
|
2
2
|
clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
clarifai/errors.py,sha256=GXa6D4v_L404J83jnRNFPH7s-1V9lk7w6Ws99f1g-AY,2772
|
4
4
|
clarifai/versions.py,sha256=ecSuEB_nOL2XSoYHDw2n23XUbm_KPOGjudMXmQrGdS8,224
|
@@ -24,7 +24,7 @@ clarifai/client/dataset.py,sha256=OgdpZkQ_vYmRxL8-qphcNozpvPV1bWTlte9Jv6UkKb8,35
|
|
24
24
|
clarifai/client/deployment.py,sha256=QBf0tzkKBEpzNgmOEmWUJMOlVWdFEFc70Y44o8y75Gs,2875
|
25
25
|
clarifai/client/input.py,sha256=jpX47qwn7aUBBIEuSSLHF5jk70XaWEh0prD065c9b-E,51205
|
26
26
|
clarifai/client/lister.py,sha256=1YEm2suNxPaJO4x9V5szgD_YX6N_00vgSO-7m0HagY8,2208
|
27
|
-
clarifai/client/model.py,sha256=
|
27
|
+
clarifai/client/model.py,sha256=8D_L6nuL4_hBAKgwseYhoAeKS9u3ky0zczkcJghxFe8,90072
|
28
28
|
clarifai/client/model_client.py,sha256=4gIS0mKBdiNMA1x_6Wo6H7WbfLsmQix64EpONcQjQV4,37129
|
29
29
|
clarifai/client/module.py,sha256=jLViQYvVV3FmRN_ivvbk83uwsx7CgYGeEx4dYAr6yD4,4537
|
30
30
|
clarifai/client/nodepool.py,sha256=Y5zQ0JLdTjAp2TmVnx7AAOwaB2YUslk3nl7s6BQ90FQ,16415
|
@@ -75,10 +75,10 @@ clarifai/runners/dockerfile_template/Dockerfile.template,sha256=DUH7F0-uLOV0LTjn
|
|
75
75
|
clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
76
|
clarifai/runners/models/dummy_openai_model.py,sha256=pcmAVbqTTGG4J3BLVjKfvM_SQ-GET_XexIUdLcr9Zvo,8373
|
77
77
|
clarifai/runners/models/mcp_class.py,sha256=RdKn7rW4vYol0VRDZiLTSMfkqjLhO1ijXAQ0Rq0Jfnw,6647
|
78
|
-
clarifai/runners/models/model_builder.py,sha256=
|
79
|
-
clarifai/runners/models/model_class.py,sha256
|
78
|
+
clarifai/runners/models/model_builder.py,sha256=QgGYruFVUS-xfva-wdGaZT0zpLbbc3dkYqOoYSM_jyU,63409
|
79
|
+
clarifai/runners/models/model_class.py,sha256=2yAXPsRFIjmyo8n9XUu-YaMOxyRpeVg_MJo4IAo0kRU,19365
|
80
80
|
clarifai/runners/models/model_run_locally.py,sha256=6-6WjEKc0ba3gAv4wOLdMs2XOzS3b-2bZHJS0wdVqJY,20088
|
81
|
-
clarifai/runners/models/model_runner.py,sha256=
|
81
|
+
clarifai/runners/models/model_runner.py,sha256=tZTX1XKMlniJEmd1WMjcwGfej5NCWqv23HZ4xrG8YV8,9153
|
82
82
|
clarifai/runners/models/model_servicer.py,sha256=415RqiXCPH-1WgFHrtZMDH1nb8gaQDpVlrQ_tvtbjOg,4523
|
83
83
|
clarifai/runners/models/openai_class.py,sha256=aXlk5W6LWkh-A4eZYi74DeLW0i_86_9DYYGxpJHXI0w,6688
|
84
84
|
clarifai/runners/models/visual_classifier_class.py,sha256=1ZoLfCT2crrgRbejjTMAIwpTRgQMiH9N9yflOVpFxSg,2721
|
@@ -88,12 +88,12 @@ clarifai/runners/pipeline_steps/pipeline_step_builder.py,sha256=E6Ce3b0RolYLMJHa
|
|
88
88
|
clarifai/runners/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
89
89
|
clarifai/runners/pipelines/pipeline_builder.py,sha256=z_bCwjwQPFa_1AYkorhh5r6t6r5hC5K2D8Z1LTEzIpg,12801
|
90
90
|
clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
|
-
clarifai/runners/utils/code_script.py,sha256=
|
91
|
+
clarifai/runners/utils/code_script.py,sha256=RxN4UOBIa61WW1U5y-gC-dwr_tY8ZAKr1nR8sySNWt4,13922
|
92
92
|
clarifai/runners/utils/const.py,sha256=MK7lTzzJKbOiyiUtG_jlJXfz_xNKMn5LjkQ9vjbttXE,1538
|
93
93
|
clarifai/runners/utils/data_utils.py,sha256=HRpMYR2O0OiDpXXhOManLHTeomC4bFnXMHVAiT_12yE,20856
|
94
94
|
clarifai/runners/utils/loader.py,sha256=K5Y8MPbIe5STw2gDnrL8KqFgKNxEo7bz-RV0ip1T4PM,10900
|
95
95
|
clarifai/runners/utils/method_signatures.py,sha256=qdHaO8ZIgP6BBXXMhMPhcQ46dse-XMP2t4VJCNG7O3Q,18335
|
96
|
-
clarifai/runners/utils/model_utils.py,sha256=
|
96
|
+
clarifai/runners/utils/model_utils.py,sha256=eTIGOZpt0icOGfVnmYM9yO9g7CTsb_plLkzvJIH1QRo,6288
|
97
97
|
clarifai/runners/utils/openai_convertor.py,sha256=ZlIrvvfHttD_DavLvmKZdL8gNq_TQvQtZVnYamwdWz4,8248
|
98
98
|
clarifai/runners/utils/pipeline_validation.py,sha256=RWWWUA3mNCXHCSNpuofMGfXfWEYe7LrYKwIc-1VFvQs,6444
|
99
99
|
clarifai/runners/utils/serializers.py,sha256=pI7GqMTC0T3Lu_X8v8TO4RiplO-gC_49Ns37jYwsPtg,7908
|
@@ -118,9 +118,9 @@ clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
118
118
|
clarifai/workflows/export.py,sha256=HvUYG9N_-UZoRR0-_tdGbZ950_AeBqawSppgUxQebR0,1913
|
119
119
|
clarifai/workflows/utils.py,sha256=ESL3INcouNcLKCh-nMpfXX-YbtCzX7tz7hT57_RGQ3M,2079
|
120
120
|
clarifai/workflows/validate.py,sha256=UhmukyHkfxiMFrPPeBdUTiCOHQT5-shqivlBYEyKTlU,2931
|
121
|
-
clarifai-11.5.
|
122
|
-
clarifai-11.5.
|
123
|
-
clarifai-11.5.
|
124
|
-
clarifai-11.5.
|
125
|
-
clarifai-11.5.
|
126
|
-
clarifai-11.5.
|
121
|
+
clarifai-11.5.5.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
|
122
|
+
clarifai-11.5.5.dist-info/METADATA,sha256=SkHXmknF4MRdxN2h9_8tqq-ZZid1avN-WisUenwU6ak,22737
|
123
|
+
clarifai-11.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
124
|
+
clarifai-11.5.5.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
|
125
|
+
clarifai-11.5.5.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
|
126
|
+
clarifai-11.5.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|