clarifai 11.6.5__py3-none-any.whl → 11.6.6__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.6.5"
1
+ __version__ = "11.6.6"
clarifai/cli/base.py CHANGED
@@ -1,3 +1,4 @@
1
+ import getpass
1
2
  import json
2
3
  import os
3
4
  import sys
@@ -71,33 +72,44 @@ def login(ctx, api_url, user_id):
71
72
  """Login command to set PAT and other configurations."""
72
73
  from clarifai.utils.cli import validate_context_auth
73
74
 
74
- name = input('context name (default: "default"): ')
75
- user_id = user_id if user_id is not None else input('user id: ')
76
- pat = input_or_default(
77
- 'personal access token value (default: "ENVVAR" to get out of env var rather than config): ',
78
- 'ENVVAR',
75
+ click.echo('> To authenticate, you\'ll need a Personal Access Token (PAT).')
76
+ click.echo(
77
+ '> You can create one from your account settings: https://clarifai.com/settings/security\n'
79
78
  )
80
79
 
81
- # Validate the Context Credentials
80
+ # Securely input PAT
81
+ pat = getpass.getpass('Enter your Personal Access Token: ')
82
+
83
+ # Input user_id if not supplied
84
+ if not user_id:
85
+ user_id = click.prompt('Enter your Clarifai user ID', type=str)
86
+
87
+ # Progress indicator
88
+ click.echo('\n> Verifying token...')
82
89
  validate_context_auth(pat, user_id, api_url)
83
90
 
91
+ # Context naming
92
+ default_context_name = 'default'
93
+ click.echo('\n> Let\'s save these credentials to a new context.')
94
+ click.echo('> You can have multiple contexts to easily switch between accounts or projects.\n')
95
+ context_name = click.prompt("Enter a name for this context", default=default_context_name)
96
+
97
+ # Save context
84
98
  context = Context(
85
- name,
99
+ context_name,
86
100
  CLARIFAI_API_BASE=api_url,
87
101
  CLARIFAI_USER_ID=user_id,
88
102
  CLARIFAI_PAT=pat,
89
103
  )
90
104
 
91
- if context.name == '':
92
- context.name = 'default'
93
-
94
- ctx.obj.contexts[context.name] = context
95
- ctx.obj.current_context = context.name
96
-
105
+ ctx.obj.contexts[context_name] = context
106
+ ctx.obj.current_context = context_name
97
107
  ctx.obj.to_yaml()
98
- logger.info(
99
- f"Login successful and Configuration saved successfully for context '{context.name}'"
100
- )
108
+ click.secho('✅ Success! You are now logged in.', fg='green')
109
+ click.echo(f'Credentials saved to the \'{context_name}\' context.\n')
110
+ click.echo('💡 To switch contexts later, use `clarifai config use-context <name>`.')
111
+
112
+ logger.info(f"Login successful for user '{user_id}' in context '{context_name}'")
101
113
 
102
114
 
103
115
  def pat_display(pat):
clarifai/cli/model.py CHANGED
@@ -9,6 +9,7 @@ from clarifai.utils.cli import (
9
9
  check_ollama_installed,
10
10
  check_requirements_installed,
11
11
  customize_ollama_model,
12
+ parse_requirements,
12
13
  validate_context,
13
14
  )
14
15
  from clarifai.utils.constants import (
@@ -83,7 +84,14 @@ def model():
83
84
  required=False,
84
85
  )
85
86
  def init(
86
- model_path, model_type_id, github_pat, github_url, toolkit, model_name, port, context_length
87
+ model_path,
88
+ model_type_id,
89
+ github_pat,
90
+ github_url,
91
+ toolkit,
92
+ model_name,
93
+ port,
94
+ context_length,
87
95
  ):
88
96
  """Initialize a new model directory structure.
89
97
 
@@ -99,6 +107,13 @@ def init(
99
107
  branch to clone from.
100
108
 
101
109
  MODEL_PATH: Path where to create the model directory structure. If not specified, the current directory is used by default.
110
+ MODEL_TYPE_ID: Type of model to create. If not specified, defaults to "text-to-text" for text models.
111
+ GITHUB_PAT: GitHub Personal Access Token for authentication when cloning private repositories.
112
+ GITHUB_URL: GitHub repository URL or "repo" format to clone a repository from. If provided, the entire repository contents will be copied to the target directory instead of using default templates.
113
+ TOOLKIT: Toolkit to use for model initialization. Currently supports "ollama".
114
+ MODEL_NAME: Model name to configure when using --toolkit. For ollama toolkit, this sets the Ollama model to use (e.g., "llama3.1", "mistral", etc.).
115
+ PORT: Port to run the Ollama server on. Defaults to 23333.
116
+ CONTEXT_LENGTH: Context length for the Ollama model. Defaults to 8192.
102
117
  """
103
118
  # Resolve the absolute path
104
119
  model_path = os.path.abspath(model_path)
@@ -509,8 +524,13 @@ def run_locally(model_path, port, mode, keep_env, keep_image, skip_dockerfile=Fa
509
524
  show_default=True,
510
525
  help="The number of threads to use. On community plan, the compute time allocation is drained at a rate proportional to the number of threads.",
511
526
  ) # pylint: disable=range-builtin-not-iterating
527
+ @click.option(
528
+ '--verbose',
529
+ is_flag=True,
530
+ help='Show detailed logs including Ollama server output. By default, Ollama logs are suppressed.',
531
+ )
512
532
  @click.pass_context
513
- def local_runner(ctx, model_path, pool_size):
533
+ def local_runner(ctx, model_path, pool_size, verbose):
514
534
  """Run the model as a local runner to help debug your model connected to the API or to
515
535
  leverage local compute resources manually. This relies on many variables being present in the env
516
536
  of the currently selected context. If they are not present then default values will be used to
@@ -552,7 +572,23 @@ def local_runner(ctx, model_path, pool_size):
552
572
  from clarifai.runners.server import serve
553
573
 
554
574
  validate_context(ctx)
555
- logger.info("Checking setup for local runner...")
575
+ builder = ModelBuilder(model_path, download_validation_only=True)
576
+ logger.info("> Checking local runner requirements...")
577
+ if not check_requirements_installed(model_path):
578
+ logger.error(f"Requirements not installed for model at {model_path}.")
579
+ raise click.Abort()
580
+
581
+ # Post check while running `clarifai model local-runner` we check if the toolkit is ollama
582
+ dependencies = parse_requirements(model_path)
583
+ if "ollama" in dependencies or builder.config.get('toolkit', {}).get('provider') == 'ollama':
584
+ logger.info("Verifying Ollama installation...")
585
+ if not check_ollama_installed():
586
+ logger.error(
587
+ "Ollama application is not installed. Please install it from `https://ollama.com/` to use the Ollama toolkit."
588
+ )
589
+ raise click.Abort()
590
+
591
+ logger.info("> Verifying local runner setup...")
556
592
  logger.info(f"Current context: {ctx.obj.current.name}")
557
593
  user_id = ctx.obj.current.user_id
558
594
  logger.info(f"Current user_id: {user_id}")
@@ -693,8 +729,12 @@ def local_runner(ctx, model_path, pool_size):
693
729
  if len(model_versions) == 0:
694
730
  logger.warning("No model versions found. Creating a new version for local runner.")
695
731
  version = model.create_version(pretrained_model_config={"local_dev": True}).model_version
732
+ ctx.obj.current.CLARIFAI_MODEL_VERSION_ID = version.id
733
+ ctx.obj.to_yaml()
696
734
  else:
697
735
  version = model_versions[0].model_version
736
+ ctx.obj.current.CLARIFAI_MODEL_VERSION_ID = version.id
737
+ ctx.obj.to_yaml() # save to yaml file.
698
738
 
699
739
  logger.info(f"Current model version {version.id}")
700
740
 
@@ -796,10 +836,6 @@ def local_runner(ctx, model_path, pool_size):
796
836
 
797
837
  logger.info(f"Current deployment_id: {deployment_id}")
798
838
 
799
- logger.info(
800
- f"Full url for the model:\n{ctx.obj.current.ui}/users/{user_id}/apps/{app_id}/models/{model.id}/versions/{version.id}"
801
- )
802
-
803
839
  # Now that we have all the context in ctx.obj, we need to update the config.yaml in
804
840
  # the model_path directory with the model object containing user_id, app_id, model_id, version_id
805
841
  config_file = os.path.join(model_path, 'config.yaml')
@@ -837,6 +873,16 @@ def local_runner(ctx, model_path, pool_size):
837
873
  )
838
874
  raise click.Abort()
839
875
 
876
+ try:
877
+ logger.info("Customizing Ollama model with provided parameters...")
878
+ customize_ollama_model(
879
+ model_path=model_path,
880
+ verbose=True if verbose else False,
881
+ )
882
+ except Exception as e:
883
+ logger.error(f"Failed to customize Ollama model: {e}")
884
+ raise click.Abort()
885
+
840
886
  # don't mock for local runner since you need the dependencies to run the code anyways.
841
887
  method_signatures = builder.get_method_signatures(mocking=False)
842
888
 
@@ -861,7 +907,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
861
907
  f"Playground: To chat with your model, visit:\n{ctx.obj.current.ui}/playground?model={model.id}__{version.id}&user_id={user_id}&app_id={app_id}"
862
908
  )
863
909
 
864
- logger.info("Now starting the local runner...")
910
+ logger.info(" Starting local runner...")
865
911
 
866
912
  # This reads the config.yaml from the model_path so we alter it above first.
867
913
  serve(
@@ -874,6 +920,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
874
920
  runner_id=runner_id,
875
921
  base_url=ctx.obj.current.api_base,
876
922
  pat=ctx.obj.current.pat,
923
+ context=ctx.obj.current,
877
924
  )
878
925
 
879
926
 
@@ -76,7 +76,22 @@ class ModelClient:
76
76
  def __getattr__(self, name):
77
77
  if not self._defined:
78
78
  self.fetch()
79
- return self.__getattribute__(name)
79
+ try:
80
+ return self.__getattribute__(name)
81
+ except AttributeError as e:
82
+ # Provide helpful error message with available methods
83
+ available_methods = []
84
+ if self._method_signatures:
85
+ available_methods = list(self._method_signatures.keys())
86
+
87
+ error_msg = f"'{self.__class__.__name__}' object has no attribute '{name}'"
88
+
89
+ if available_methods:
90
+ error_msg += f". Available methods: {available_methods}"
91
+ raise AttributeError(error_msg) from e
92
+ else:
93
+ error_msg += ". This model is a non-pythonic model. Please use the old inference methods i.e. predict_by_url, predict_by_bytes, etc."
94
+ raise Exception(error_msg) from e
80
95
 
81
96
  def _fetch_signatures(self):
82
97
  '''
@@ -148,6 +163,10 @@ class ModelClient:
148
163
  self._define_compatability_functions()
149
164
  return
150
165
  if response.status.code != status_code_pb2.SUCCESS:
166
+ if response.outputs[0].status.description.startswith("cannot identify image file"):
167
+ raise Exception(
168
+ "Failed to fetch method signatures from model and backup method. This model is a non-pythonic model. Please use the old inference methods i.e. predict_by_url, predict_by_bytes, etc."
169
+ )
151
170
  raise Exception(f"Model failed with response {response!r}")
152
171
  self._method_signatures = signatures_from_json(response.outputs[0].data.text.raw)
153
172
 
@@ -92,6 +92,7 @@ def serve(
92
92
  runner_id: str = os.environ.get("CLARIFAI_RUNNER_ID", None),
93
93
  base_url: str = os.environ.get("CLARIFAI_API_BASE", "https://api.clarifai.com"),
94
94
  pat: str = os.environ.get("CLARIFAI_PAT", None),
95
+ context=None, # This is the current context object that contains user_id, app_id, model_id, etc.
95
96
  ):
96
97
  builder = ModelBuilder(model_path, download_validation_only=True)
97
98
 
@@ -133,7 +134,28 @@ def serve(
133
134
  pat=pat,
134
135
  num_parallel_polls=num_threads,
135
136
  )
136
- logger.info("Runner started successfully and is waiting for work from the API...\n")
137
+ method_signatures = builder.get_method_signatures(mocking=False)
138
+ from clarifai.runners.utils import code_script
139
+
140
+ snippet = code_script.generate_client_script(
141
+ method_signatures,
142
+ user_id=context.user_id,
143
+ app_id=context.app_id,
144
+ model_id=context.model_id,
145
+ deployment_id=context.deployment_id,
146
+ base_url=context.api_base,
147
+ )
148
+ logger.info("✅ Your model is running locally and is ready for requests from the API...\n")
149
+ logger.info(
150
+ f"> Code Snippet: To call your model via the API, use this code snippet:\n{snippet}"
151
+ )
152
+ logger.info(
153
+ f"> Playground: To chat with your model, visit: {context.ui}/playground?model={context.model_id}__{context.model_version_id}&user_id={context.user_id}&app_id={context.app_id}\n"
154
+ )
155
+ logger.info(
156
+ f"> API URL: To call your model via the API, use this model URL: {context.ui}/users/{context.user_id}/apps/{context.app_id}/models/{context.model_id}\n"
157
+ )
158
+ logger.info("Press CTRL+C to stop the runner.\n")
137
159
  runner.start() # start the runner to fetch work from the API.
138
160
 
139
161
 
@@ -68,13 +68,13 @@ def kill_process_tree(parent_pid, include_parent: bool = True, skip_pid: int = N
68
68
  logger.warning(f"Failed to kill parent process {parent_pid}: {e}")
69
69
 
70
70
 
71
- def execute_shell_command(
72
- command: str,
73
- ) -> subprocess.Popen:
71
+ def execute_shell_command(command: str, stdout=None, stderr=subprocess.STDOUT) -> subprocess.Popen:
74
72
  """Execute a shell command and return its process handle.
75
73
 
76
74
  Args:
77
75
  command (str): The shell command to execute.
76
+ stdout : Verbose logging control,
77
+ stderr : Verbose error logging control
78
78
 
79
79
  Returns:
80
80
  subprocess.Popen: Process handle for the executed command.
@@ -90,7 +90,7 @@ def execute_shell_command(
90
90
  parts = shlex.split(command)
91
91
 
92
92
  try:
93
- process = subprocess.Popen(parts, text=True, stderr=subprocess.STDOUT)
93
+ process = subprocess.Popen(parts, text=True, stdout=stdout, stderr=stderr)
94
94
 
95
95
  return process
96
96
  except subprocess.SubprocessError as e:
clarifai/utils/cli.py CHANGED
@@ -4,6 +4,7 @@ import pkgutil
4
4
  import sys
5
5
  import typing as t
6
6
  from collections import defaultdict
7
+ from pathlib import Path
7
8
  from typing import OrderedDict
8
9
 
9
10
  import click
@@ -205,28 +206,21 @@ def validate_context_auth(pat: str, user_id: str, api_base: str = None):
205
206
  logger.info("✅ Context is valid")
206
207
 
207
208
  except Exception as e:
208
- error_msg = str(e)
209
-
210
209
  # Check for common authentication errors and provide user-friendly messages
211
- if "PERMISSION_DENIED" in error_msg or "Unauthorized" in error_msg:
212
- logger.error(f"Invalid PAT token or incorrect user ID '{user_id}': {error_msg}")
213
- elif "UNAUTHENTICATED" in error_msg:
214
- logger.error(f"Invalid PAT token or user ID: {error_msg}")
215
- elif "SSL" in error_msg or "certificate" in error_msg:
216
- logger.error(f"SSL/Certificate error: {error_msg}")
217
- elif "Connection" in error_msg or "timeout" in error_msg:
218
- logger.error(f"Network connection error: {error_msg}")
219
- else:
220
- logger.error(f"❌ Validation failed: \n{error_msg}")
221
- logger.error("Please check your credentials and try again.")
210
+ logger.error(" Authentication failed. Please check your token and user ID.")
222
211
  raise click.Abort() # Exit without saving the configuration
223
212
 
224
213
 
225
- def customize_ollama_model(model_path, model_name, port, context_length):
214
+ def customize_ollama_model(
215
+ model_path, model_name=None, port=None, context_length=None, verbose=False
216
+ ):
226
217
  """Customize the Ollama model name in the cloned template files.
227
218
  Args:
228
219
  model_path: Path to the cloned model directory
229
- model_name: The model name to set (e.g., 'llama3.1', 'mistral')
220
+ model_name: The model name to set (e.g., 'llama3.1', 'mistral') - optional
221
+ port: Port for Ollama server - optional
222
+ context_length: Context length for the model - optional
223
+ verbose: Whether to enable verbose logging - optional (defaults to False)
230
224
 
231
225
  """
232
226
  model_py_path = os.path.join(model_path, "1", "model.py")
@@ -256,6 +250,12 @@ def customize_ollama_model(model_path, model_name, port, context_length):
256
250
  "context_length = '8192'", f"context_length = '{context_length}'"
257
251
  )
258
252
 
253
+ verbose_str = str(verbose)
254
+ if "VERBOSE_OLLAMA = True" in content:
255
+ content = content.replace("VERBOSE_OLLAMA = True", f"VERBOSE_OLLAMA = {verbose_str}")
256
+ elif "VERBOSE_OLLAMA = False" in content:
257
+ content = content.replace("VERBOSE_OLLAMA = False", f"VERBOSE_OLLAMA = {verbose_str}")
258
+
259
259
  # Write the modified content back to model.py
260
260
  with open(model_py_path, 'w') as file:
261
261
  file.write(content)
@@ -297,28 +297,35 @@ def _is_package_installed(package_name):
297
297
  return False
298
298
 
299
299
 
300
- def check_requirements_installed(model_path):
301
- """Check if all dependencies in requirements.txt are installed."""
302
- import re
303
- from pathlib import Path
300
+ def parse_requirements(model_path: str):
301
+ """Parse requirements.txt in the model directory and return a dictionary of dependencies."""
302
+ from packaging.requirements import Requirement
304
303
 
305
304
  requirements_path = Path(model_path) / "requirements.txt"
306
305
 
307
306
  if not requirements_path.exists():
308
307
  logger.warning(f"requirements.txt not found at {requirements_path}")
309
- return True
308
+ return []
309
+
310
+ deps = {}
311
+ for line in requirements_path.read_text().splitlines():
312
+ line = line.strip()
313
+ if not line or line.startswith("#"):
314
+ continue
315
+ try:
316
+ req = Requirement(line)
317
+ deps[req.name] = str(req.specifier) if req.specifier else None
318
+ except Exception as e:
319
+ logger.warning(f"⚠️ Could not parse line: {line!r} — {e}")
320
+ return deps
310
321
 
311
- try:
312
- package_pattern = re.compile(r'^([a-zA-Z0-9_-]+)')
313
322
 
323
+ def check_requirements_installed(model_path):
324
+ """Check if all dependencies in requirements.txt are installed."""
325
+
326
+ try:
314
327
  # Getting package name and version (for logging)
315
- requirements = [
316
- (match.group(1), pack)
317
- for line in requirements_path.read_text().splitlines()
318
- if (pack := line.strip())
319
- and not line.startswith('#')
320
- and (match := package_pattern.match(line))
321
- ]
328
+ requirements = parse_requirements(model_path)
322
329
 
323
330
  if not requirements:
324
331
  logger.info("No dependencies found in requirements.txt")
@@ -328,7 +335,7 @@ def check_requirements_installed(model_path):
328
335
 
329
336
  missing = [
330
337
  full_req
331
- for package_name, full_req in requirements
338
+ for package_name, full_req in requirements.items()
332
339
  if not _is_package_installed(package_name)
333
340
  ]
334
341
 
@@ -341,6 +348,7 @@ def check_requirements_installed(model_path):
341
348
  f"❌ {len(missing)} of {len(requirements)} required packages are missing in the current environment"
342
349
  )
