clarifai 11.2.1__py3-none-any.whl → 11.2.3__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/cli/base.py +225 -89
- clarifai/cli/compute_cluster.py +24 -21
- clarifai/cli/deployment.py +66 -42
- clarifai/cli/model.py +1 -1
- clarifai/cli/nodepool.py +59 -41
- clarifai/client/app.py +1 -1
- clarifai/client/auth/stub.py +4 -5
- clarifai/client/dataset.py +3 -4
- clarifai/runners/models/model_builder.py +38 -15
- clarifai/runners/models/model_run_locally.py +2 -1
- clarifai/runners/utils/const.py +9 -8
- clarifai/runners/utils/loader.py +36 -6
- clarifai/utils/cli.py +125 -36
- clarifai/utils/config.py +105 -0
- clarifai/utils/constants.py +4 -0
- clarifai/utils/logging.py +64 -21
- clarifai/utils/misc.py +2 -0
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/METADATA +2 -2
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/RECORD +24 -23
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/WHEEL +1 -1
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/entry_points.txt +0 -0
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/licenses/LICENSE +0 -0
- {clarifai-11.2.1.dist-info → clarifai-11.2.3.dist-info}/top_level.txt +0 -0
clarifai/utils/cli.py
CHANGED
@@ -2,16 +2,13 @@ import importlib
|
|
2
2
|
import os
|
3
3
|
import pkgutil
|
4
4
|
import sys
|
5
|
+
import typing as t
|
6
|
+
from collections import defaultdict
|
7
|
+
from typing import OrderedDict
|
5
8
|
|
6
9
|
import click
|
7
10
|
import yaml
|
8
|
-
|
9
|
-
from rich.console import Console
|
10
|
-
from rich.panel import Panel
|
11
|
-
from rich.style import Style
|
12
|
-
from rich.text import Text
|
13
|
-
|
14
|
-
from clarifai.utils.logging import logger
|
11
|
+
from tabulate import tabulate
|
15
12
|
|
16
13
|
|
17
14
|
def from_yaml(filename: str):
|
@@ -31,19 +28,6 @@ def dump_yaml(data, filename: str):
|
|
31
28
|
click.echo(f"Error writing YAML file: {e}", err=True)
|
32
29
|
|
33
30
|
|
34
|
-
def set_base_url(env):
|
35
|
-
environments = {
|
36
|
-
'prod': 'https://api.clarifai.com',
|
37
|
-
'staging': 'https://api-staging.clarifai.com',
|
38
|
-
'dev': 'https://api-dev.clarifai.com'
|
39
|
-
}
|
40
|
-
|
41
|
-
if env in environments:
|
42
|
-
return environments[env]
|
43
|
-
else:
|
44
|
-
raise ValueError("Invalid environment. Please choose from 'prod', 'staging', 'dev'.")
|
45
|
-
|
46
|
-
|
47
31
|
# Dynamically find and import all command modules from the cli directory
|
48
32
|
def load_command_modules():
|
49
33
|
package_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'cli')
|
@@ -53,27 +37,132 @@ def load_command_modules():
|
|
53
37
|
importlib.import_module(f'clarifai.cli.{module_name}')
|
54
38
|
|
55
39
|
|
56
|
-
def display_co_resources(response,
|
40
|
+
def display_co_resources(response,
|
41
|
+
custom_columns={
|
42
|
+
'ID': lambda c: c.id,
|
43
|
+
'USER_ID': lambda c: c.user_id,
|
44
|
+
'DESCRIPTION': lambda c: c.description,
|
45
|
+
}):
|
57
46
|
"""Display compute orchestration resources listing results using rich."""
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
48
|
+
formatter = TableFormatter(custom_columns)
|
49
|
+
print(formatter.format(list(response), fmt="plain"))
|
50
|
+
|
51
|
+
|
52
|
+
class TableFormatter:
|
53
|
+
|
54
|
+
def __init__(self, custom_columns: OrderedDict):
|
55
|
+
"""
|
56
|
+
Initializes the TableFormatter with column headers and custom column mappings.
|
57
|
+
|
58
|
+
:param headers: List of column headers for the table.
|
59
|
+
"""
|
60
|
+
self.custom_columns = custom_columns
|
61
|
+
|
62
|
+
def format(self, objects, fmt='plain'):
|
63
|
+
"""
|
64
|
+
Formats a list of objects into a table with custom columns.
|
65
|
+
|
66
|
+
:param objects: List of objects to format into a table.
|
67
|
+
:return: A string representing the table.
|
68
|
+
"""
|
69
|
+
# Prepare the rows by applying the custom column functions to each object
|
70
|
+
rows = []
|
71
|
+
for obj in objects:
|
72
|
+
# row = [self.custom_columns[header](obj) for header in self.headers]
|
73
|
+
row = [f(obj) for f in self.custom_columns.values()]
|
74
|
+
rows.append(row)
|
75
|
+
|
76
|
+
# Create the table
|
77
|
+
table = tabulate(rows, headers=self.custom_columns.keys(), tablefmt=fmt)
|
78
|
+
return table
|
79
|
+
|
80
|
+
|
81
|
+
class AliasedGroup(click.Group):
|
82
|
+
|
83
|
+
def __init__(self,
|
84
|
+
name: t.Optional[str] = None,
|
85
|
+
commands: t.Optional[t.Union[t.MutableMapping[str, click.Command], t.Sequence[
|
86
|
+
click.Command]]] = None,
|
87
|
+
**attrs: t.Any) -> None:
|
88
|
+
super().__init__(name, commands, **attrs)
|
89
|
+
self.alias_map = {}
|
90
|
+
self.command_to_aliases = defaultdict(list)
|
91
|
+
|
92
|
+
def add_alias(self, cmd: click.Command, alias: str) -> None:
|
93
|
+
self.alias_map[alias] = cmd
|
94
|
+
if alias != cmd.name:
|
95
|
+
self.command_to_aliases[cmd].append(alias)
|
96
|
+
|
97
|
+
def command(self, aliases=None, *args,
|
98
|
+
**kwargs) -> t.Callable[[t.Callable[..., t.Any]], click.Command]:
|
99
|
+
cmd_decorator = super().command(*args, **kwargs)
|
100
|
+
if aliases is None:
|
101
|
+
aliases = []
|
102
|
+
|
103
|
+
def aliased_decorator(f):
|
104
|
+
cmd = cmd_decorator(f)
|
105
|
+
if cmd.name:
|
106
|
+
self.add_alias(cmd, cmd.name)
|
107
|
+
for alias in aliases:
|
108
|
+
self.add_alias(cmd, alias)
|
109
|
+
return cmd
|
110
|
+
|
111
|
+
f = None
|
112
|
+
if args and callable(args[0]):
|
113
|
+
(f,) = args
|
114
|
+
if f is not None:
|
115
|
+
return aliased_decorator(f)
|
116
|
+
return aliased_decorator
|
117
|
+
|
118
|
+
def group(self, aliases=None, *args,
|
119
|
+
**kwargs) -> t.Callable[[t.Callable[..., t.Any]], click.Group]:
|
120
|
+
cmd_decorator = super().group(*args, **kwargs)
|
121
|
+
if aliases is None:
|
122
|
+
aliases = []
|
123
|
+
|
124
|
+
def aliased_decorator(f):
|
125
|
+
cmd = cmd_decorator(f)
|
126
|
+
if cmd.name:
|
127
|
+
self.add_alias(cmd, cmd.name)
|
128
|
+
for alias in aliases:
|
129
|
+
self.add_alias(cmd, alias)
|
130
|
+
return cmd
|
131
|
+
|
132
|
+
f = None
|
133
|
+
if args and callable(args[0]):
|
134
|
+
(f,) = args
|
135
|
+
if f is not None:
|
136
|
+
return aliased_decorator(f)
|
137
|
+
return aliased_decorator
|
138
|
+
|
139
|
+
def get_command(self, ctx: click.Context, cmd_name: str) -> t.Optional[click.Command]:
|
140
|
+
rv = click.Group.get_command(self, ctx, cmd_name)
|
141
|
+
if rv is not None:
|
142
|
+
return rv
|
143
|
+
return self.alias_map.get(cmd_name)
|
144
|
+
|
145
|
+
def format_commands(self, ctx, formatter):
|
146
|
+
sub_commands = self.list_commands(ctx)
|
147
|
+
|
148
|
+
rows = []
|
149
|
+
for sub_command in sub_commands:
|
150
|
+
cmd = self.get_command(ctx, sub_command)
|
151
|
+
if cmd is None or getattr(cmd, 'hidden', False):
|
152
|
+
continue
|
153
|
+
if cmd in self.command_to_aliases:
|
154
|
+
aliases = ', '.join(self.command_to_aliases[cmd])
|
155
|
+
sub_command = f'{sub_command} ({aliases})'
|
156
|
+
cmd_help = cmd.help
|
157
|
+
rows.append((sub_command, cmd_help))
|
158
|
+
|
159
|
+
if rows:
|
160
|
+
with formatter.section("Commands"):
|
161
|
+
formatter.write_dl(rows)
|
74
162
|
|
75
163
|
|
76
164
|
def validate_context(ctx):
|
165
|
+
from clarifai.utils.logging import logger
|
77
166
|
if ctx.obj == {}:
|
78
167
|
logger.error("CLI config file missing. Run `clarifai login` to set up the CLI config.")
|
79
168
|
sys.exit(1)
|
clarifai/utils/config.py
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
import os
|
2
|
+
from collections import OrderedDict
|
3
|
+
from dataclasses import dataclass, field
|
4
|
+
|
5
|
+
import yaml
|
6
|
+
|
7
|
+
from clarifai.utils.constants import DEFAULT_CONFIG
|
8
|
+
|
9
|
+
|
10
|
+
class Context(OrderedDict):
|
11
|
+
"""
|
12
|
+
A context which has a name and a set of key-values as a dict under env.
|
13
|
+
|
14
|
+
You can access the keys directly.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def __init__(self, name, **kwargs):
|
18
|
+
self['name'] = name
|
19
|
+
# when loading from config we may have the env: section in yaml already so we get it here.
|
20
|
+
if 'env' in kwargs:
|
21
|
+
self['env'] = kwargs['env']
|
22
|
+
else: # when consructing as Context(name, key=value) we set it here.
|
23
|
+
self['env'] = kwargs
|
24
|
+
|
25
|
+
def __getattr__(self, key):
|
26
|
+
try:
|
27
|
+
if key == 'name':
|
28
|
+
return self[key]
|
29
|
+
if key == 'env':
|
30
|
+
raise AttributeError("Don't access .env directly")
|
31
|
+
|
32
|
+
# Allow accessing CLARIFAI_PAT type env var names from config as .pat
|
33
|
+
envvar_name = 'CLARIFAI_' + key.upper()
|
34
|
+
env = self['env']
|
35
|
+
if envvar_name in env:
|
36
|
+
value = env[envvar_name]
|
37
|
+
if value == "ENVVAR":
|
38
|
+
return os.environ[envvar_name]
|
39
|
+
else:
|
40
|
+
value = env[key]
|
41
|
+
|
42
|
+
if isinstance(value, dict):
|
43
|
+
return Context(value)
|
44
|
+
|
45
|
+
return value
|
46
|
+
except KeyError as e:
|
47
|
+
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{key}'") from e
|
48
|
+
|
49
|
+
def __setattr__(self, key, value):
|
50
|
+
if key == "name":
|
51
|
+
self['name'] = value
|
52
|
+
else:
|
53
|
+
self['env'][key] = value
|
54
|
+
|
55
|
+
def __delattr__(self, key):
|
56
|
+
try:
|
57
|
+
del self['env'][key]
|
58
|
+
except KeyError as e:
|
59
|
+
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{key}'") from e
|
60
|
+
|
61
|
+
def to_serializable_dict(self):
|
62
|
+
return dict(self['env'])
|
63
|
+
|
64
|
+
|
65
|
+
@dataclass
|
66
|
+
class Config():
|
67
|
+
current_context: str
|
68
|
+
filename: str
|
69
|
+
contexts: OrderedDict[str, Context] = field(default_factory=OrderedDict)
|
70
|
+
|
71
|
+
def __post_init__(self):
|
72
|
+
for k, v in self.contexts.items():
|
73
|
+
if 'name' not in v:
|
74
|
+
v['name'] = k
|
75
|
+
self.contexts = {k: Context(**v) for k, v in self.contexts.items()}
|
76
|
+
|
77
|
+
@classmethod
|
78
|
+
def from_yaml(cls, filename: str = DEFAULT_CONFIG):
|
79
|
+
with open(filename, 'r') as f:
|
80
|
+
cfg = yaml.safe_load(f)
|
81
|
+
return cls(**cfg, filename=filename)
|
82
|
+
|
83
|
+
def to_dict(self):
|
84
|
+
return {
|
85
|
+
'current_context': self.current_context,
|
86
|
+
'contexts': {k: v.to_serializable_dict()
|
87
|
+
for k, v in self.contexts.items()}
|
88
|
+
}
|
89
|
+
|
90
|
+
def to_yaml(self, filename: str = None):
|
91
|
+
if filename is None:
|
92
|
+
filename = self.filename
|
93
|
+
dir = os.path.dirname(filename)
|
94
|
+
if len(dir):
|
95
|
+
os.makedirs(dir, exist_ok=True)
|
96
|
+
_dict = self.to_dict()
|
97
|
+
for k, v in _dict['contexts'].items():
|
98
|
+
v.pop('name', None)
|
99
|
+
with open(filename, 'w') as f:
|
100
|
+
yaml.safe_dump(_dict, f)
|
101
|
+
|
102
|
+
@property
|
103
|
+
def current(self) -> Context:
|
104
|
+
""" get the current Context """
|
105
|
+
return self.contexts[self.current_context]
|
clarifai/utils/constants.py
CHANGED
clarifai/utils/logging.py
CHANGED
@@ -10,15 +10,6 @@ import traceback
|
|
10
10
|
from collections import defaultdict
|
11
11
|
from typing import Any, Dict, List, Optional, Union
|
12
12
|
|
13
|
-
from rich import print as rprint
|
14
|
-
from rich.console import Console
|
15
|
-
from rich.logging import RichHandler
|
16
|
-
from rich.table import Table
|
17
|
-
from rich.traceback import install
|
18
|
-
from rich.tree import Tree
|
19
|
-
|
20
|
-
install()
|
21
|
-
|
22
13
|
# The default logger to use throughout the SDK is defined at bottom of this file.
|
23
14
|
|
24
15
|
# For the json logger.
|
@@ -29,6 +20,20 @@ FIELD_BLACKLIST = [
|
|
29
20
|
'msg', 'message', 'account', 'levelno', 'created', 'threadName', 'name', 'processName',
|
30
21
|
'module', 'funcName', 'msecs', 'relativeCreated', 'pathname', 'args', 'thread', 'process'
|
31
22
|
]
|
23
|
+
COLORS = {
|
24
|
+
'ARGUMENTS': '\033[90m', # Gray
|
25
|
+
'DEBUG': '\033[90m', # Gray
|
26
|
+
'INFO': '\033[32m', # Green
|
27
|
+
'WARNING': '\033[33m', # Yellow
|
28
|
+
'ERROR': '\033[31m', # Red
|
29
|
+
'CRITICAL': '\033[31m', # Red
|
30
|
+
'TIME': '\033[34m',
|
31
|
+
'RESET': '\033[0m'
|
32
|
+
}
|
33
|
+
LOG_FORMAT = f"[%(levelname)s] {COLORS.get('TIME')}%(asctime)s{COLORS.get('RESET')} %(message)s |" \
|
34
|
+
f"{COLORS.get('ARGUMENTS')} " \
|
35
|
+
f"%(optional_args)s " \
|
36
|
+
f"thread=%(thread)d {COLORS.get('RESET')}"
|
32
37
|
|
33
38
|
# Create thread local storage that the format() call below uses.
|
34
39
|
# This is only used by the json_logger in the appropriate CLARIFAI_DEPLOY levels.
|
@@ -59,6 +64,9 @@ def get_req_id_from_context():
|
|
59
64
|
|
60
65
|
def display_workflow_tree(nodes_data: List[Dict]) -> None:
|
61
66
|
"""Displays a tree of the workflow nodes."""
|
67
|
+
from rich import print as rprint
|
68
|
+
from rich.tree import Tree
|
69
|
+
|
62
70
|
# Create a mapping of node_id to the list of node_ids that are connected to it.
|
63
71
|
node_adj_mapping = defaultdict(list)
|
64
72
|
# Create a mapping of node_id to the node data info.
|
@@ -104,8 +112,10 @@ def display_workflow_tree(nodes_data: List[Dict]) -> None:
|
|
104
112
|
rprint(tree)
|
105
113
|
|
106
114
|
|
107
|
-
def table_from_dict(data: List[Dict], column_names: List[str],
|
115
|
+
def table_from_dict(data: List[Dict], column_names: List[str],
|
116
|
+
title: str = "") -> 'rich.Table': #noqa F821
|
108
117
|
"""Use this function for printing tables from a list of dicts."""
|
118
|
+
from rich.table import Table
|
109
119
|
table = Table(title=title, show_lines=False, show_header=True, header_style="blue")
|
110
120
|
for column_name in column_names:
|
111
121
|
table.add_column(column_name)
|
@@ -134,23 +144,18 @@ def _configure_logger(name: str, logger_level: Union[int, str] = logging.NOTSET)
|
|
134
144
|
# If ENABLE_JSON_LOGGER is not set, then use json logger if in k8s.
|
135
145
|
enabled_json = os.getenv('ENABLE_JSON_LOGGER', None)
|
136
146
|
in_k8s = 'KUBERNETES_SERVICE_HOST' in os.environ
|
147
|
+
handler = logging.StreamHandler()
|
148
|
+
handler.setLevel(logger_level)
|
137
149
|
if enabled_json == 'true' or (in_k8s and enabled_json != 'false'):
|
138
150
|
# Add the json handler and formatter
|
139
|
-
handler = logging.StreamHandler()
|
140
151
|
formatter = JsonFormatter()
|
141
152
|
handler.setFormatter(formatter)
|
142
|
-
logger.addHandler(handler)
|
143
153
|
else:
|
144
|
-
#
|
145
|
-
|
146
|
-
width, _ = os.get_terminal_size()
|
147
|
-
except OSError:
|
148
|
-
width = 255
|
149
|
-
handler = RichHandler(
|
150
|
-
rich_tracebacks=True, log_time_format="%Y-%m-%d %H:%M:%S.%f", console=Console(width=width))
|
151
|
-
formatter = logging.Formatter('%(message)s')
|
154
|
+
# create formatter and add it to the handlers
|
155
|
+
formatter = TerminalFormatter(LOG_FORMAT)
|
152
156
|
handler.setFormatter(formatter)
|
153
|
-
|
157
|
+
# add the handlers to the logger
|
158
|
+
logger.addHandler(handler)
|
154
159
|
|
155
160
|
|
156
161
|
def get_logger(logger_level: Union[int, str] = logging.NOTSET,
|
@@ -207,6 +212,8 @@ def display_concept_relations_tree(relations_dict: Dict[str, Any]) -> None:
|
|
207
212
|
Args:
|
208
213
|
relations_dict (dict): A dict of concept relations info.
|
209
214
|
"""
|
215
|
+
from rich import print as rprint
|
216
|
+
from rich.tree import Tree
|
210
217
|
for parent, children in relations_dict.items():
|
211
218
|
tree = Tree(parent)
|
212
219
|
for child in children:
|
@@ -372,5 +379,41 @@ class JsonFormatter(logging.Formatter):
|
|
372
379
|
)
|
373
380
|
|
374
381
|
|
382
|
+
class TerminalFormatter(logging.Formatter):
|
383
|
+
""" If you have fields in your Formatter (see setup_logger where we setup the format strings) then
|
384
|
+
you can set them on the record using a filter. We do that for req_id here which is a request
|
385
|
+
specific field. This allows us to find requests easily between services.
|
386
|
+
"""
|
387
|
+
|
388
|
+
def format(self, record):
|
389
|
+
record.optional_args = []
|
390
|
+
|
391
|
+
user_id = getattr(thread_log_info, 'user_id', None)
|
392
|
+
if user_id is not None:
|
393
|
+
record.optional_args.append("user_id=" + user_id)
|
394
|
+
|
395
|
+
app_id = getattr(thread_log_info, 'app_id', None)
|
396
|
+
if app_id is not None:
|
397
|
+
record.optional_args.append("app_id=" + app_id)
|
398
|
+
|
399
|
+
req_id = getattr(thread_log_info, 'req_id', None)
|
400
|
+
if req_id is not None:
|
401
|
+
record.optional_args.append("req_id=" + req_id)
|
402
|
+
|
403
|
+
record.optional_args = " ".join(record.optional_args)
|
404
|
+
|
405
|
+
color_code = COLORS.get(record.levelname, '')
|
406
|
+
|
407
|
+
record.levelname = f"{color_code}{record.levelname}{COLORS.get('RESET')}"
|
408
|
+
record.msg = f"{color_code}{str(record.msg)}{COLORS.get('RESET')}"
|
409
|
+
|
410
|
+
return super(TerminalFormatter, self).format(record)
|
411
|
+
|
412
|
+
def formatTime(self, record, datefmt=None):
|
413
|
+
# Note we didn't go with UTC here as it's easier to understand time in your time zone.
|
414
|
+
# The json logger leverages UTC though.
|
415
|
+
return datetime.datetime.fromtimestamp(record.created).strftime('%H:%M:%S.%f')
|
416
|
+
|
417
|
+
|
375
418
|
# the default logger for the SDK.
|
376
419
|
logger = get_logger(logger_level=os.environ.get("LOG_LEVEL", "INFO"), name="clarifai")
|
clarifai/utils/misc.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: clarifai
|
3
|
-
Version: 11.2.
|
3
|
+
Version: 11.2.3
|
4
4
|
Summary: Clarifai Python SDK
|
5
5
|
Home-page: https://github.com/Clarifai/clarifai-python
|
6
6
|
Author: Clarifai
|
@@ -21,7 +21,7 @@ Requires-Python: >=3.8
|
|
21
21
|
Description-Content-Type: text/markdown
|
22
22
|
License-File: LICENSE
|
23
23
|
Requires-Dist: clarifai-grpc>=11.2.6
|
24
|
-
Requires-Dist: clarifai-protocol>=0.0.
|
24
|
+
Requires-Dist: clarifai-protocol>=0.0.21
|
25
25
|
Requires-Dist: numpy>=1.22.0
|
26
26
|
Requires-Dist: tqdm>=4.65.0
|
27
27
|
Requires-Dist: rich>=13.4.2
|
@@ -1,20 +1,20 @@
|
|
1
|
-
clarifai/__init__.py,sha256=
|
1
|
+
clarifai/__init__.py,sha256=cMulojaj2PqKzdUooqsKg8CUvyqheI7pr_8Y-DBZwsQ,23
|
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
|
5
5
|
clarifai/cli/README.md,sha256=YGApHfeUyu5P0Pdth-mqQCQftWHDxz6bugDlvDXDhOE,1942
|
6
6
|
clarifai/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
7
|
clarifai/cli/__main__.py,sha256=utJ2F40cl0jPHcYdTlGZRqpPfZ0CtVYB-8Ft0b2fWD4,72
|
8
|
-
clarifai/cli/base.py,sha256=
|
9
|
-
clarifai/cli/compute_cluster.py,sha256=
|
10
|
-
clarifai/cli/deployment.py,sha256=
|
11
|
-
clarifai/cli/model.py,sha256=
|
12
|
-
clarifai/cli/nodepool.py,sha256=
|
8
|
+
clarifai/cli/base.py,sha256=ZG1Ial89wGVqt4bSFYmIoRH_OZtw2yxlq3Ihp9e025U,7592
|
9
|
+
clarifai/cli/compute_cluster.py,sha256=dma_dgzSg5pYQcxlWhoKYdMFPO2KS7HzsN81ploNB-E,2083
|
10
|
+
clarifai/cli/deployment.py,sha256=wBWkYfLr6W73LScF6NlQM-reXWUP38VfAudltjpnFpk,3822
|
11
|
+
clarifai/cli/model.py,sha256=4n9CmpKOHXY1KxEzhmUy6l5hhU5u_mKhatLXY0L3LVo,12064
|
12
|
+
clarifai/cli/nodepool.py,sha256=7nTNd9T-UEPFE36vbxwdUHu2B3NECbN-lSTb_DQYw18,3874
|
13
13
|
clarifai/client/__init__.py,sha256=xI1U0l5AZdRThvQAXCLsd9axxyFzXXJ22m8LHqVjQRU,662
|
14
|
-
clarifai/client/app.py,sha256=
|
14
|
+
clarifai/client/app.py,sha256=FnKvKksYZwdry0e4Obh-trdSO1mv6QcVAa3kzKiQMpU,38340
|
15
15
|
clarifai/client/base.py,sha256=hSHOqkXbSKyaRDeylMMnkhUHCAHhEqno4KI0CXGziBA,7536
|
16
16
|
clarifai/client/compute_cluster.py,sha256=EvW9TJjPvInUlggfg1A98sxoWH8_PY5rCVXZhsj6ac0,8705
|
17
|
-
clarifai/client/dataset.py,sha256=
|
17
|
+
clarifai/client/dataset.py,sha256=6DqfXQtiHoOJq0vPw2fz5ATo5zxQMmlhKG9IBwhnXeU,32078
|
18
18
|
clarifai/client/deployment.py,sha256=w7Y6pA1rYG4KRK1SwusRZc2sQRXlG8wezuVdzSWpCo0,2586
|
19
19
|
clarifai/client/input.py,sha256=obMAHMDU1OwfXZ8KraOnGFlWzlW-3F7Ob_2lcOQMlhY,46339
|
20
20
|
clarifai/client/lister.py,sha256=03KGMvs5RVyYqxLsSrWhNc34I8kiF1Ph0NeyEwu7nMU,2082
|
@@ -27,7 +27,7 @@ clarifai/client/workflow.py,sha256=5VjZ2D8cudLznR8yhrwNawOmjxUhkJllZMKM6pn-4gs,1
|
|
27
27
|
clarifai/client/auth/__init__.py,sha256=7EwR0NrozkAUwpUnCsqXvE_p0wqx_SelXlSpKShKJK0,136
|
28
28
|
clarifai/client/auth/helper.py,sha256=Ngw5IDkOWvnOz5YwViVk55z3mC52MyezLc0G3WxLqok,14643
|
29
29
|
clarifai/client/auth/register.py,sha256=2CMdBsoVLoTfjyksE6j7BM2tiEc73WKYvxnwDDgNn1k,536
|
30
|
-
clarifai/client/auth/stub.py,sha256=
|
30
|
+
clarifai/client/auth/stub.py,sha256=FrA5QpEFY4sK6fvPVhTg19ROLHkYSRo343nNqiVE7xw,4963
|
31
31
|
clarifai/constants/base.py,sha256=ogmFSZYoF0YhGjHg5aiOc3MLqPr_poKAls6xaD0_C3U,89
|
32
32
|
clarifai/constants/dataset.py,sha256=vjK3IlgXu31HycuvjRSzEQSqhU6xfj5TIgo6IpyUWoc,609
|
33
33
|
clarifai/constants/input.py,sha256=WcHwToUVIK9ItAhDefaSohQHCLNeR55PSjZ0BFnoZ3U,28
|
@@ -66,24 +66,25 @@ clarifai/runners/server.py,sha256=xHDLdhQApCgYG19QOKXqJNCGNyw1Vsvobq3UdryDrVc,41
|
|
66
66
|
clarifai/runners/dockerfile_template/Dockerfile.template,sha256=5cjv7U8PmWa3DB_5B1CqSYh_6GE0E0np52TIAa7EIDE,2312
|
67
67
|
clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
68
|
clarifai/runners/models/base_typed_model.py,sha256=0QCWxch8CcyJSKvE1D4PILd2RSnQZHTmx4DXlQQ6dpo,7856
|
69
|
-
clarifai/runners/models/model_builder.py,sha256=
|
69
|
+
clarifai/runners/models/model_builder.py,sha256=eL7gLgdJjsHrJy2Omu0XiGoACBl3CwCZan4SSEiUmG8,33984
|
70
70
|
clarifai/runners/models/model_class.py,sha256=9JSPAr4U4K7xI0kSl-q0mHB06zknm2OR-8XIgBCto94,1611
|
71
|
-
clarifai/runners/models/model_run_locally.py,sha256=
|
71
|
+
clarifai/runners/models/model_run_locally.py,sha256=qwWJ4UvvMx3ktbwIwjoucJ725TxRbK9CDa5ZMiy6vJM,20592
|
72
72
|
clarifai/runners/models/model_runner.py,sha256=PyxwK-33hLlhkD07tTXkjWZ_iNlZHl9_8AZ2W7WfExI,6097
|
73
73
|
clarifai/runners/models/model_servicer.py,sha256=jtQmtGeQlvQ5ttMvVw7CMnNzq-rLkTaxR2IWF9SnHwk,2808
|
74
74
|
clarifai/runners/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
clarifai/runners/utils/const.py,sha256=
|
75
|
+
clarifai/runners/utils/const.py,sha256=9qnOC1Bt6SGLQ9XCQEQ6519XhW4gzcztsV1Rgej67Vw,1055
|
76
76
|
clarifai/runners/utils/data_handler.py,sha256=sxy9zlAgI6ETuxCQhUgEXAn2GCsaW1GxpK6GTaMne0g,6966
|
77
77
|
clarifai/runners/utils/data_utils.py,sha256=R1iQ82TuQ9JwxCJk8yEB1Lyb0BYVhVbWJI9YDi1zGOs,318
|
78
|
-
clarifai/runners/utils/loader.py,sha256=
|
78
|
+
clarifai/runners/utils/loader.py,sha256=Sl0m29RDtMPx2cIiSbbDFtKHQj2ktXQ5CnkvaHi-zDc,8804
|
79
79
|
clarifai/runners/utils/url_fetcher.py,sha256=v_8JOWmkyFAzsBulsieKX7Nfjy1Yg7wGSZeqfEvw2cg,1640
|
80
80
|
clarifai/schema/search.py,sha256=JjTi8ammJgZZ2OGl4K6tIA4zEJ1Fr2ASZARXavI1j5c,2448
|
81
81
|
clarifai/urls/helper.py,sha256=tjoMGGHuWX68DUB0pk4MEjrmFsClUAQj2jmVEM_Sy78,4751
|
82
82
|
clarifai/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
-
clarifai/utils/cli.py,sha256=
|
84
|
-
clarifai/utils/
|
85
|
-
clarifai/utils/
|
86
|
-
clarifai/utils/
|
83
|
+
clarifai/utils/cli.py,sha256=FUFJJb8Jzohpt132JE43xHNzWtX0N8fbWROxJISfCM0,5072
|
84
|
+
clarifai/utils/config.py,sha256=MxuQ1U4EOT4yVOEcRyv3OUPnoY_A_J5cZKHJGiuuo30,2883
|
85
|
+
clarifai/utils/constants.py,sha256=fdCmw8fjgo8eoWu85t95ZoRTrgXC5_XVXFyB8_VQTtw,219
|
86
|
+
clarifai/utils/logging.py,sha256=I2Sj1X-phYcINXe4-pW22Tq6Sz5PlwcxYQh7zORBbeM,13634
|
87
|
+
clarifai/utils/misc.py,sha256=gensDjU5pV44iFzUzmM_Lf6PZX63GFxRXJX91esEjAg,2999
|
87
88
|
clarifai/utils/model_train.py,sha256=Mndqy5GNu7kjQHjDyNVyamL0hQFLGSHcWhOuPyOvr1w,8005
|
88
89
|
clarifai/utils/evaluation/__init__.py,sha256=PYkurUrXrGevByj7RFb6CoU1iC7fllyQSfnnlo9WnY8,69
|
89
90
|
clarifai/utils/evaluation/helpers.py,sha256=aZeHLI7oSmU5YDWQp5GdkYW5qbHx37nV9xwunKTAwWM,18549
|
@@ -93,9 +94,9 @@ clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
93
94
|
clarifai/workflows/export.py,sha256=vICRhIreqDSShxLKjHNM2JwzKsf1B4fdXB0ciMcA70k,1945
|
94
95
|
clarifai/workflows/utils.py,sha256=nGeB_yjVgUO9kOeKTg4OBBaBz-AwXI3m-huSVj-9W18,1924
|
95
96
|
clarifai/workflows/validate.py,sha256=yJq03MaJqi5AK3alKGJJBR89xmmjAQ31sVufJUiOqY8,2556
|
96
|
-
clarifai-11.2.
|
97
|
-
clarifai-11.2.
|
98
|
-
clarifai-11.2.
|
99
|
-
clarifai-11.2.
|
100
|
-
clarifai-11.2.
|
101
|
-
clarifai-11.2.
|
97
|
+
clarifai-11.2.3.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
|
98
|
+
clarifai-11.2.3.dist-info/METADATA,sha256=7YnU6nLN-FgtfIPvDfv-qMUvS8B93f86eYrZFC4S-V0,22472
|
99
|
+
clarifai-11.2.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
100
|
+
clarifai-11.2.3.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
|
101
|
+
clarifai-11.2.3.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
|
102
|
+
clarifai-11.2.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|