343
350
  logger.error("\n".join(f" - {pkg}" for pkg in missing))
351
+ requirements_path = Path(model_path) / "requirements.txt"
344
352
  logger.warning(f"To install: pip install -r {requirements_path}")
345
353
  return False
346
354
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clarifai
3
- Version: 11.6.5
3
+ Version: 11.6.6
4
4
  Home-page: https://github.com/Clarifai/clarifai-python
5
5
  Author: Clarifai
6
6
  Author-email: support@clarifai.com
@@ -19,7 +19,7 @@ Classifier: Operating System :: OS Independent
19
19
  Requires-Python: >=3.8
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: clarifai-grpc>=11.6.4
22
+ Requires-Dist: clarifai-grpc>=11.6.6
23
23
  Requires-Dist: clarifai-protocol>=0.0.25
24
24
  Requires-Dist: numpy>=1.22.0
25
25
  Requires-Dist: tqdm>=4.65.0
@@ -1,14 +1,14 @@
1
- clarifai/__init__.py,sha256=v1UMok1JAGjDjikTzsL5Gx86ndvD68_szNQj1A3xaVk,23
1
+ clarifai/__init__.py,sha256=mVLEiG__Ii2PYSH7bCreLYlUkICRXJABUKqCK4CzxWE,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
5
5
  clarifai/cli/README.md,sha256=u-7Mgg1ZrygEokXS3RJepddq3GjhkSVkdUzXvxnCoIE,2633
6
6
  clarifai/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  clarifai/cli/__main__.py,sha256=7nPbLW7Jr2shkgMPvnxpn4xYGMvIcnqluJ69t9w4H_k,74
8
- clarifai/cli/base.py,sha256=rMmbjo5VIiAq35cTFb9IrNPVFBfiXU366_rv7V4ULus,8889
8
+ clarifai/cli/base.py,sha256=drFJ7HpZu05eTzY8w_kDMoadDYDLWMGpoKl5MLHPXRw,9565
9
9
  clarifai/cli/compute_cluster.py,sha256=8Xss0Obrp6l1XuxJe0luOqU_pf8vXGDRi6jyIe8qR6k,2282
10
10
  clarifai/cli/deployment.py,sha256=9C4I6_kyMxRkWl6h681wc79-3mAtDHtTUaxRv05OZMs,4262
11
- clarifai/cli/model.py,sha256=bL6jiM8UMBZUG7yDPVNvrulWgV2-PfGWj3R52kyG0PI,41276
11
+ clarifai/cli/model.py,sha256=r_-loAszX8vOYlW1YI7TgNA4CFPZy4dicqtywoZ39R8,43546
12
12
  clarifai/cli/nodepool.py,sha256=H6OIdUW_EiyDUwZogzEDoYmVwEjLMsgoDlPyE7gjIuU,4245
13
13
  clarifai/cli/pipeline.py,sha256=smWPCK9kLCqnjTCb3w8BAeiAcowY20Bdxfk-OCzCi0I,10601
14
14
  clarifai/cli/pipeline_step.py,sha256=Unrq63w5rjwyhHHmRhV-enztO1HuVTnimAXltNCotQs,3814
@@ -25,7 +25,7 @@ clarifai/client/deployment.py,sha256=QBf0tzkKBEpzNgmOEmWUJMOlVWdFEFc70Y44o8y75Gs
25
25
  clarifai/client/input.py,sha256=jpX47qwn7aUBBIEuSSLHF5jk70XaWEh0prD065c9b-E,51205
26
26
  clarifai/client/lister.py,sha256=1YEm2suNxPaJO4x9V5szgD_YX6N_00vgSO-7m0HagY8,2208
27
27
  clarifai/client/model.py,sha256=DeB-es6rp0FJQVY46oO2eR_-Ux5tTmkM_qYsN1X6WcE,90793
28
- clarifai/client/model_client.py,sha256=4gIS0mKBdiNMA1x_6Wo6H7WbfLsmQix64EpONcQjQV4,37129
28
+ clarifai/client/model_client.py,sha256=pyPg1C3gb5Q3_DXmMmOB5AeORR1IDaaM7n0LGc3ciLk,38217
29
29
  clarifai/client/module.py,sha256=jLViQYvVV3FmRN_ivvbk83uwsx7CgYGeEx4dYAr6yD4,4537
30
30
  clarifai/client/nodepool.py,sha256=Qjk_-GfjtdlQdR5hHh28kRENW7rLi6zNqxeFYf7dioc,16473
31
31
  clarifai/client/pipeline.py,sha256=Hy3qnSX1pcoi-OAtdzr-qxkRYi1CxsaUzsfS3GDtETM,14358
@@ -71,7 +71,7 @@ clarifai/rag/__init__.py,sha256=wu3PzAzo7uqgrEzuaC9lY_3gj1HFiR3GU3elZIKTT5g,40
71
71
  clarifai/rag/rag.py,sha256=EG3GoFrHFCmA70Tz49_0Jo1-3WIaHSgWGHecPeErcdc,14170
72
72
  clarifai/rag/utils.py,sha256=_gVZdABuMnraCKViLruV75x0F3IpgFXN6amYSGE5_xc,4462
73
73
  clarifai/runners/__init__.py,sha256=wXLaSljH7qLeJCrZdKEnlQh2tNqTQAIZKWOu2rZ6wGs,279
74
- clarifai/runners/server.py,sha256=E7VtQcGuFYS_CIfrBIvdRVgjLwzHO9LEUpD_gtU-ye4,4873
74
+ clarifai/runners/server.py,sha256=7grR4PDwXsp9cLpT8rSOfK-YuhzbC7xBI_1C5XJmLas,6016
75
75
  clarifai/runners/dockerfile_template/Dockerfile.template,sha256=nEnIMqzhAXDbd0Ht7QQm0U7AVPIHWQD6kYnFZ0TKJUM,2428
76
76
  clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  clarifai/runners/models/dummy_openai_model.py,sha256=pcmAVbqTTGG4J3BLVjKfvM_SQ-GET_XexIUdLcr9Zvo,8373
@@ -94,7 +94,7 @@ clarifai/runners/utils/const.py,sha256=MK7lTzzJKbOiyiUtG_jlJXfz_xNKMn5LjkQ9vjbtt
94
94
  clarifai/runners/utils/data_utils.py,sha256=HRpMYR2O0OiDpXXhOManLHTeomC4bFnXMHVAiT_12yE,20856
95
95
  clarifai/runners/utils/loader.py,sha256=K5Y8MPbIe5STw2gDnrL8KqFgKNxEo7bz-RV0ip1T4PM,10900
96
96
  clarifai/runners/utils/method_signatures.py,sha256=qdHaO8ZIgP6BBXXMhMPhcQ46dse-XMP2t4VJCNG7O3Q,18335
97
- clarifai/runners/utils/model_utils.py,sha256=eTIGOZpt0icOGfVnmYM9yO9g7CTsb_plLkzvJIH1QRo,6288
97
+ clarifai/runners/utils/model_utils.py,sha256=MCYhV_00anptIO1Qtxgzn3DlGI2UHV0ESFT3wLNcAMM,6413
98
98
  clarifai/runners/utils/openai_convertor.py,sha256=ZlIrvvfHttD_DavLvmKZdL8gNq_TQvQtZVnYamwdWz4,8248
99
99
  clarifai/runners/utils/pipeline_validation.py,sha256=RWWWUA3mNCXHCSNpuofMGfXfWEYe7LrYKwIc-1VFvQs,6444
100
100
  clarifai/runners/utils/serializers.py,sha256=pI7GqMTC0T3Lu_X8v8TO4RiplO-gC_49Ns37jYwsPtg,7908
@@ -104,7 +104,7 @@ clarifai/runners/utils/data_types/data_types.py,sha256=UBHTNPshr94qUs2KqkYis0VlA
104
104
  clarifai/schema/search.py,sha256=o9-ct8ulLZByB3RCVwZWPgaDwdcW7cM5s-g8oyAz89s,2421
105
105
  clarifai/urls/helper.py,sha256=z6LnLGgLHxD8scFtyRdxqYIRJNhxqPkfLe53UtTLUBY,11727
106
106
  clarifai/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- clarifai/utils/cli.py,sha256=-r4qtzBQHRo3XeO4GSRwGHv5-_ndTcJ_4IkFY3eXvSg,11574
107
+ clarifai/utils/cli.py,sha256=yhYzDwGro03IheGuamuMWwz9EtUG-u7oQU20koQHAog,11883
108
108
  clarifai/utils/config.py,sha256=jMSWYxJfp_D8eoGqz-HTdsngn5bg_1ymjLidYz6rdLA,7073
109
109
  clarifai/utils/constants.py,sha256=klcdSiVccrdJVRXL9qq08p2lWL3KerXcQOTIG6y9298,2414
110
110
  clarifai/utils/logging.py,sha256=0we53uTqUvzrulC86whu-oeWNxn1JjJL0OQ98Bwf9vo,15198
@@ -119,9 +119,9 @@ clarifai/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
119
119
  clarifai/workflows/export.py,sha256=HvUYG9N_-UZoRR0-_tdGbZ950_AeBqawSppgUxQebR0,1913
120
120
  clarifai/workflows/utils.py,sha256=ESL3INcouNcLKCh-nMpfXX-YbtCzX7tz7hT57_RGQ3M,2079
121
121
  clarifai/workflows/validate.py,sha256=UhmukyHkfxiMFrPPeBdUTiCOHQT5-shqivlBYEyKTlU,2931
122
- clarifai-11.6.5.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
123
- clarifai-11.6.5.dist-info/METADATA,sha256=2wCjPH9Fg3ojVf27yb5CBrnA2a2ZGuzEoikvnf5U4cY,22737
124
- clarifai-11.6.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
- clarifai-11.6.5.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
126
- clarifai-11.6.5.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
127
- clarifai-11.6.5.dist-info/RECORD,,
122
+ clarifai-11.6.6.dist-info/licenses/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
123
+ clarifai-11.6.6.dist-info/METADATA,sha256=ZwllUqn2p05P26cjQLMD3uAvhMBkzJXCjPjv_E9iKNM,22737
124
+ clarifai-11.6.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
+ clarifai-11.6.6.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
126
+ clarifai-11.6.6.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
127
+ clarifai-11.6.6.dist-info/RECORD,,