qwak-sdk 0.5.61__py3-none-any.whl → 0.5.63__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.

Potentially problematic release.


This version of qwak-sdk might be problematic. Click here for more details.

qwak_sdk/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # fmt: off
2
2
  __author__ = '''Qwak.ai'''
3
- __version__ = '0.5.61'
3
+ __version__ = '0.5.63'
4
4
 
5
5
  from qwak.inner import wire_dependencies
6
6
 
@@ -110,6 +110,11 @@ from qwak_sdk.inner.tools.config_handler import config_handler
110
110
  type=str,
111
111
  help="[REMOTE BUILD] Custom IAM Role ARN.",
112
112
  )
113
+ @click.option(
114
+ "--service-account-key-secret-name",
115
+ type=str,
116
+ help="Custom service account for Gcp.",
117
+ )
113
118
  @click.option(
114
119
  "--cache/--no-cache",
115
120
  default=None,
@@ -140,6 +140,12 @@ DEPLOYMENT_CLI_CONFIG_MAPPING: List[ConfigCliMap] = [
140
140
  ConfigCliMap(
141
141
  "iam_role_arn", "advanced_options.iam_role_arn", validate_string, False
142
142
  ),
143
+ ConfigCliMap(
144
+ "service_account_key_secret_name",
145
+ "advanced_options.service_account_key_secret_name",
146
+ validate_string,
147
+ False,
148
+ ),
143
149
  ConfigCliMap(
144
150
  "purchase_option",
145
151
  "advanced_options.purchase_option",
@@ -241,6 +247,7 @@ class DeployConfig(YamlConfigMixin, QwakConfigBase):
241
247
  class AdvancedOptions:
242
248
  iam_role_arn: str = field(default=None)
243
249
  purchase_option: str = field(default=PurchaseOption.SPOT.value)
250
+ service_account_key_secret_name: str = field(default=None)
244
251
 
245
252
  model_id: str = field(default="")
246
253
  build_id: str = field(default="")
@@ -45,7 +45,7 @@ def get_env_to_deployment_message(
45
45
  instance_template_client: InstanceTemplateManagementClient,
46
46
  ) -> Dict[str, EnvironmentDeploymentMessage]:
47
47
  deployment_size = deployment_size_from_deploy_config(
48
- deploy_config, instance_template_client
48
+ deploy_config, instance_template_client, ecosystem_client
49
49
  )
50
50
  advanced_deployment_options = get_advanced_deployment_options_from_deploy_config(
51
51
  deploy_config, kube_deployment_type
@@ -7,8 +7,11 @@ from _qwak_proto.qwak.user_application.common.v0.resources_pb2 import (
7
7
  GpuResources,
8
8
  PodComputeResourceTemplateSpec,
9
9
  )
10
+ from qwak.clients.administration.eco_system.client import EcosystemClient
10
11
  from qwak.clients.instance_template.client import InstanceTemplateManagementClient
12
+ from qwak.exceptions import QwakException
11
13
  from qwak.inner.instance_template.verify_template_id import verify_template_id
14
+ from qwak.inner.provider import Provider
12
15
 
13
16
  from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
14
17
  DeployConfig,
@@ -18,14 +21,37 @@ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
18
21
  def deployment_size_from_deploy_config(
19
22
  deploy_config: DeployConfig,
20
23
  instance_template_client: InstanceTemplateManagementClient,
24
+ ecosystem_client: EcosystemClient,
21
25
  ) -> DeploymentSize:
22
26
  if deploy_config.resources.instance_size:
23
27
  deploy_config.resources.instance_size = (
24
28
  deploy_config.resources.instance_size.lower()
25
29
  )
26
- verify_template_id(
27
- deploy_config.resources.instance_size, instance_template_client
28
- )
30
+ account_details = ecosystem_client.get_account_details()
31
+ if deploy_config.environments:
32
+ environments_config = list(
33
+ ecosystem_client.get_environments_names_to_details(
34
+ deploy_config.environments
35
+ ).values()
36
+ )
37
+ else:
38
+ environments_config = [
39
+ account_details.environment_by_id[
40
+ account_details.default_environment_id
41
+ ]
42
+ ]
43
+ for environment_config in environments_config:
44
+ provider = __get_provider(environment_config)
45
+ try:
46
+ verify_template_id(
47
+ deploy_config.resources.instance_size,
48
+ instance_template_client,
49
+ provider=provider,
50
+ )
51
+ except QwakException as e:
52
+ raise QwakException(
53
+ f"Error with template {deploy_config.resources.instance_size} for environment {environment_config.name}: {e.message}"
54
+ )
29
55
 
30
56
  return DeploymentSize(
31
57
  number_of_pods=deploy_config.resources.pods,
@@ -56,3 +82,15 @@ def deployment_size_from_deploy_config(
56
82
  )
57
83
  ),
58
84
  )
85
+
86
+
87
+ def __get_provider(environment_config):
88
+ provider = None
89
+ cloud_type = environment_config.configuration.cloud_configuration.WhichOneof(
90
+ "configuration"
91
+ )
92
+ if cloud_type == "aws_cloud_configuration":
93
+ provider = Provider.AWS
94
+ elif cloud_type == "gcp_cloud_configuration":
95
+ provider = Provider.GCP
96
+ return provider
@@ -0,0 +1,193 @@
1
+ import base64
2
+
3
+ from _qwak_proto.qwak.ecosystem.v0.ecosystem_runtime_service_pb2 import (
4
+ GetCloudCredentialsParameters,
5
+ GetCloudCredentialsRequest,
6
+ PermissionSet,
7
+ PullModelsContainerRegistry,
8
+ )
9
+ from google.protobuf.duration_pb2 import Duration
10
+ from qwak.clients.administration.eco_system.client import EcosystemClient
11
+ from qwak.clients.build_orchestrator import BuildOrchestratorClient
12
+ from qwak.exceptions import QwakException
13
+ from rich.console import Console
14
+ from rich.layout import Layout
15
+ from rich.panel import Panel
16
+ from rich.progress import Progress
17
+
18
+ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
19
+ DeployConfig,
20
+ )
21
+
22
+ tasks = {}
23
+
24
+
25
+ def local_deploy(config: DeployConfig):
26
+ try:
27
+ import docker
28
+ except ImportError:
29
+ raise QwakException(
30
+ "Error: 'docker' package is required to for local model deployment."
31
+ )
32
+
33
+ console = Console()
34
+ console.print(Panel(f"Deploying model {config.model_id} locally", style="green"))
35
+
36
+ client = docker.from_env()
37
+ build_image = _get_build_image(config)
38
+
39
+ if not client.images.list(name=build_image):
40
+ console.print(
41
+ "Pulling serving image from Qwak's remote repository. Might take a few minutes...",
42
+ style="yellow",
43
+ )
44
+ _docker_login(client)
45
+ _image_pull(client, build_image)
46
+
47
+ try:
48
+ container = start_local_qwak_container(build_image, client, config)
49
+ container.reload()
50
+ host_port = container.ports.get("5000/tcp")[0]["HostPort"]
51
+
52
+ layout = example_usage_layout(host_port)
53
+ console.print(layout)
54
+
55
+ for line in container.logs(stream=True):
56
+ console.print(str(line.strip().decode()), style="blue")
57
+
58
+ except KeyboardInterrupt:
59
+ console.print(Panel("Stopping container...", style="red"))
60
+ container.stop()
61
+ container.remove()
62
+
63
+
64
+ def example_usage_layout(host_port: str):
65
+ layout = Layout(size=6)
66
+ layout.split_row(
67
+ Layout(name="left"),
68
+ Layout(name="right"),
69
+ )
70
+ layout["left"].update(
71
+ Panel(
72
+ f"[bold]cURL usage:[bold]\n\n"
73
+ f"curl --location\n"
74
+ f"--request POST http://localhost:{host_port}/predict\n"
75
+ f"--header 'Content-Type: application/json'\n"
76
+ f"--data '...'",
77
+ style="green",
78
+ )
79
+ )
80
+ layout["right"].update(
81
+ Panel(
82
+ f"[bold]Python client usage:[bold]\n\n"
83
+ f"from qwak_inference import RealtimeClient\n\nfeature_vector=[...]\n"
84
+ f"client = RealTimeClient(model_api='http://localhost:{host_port}/predict')\n"
85
+ f"client.predict(feature_vector)",
86
+ style="green",
87
+ )
88
+ )
89
+ return layout
90
+
91
+
92
+ def start_local_qwak_container(build_image: str, docker_client, config: DeployConfig):
93
+ return docker_client.containers.run(
94
+ build_image,
95
+ command=["bentoml", "serve-gunicorn", "./"],
96
+ entrypoint="./docker-entrypoint.sh",
97
+ environment=[
98
+ "BENTOML_GUNICORN_WORKERS=2",
99
+ "QWAK_DEBUG_MODE=True",
100
+ f"QWAK_MODEL_ID={config.model_id}",
101
+ "BENTOML_DO_NOT_TRACK=True",
102
+ "PYTHONPATH=/qwak/model_dir:/qwak/model_dir/main:$PYTHONPATH",
103
+ f"QWAK_BUILD_ID={config.build_id}",
104
+ "BUNDLE_PATH=/home/bentoml/bundle",
105
+ "BENTOML_HOME=/home/bentoml/",
106
+ ],
107
+ stream=True,
108
+ detach=True,
109
+ publish_all_ports=True,
110
+ )
111
+
112
+
113
+ def _get_build_image(config: DeployConfig):
114
+ return (
115
+ BuildOrchestratorClient().get_build(config.build_id).build.build_destined_image
116
+ )
117
+
118
+
119
+ def _show_progress(line, progress):
120
+ if line["status"] == "Downloading":
121
+ idx = f'[red][Download {line["id"]}]'
122
+ elif line["status"] == "Extracting":
123
+ idx = f'[green][Extract {line["id"]}]'
124
+ else:
125
+ # skip other statuses
126
+ return
127
+
128
+ if idx not in tasks.keys():
129
+ tasks[idx] = progress.add_task(f"{idx}", total=line["progressDetail"]["total"])
130
+ else:
131
+ progress.update(tasks[idx], completed=line["progressDetail"]["current"])
132
+
133
+
134
+ def _image_pull(docker_client, image_name: str):
135
+ with Progress() as progress:
136
+ resp = docker_client.api.pull(image_name, stream=True, decode=True)
137
+ for line in resp:
138
+ _show_progress(line, progress)
139
+
140
+
141
+ def _docker_login(docker_client):
142
+ try:
143
+ import boto3
144
+ except ImportError:
145
+ raise QwakException(
146
+ "Error: The 'boto3' package is necessary for local model deployment. Install it directly or by running"
147
+ " 'pip install qwak[local-deployment]'"
148
+ )
149
+
150
+ # TODO: block if not an AWS based container registry
151
+ credentials = _get_aws_credentials()
152
+
153
+ aws_credentials = credentials.cloud_credentials.aws_temporary_credentials
154
+ ecr_client = boto3.Session(
155
+ aws_access_key_id=aws_credentials.access_key_id,
156
+ aws_secret_access_key=aws_credentials.secret_access_key,
157
+ aws_session_token=aws_credentials.session_token,
158
+ region_name=aws_credentials.region,
159
+ ).client("ecr")
160
+
161
+ ecr_credentials = ecr_client.get_authorization_token()["authorizationData"][0]
162
+
163
+ try:
164
+ docker_client.login(
165
+ username="AWS",
166
+ registry=ecr_credentials["proxyEndpoint"],
167
+ password=base64.b64decode(ecr_credentials["authorizationToken"])
168
+ .replace(b"AWS:", b"")
169
+ .decode("utf-8"),
170
+ )
171
+
172
+ except Exception as e:
173
+ raise QwakException(f"Failed to login to Qwak's container registry: {e}")
174
+
175
+
176
+ def _get_aws_credentials():
177
+ try:
178
+ eco_client = EcosystemClient()
179
+ credentials = eco_client.get_cloud_credentials(
180
+ request=GetCloudCredentialsRequest(
181
+ parameters=GetCloudCredentialsParameters(
182
+ duration=Duration(seconds=60 * 60, nanos=0), # 6 hours
183
+ permission_set=PermissionSet(
184
+ pull_models_container_registry=PullModelsContainerRegistry()
185
+ ),
186
+ )
187
+ )
188
+ )
189
+ return credentials
190
+ except Exception as e:
191
+ raise QwakException(
192
+ f"Failed to get credentials to pull image from Qwak's container registry: {e}."
193
+ )
@@ -11,4 +11,5 @@ def batch_advanced_deployment_options_from_deploy_config(
11
11
  return AdvancedDeploymentOptions(
12
12
  custom_iam_role_arn=deploy_config.advanced_options.iam_role_arn,
13
13
  purchase_option=deploy_config.advanced_options.purchase_option,
14
+ service_account_key_secret_name=deploy_config.advanced_options.service_account_key_secret_name,
14
15
  )
@@ -61,6 +61,11 @@ from qwak_sdk.inner.tools.config_handler import config_handler
61
61
  type=str,
62
62
  help="Custom IAM Role ARN.",
63
63
  )
64
+ @click.option(
65
+ "--service-account-key-secret-name",
66
+ type=str,
67
+ help="Custom service account for Gcp.",
68
+ )
64
69
  @click.option(
65
70
  "--sync",
66
71
  is_flag=True,
@@ -17,4 +17,5 @@ def realtime_advanced_deployment_options_from_deploy_config(
17
17
  custom_iam_role_arn=deploy_config.advanced_options.iam_role_arn,
18
18
  purchase_option=deploy_config.advanced_options.purchase_option,
19
19
  deployment_process_timeout_limit=deploy_config.realtime.deployment_timeout,
20
+ service_account_key_secret_name=deploy_config.advanced_options.service_account_key_secret_name,
20
21
  )
@@ -14,6 +14,9 @@ from qwak_sdk.commands.models.deployments.deploy._logic.deploy_config import (
14
14
  from qwak_sdk.commands.models.deployments.deploy._logic.deployment_response_handler import (
15
15
  client_deployment,
16
16
  )
17
+ from qwak_sdk.commands.models.deployments.deploy._logic.local_deployment import (
18
+ local_deploy,
19
+ )
17
20
  from qwak_sdk.commands.models.deployments.deploy.realtime._logic.deploy_executor import (
18
21
  RealtimeDeployExecutor,
19
22
  )
@@ -84,6 +87,11 @@ logger = get_qwak_logger()
84
87
  type=str,
85
88
  help="Custom IAM Role ARN.",
86
89
  )
90
+ @click.option(
91
+ "--service-account-key-secret-name",
92
+ type=str,
93
+ help="Custom service account for Gcp.",
94
+ )
87
95
  @click.option(
88
96
  "--max-batch-size",
89
97
  type=int,
@@ -108,6 +116,12 @@ logger = get_qwak_logger()
108
116
  default=False,
109
117
  help="Waiting for deployments to be ready",
110
118
  )
119
+ @click.option(
120
+ "--local",
121
+ is_flag=True,
122
+ default=False,
123
+ help="Deploy the model container locally, for development purposes only",
124
+ )
111
125
  @click.option(
112
126
  "-v",
113
127
  "--verbose",
@@ -165,13 +179,20 @@ logger = get_qwak_logger()
165
179
  help="Whether the deployment variation is protected. Default is false",
166
180
  )
167
181
  def realtime(
168
- verbose: bool, from_file: Optional[str], out_conf: bool, sync: bool, **kwargs
182
+ verbose: bool,
183
+ from_file: Optional[str],
184
+ out_conf: bool,
185
+ sync: bool,
186
+ local: bool,
187
+ **kwargs,
169
188
  ):
170
189
  set_qwak_logger_stdout_verbosity_level(verbose + 1)
171
- deploy_realtime(from_file, out_conf, sync, **kwargs)
190
+ deploy_realtime(from_file, out_conf, sync, local, **kwargs)
172
191
 
173
192
 
174
- def deploy_realtime(from_file: Optional[str], out_conf: bool, sync: bool, **kwargs):
193
+ def deploy_realtime(
194
+ from_file: Optional[str], out_conf: bool, sync: bool, local: bool, **kwargs
195
+ ):
175
196
  config: DeployConfig = config_handler(
176
197
  config=DeployConfig,
177
198
  from_file=from_file,
@@ -179,6 +200,10 @@ def deploy_realtime(from_file: Optional[str], out_conf: bool, sync: bool, **kwar
179
200
  sections=("realtime", "autoscaling"),
180
201
  **kwargs,
181
202
  )
182
- if not out_conf:
203
+
204
+ if local:
205
+ local_deploy(config)
206
+
207
+ elif not out_conf:
183
208
  deploy_executor = RealtimeDeployExecutor(config)
184
209
  client_deployment(deploy=deploy_executor, sync=sync)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qwak-sdk
3
- Version: 0.5.61
3
+ Version: 0.5.63
4
4
  Summary: Qwak SDK and CLI for qwak models
5
5
  License: Apache-2.0
6
6
  Keywords: mlops,ml,deployment,serving,model
@@ -19,7 +19,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
19
19
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
20
  Provides-Extra: batch
21
21
  Provides-Extra: feedback
22
- Requires-Dist: boto3 (>=1.24.116,<2.0.0) ; extra == "batch" or extra == "feedback"
22
+ Provides-Extra: local-deployment
23
+ Requires-Dist: boto3 (>=1.24.116,<2.0.0) ; extra == "batch" or extra == "feedback" or extra == "local-deployment"
23
24
  Requires-Dist: cookiecutter
24
25
  Requires-Dist: croniter (==1.4.1)
25
26
  Requires-Dist: gitpython (>=2.1.0)
@@ -28,8 +29,9 @@ Requires-Dist: pandas (<1.4) ; (python_full_version >= "3.7.1" and python_versio
28
29
  Requires-Dist: pandas (>=1.4.3,<2.0.0) ; (python_version >= "3.8" and python_version < "3.10") and (extra == "batch" or extra == "feedback")
29
30
  Requires-Dist: pyarrow (>=6.0.0,<11.0.0) ; extra == "batch"
30
31
  Requires-Dist: python-json-logger (>=2.0.2)
31
- Requires-Dist: qwak-core (==0.3.85)
32
+ Requires-Dist: qwak-core (==0.3.143)
32
33
  Requires-Dist: qwak-inference (>=0.1,<0.2)
34
+ Requires-Dist: rich (>=13.0.0)
33
35
  Requires-Dist: tabulate (>=0.8.0)
34
36
  Requires-Dist: yaspin (>=2.0.0)
35
37
  Project-URL: Home page, https://www.qwak.com/
@@ -1,4 +1,4 @@
1
- qwak_sdk/__init__.py,sha256=WOY8VHD3yzX43bwKtDAE-axHbcisgyDOCkaEFjg70M4,135
1
+ qwak_sdk/__init__.py,sha256=DvLhnDek6NhPz-utUF7CqWYXDSHVe5YadFGNLVr3Soc,135
2
2
  qwak_sdk/cli.py,sha256=FIK1dUNxR57ypb-CeD7fKSJnPJ02lrjR9G4aj2qMLPU,2458
3
3
  qwak_sdk/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  qwak_sdk/commands/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -123,7 +123,7 @@ qwak_sdk/commands/models/build/_logic/util/__init__.py,sha256=47DEQpj8HBSa-_TImW
123
123
  qwak_sdk/commands/models/build/_logic/util/protobuf_factory.py,sha256=ar_oY38w_x0sxgVF7EBs5h7gchNsDntvtKK5sSYxb24,1686
124
124
  qwak_sdk/commands/models/build/_logic/util/step_decorator.py,sha256=HLZyCGdqe3Ir7SaPWp1YNRHJpjXG-e-bbAvnOFysAVM,1913
125
125
  qwak_sdk/commands/models/build/_logic/util/text.py,sha256=tH-v19Mt8l90sMVxku5XRtrderT0qdRqJ-jLijqannA,188
126
- qwak_sdk/commands/models/build/ui.py,sha256=vJ5dY1RbtDY6MIWesWhNaCaWA89An7IEIaYp3nVcAMg,8851
126
+ qwak_sdk/commands/models/build/ui.py,sha256=MX4OpBHh3X83JXc0FFsx4PP_4IZVVGe2bBS1Z5VK36o,8967
127
127
  qwak_sdk/commands/models/builds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  qwak_sdk/commands/models/builds/builds_commands_group.py,sha256=0nSfTY8TracXG61rFboQWUTXJisHO6dgtJKeijy6ru8,491
129
129
  qwak_sdk/commands/models/builds/cancel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -145,25 +145,26 @@ qwak_sdk/commands/models/deployments/deploy/__init__.py,sha256=47DEQpj8HBSa-_TIm
145
145
  qwak_sdk/commands/models/deployments/deploy/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  qwak_sdk/commands/models/deployments/deploy/_logic/advance_deployment_options_handler.py,sha256=gCo3WuP-IDuA5Sg7WbFmp1hYT5qyXyf6pUD3tZGyZXs,1251
147
147
  qwak_sdk/commands/models/deployments/deploy/_logic/base_deploy_executor.py,sha256=HYKUG5s4ZrpFwoxJYn3EuTYU71lmM0cFOOjbHqd9ajY,2706
148
- qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py,sha256=2xGuo06LCGtVvHqoXtwqAVirpdyOlgR_eIrgh0k_cEk,8744
148
+ qwak_sdk/commands/models/deployments/deploy/_logic/deploy_config.py,sha256=n7jSImcKw28xvXHoSRrtxKiGbxpqhovKv6sa7_-LYoQ,8979
149
149
  qwak_sdk/commands/models/deployments/deploy/_logic/deployment.py,sha256=zBTjeeEVtTnTwUMwUfGTI3Ip9AgqKDvHAZ6_Wi22XVo,13221
150
- qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py,sha256=sSKktrGVAwfbpKwQUW1xexhiNVBkPizaCj89OmLE-8E,4852
150
+ qwak_sdk/commands/models/deployments/deploy/_logic/deployment_message_helpers.py,sha256=QJSoyqeHPB9pydBNDsNpicOhKFIlKT_AZn78FGiM6ZU,4870
151
151
  qwak_sdk/commands/models/deployments/deploy/_logic/deployment_response_handler.py,sha256=cHa2iF_2A8e1wx2a4UZuTjQ5IHgPvua1xziFJwzP_6s,5837
152
- qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py,sha256=Vm-vrNUMb2X6RLpLkX8jzA1_gl2o7k16w1UMVOzunIA,2165
152
+ qwak_sdk/commands/models/deployments/deploy/_logic/deployment_size_mapper.py,sha256=sfECrq-6Emt-qY6K3J-hf8-PYw8TP4EgpjynTPstDUE,3655
153
153
  qwak_sdk/commands/models/deployments/deploy/_logic/get_latest_successful_build.py,sha256=fsahuSvgGzVjkZGaTH9YyNSOtRWBHYlyAU3wTriyCgI,978
154
+ qwak_sdk/commands/models/deployments/deploy/_logic/local_deployment.py,sha256=n42Hc-FnA3ODKok-_Nmnbjj1aPGW2P-DJ2dGDSZpSrE,6270
154
155
  qwak_sdk/commands/models/deployments/deploy/_logic/variations.py,sha256=n3OGHTYgjnmLYbafZbAOaudaGbeKjw8jbX4MhZX47fE,3256
155
156
  qwak_sdk/commands/models/deployments/deploy/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
157
  qwak_sdk/commands/models/deployments/deploy/batch/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
- qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py,sha256=1MpmBea3ERNdaDajCPdwYnt04IoGZdh5pwMlIzdBX5U,495
158
+ qwak_sdk/commands/models/deployments/deploy/batch/_logic/advanced_deployment_mapper.py,sha256=bwvPIoKCNaJmaNsPYL_dhK04FCRZvlj_jkwhCZM-eks,599
158
159
  qwak_sdk/commands/models/deployments/deploy/batch/_logic/deploy_executor.py,sha256=oOKPotp37qdLupYau5Fv2voki4SAIFitHMn_U4ZaJP8,946
159
- qwak_sdk/commands/models/deployments/deploy/batch/ui.py,sha256=iL0_NmaAaE630G2pzkPcYZA-GeuQrwoppL2LA_beUKs,3426
160
+ qwak_sdk/commands/models/deployments/deploy/batch/ui.py,sha256=Sek4sZ-XiFAJ7-bCakMX1BlOB7zrOLYHF1QyRo6LETw,3542
160
161
  qwak_sdk/commands/models/deployments/deploy/deploy_commands_group.py,sha256=LnfdnfeSTCO90SrJfgXf21xiVRry6Y2sfj_JfdBQu_U,500
161
162
  qwak_sdk/commands/models/deployments/deploy/realtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
163
  qwak_sdk/commands/models/deployments/deploy/realtime/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
- qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py,sha256=y_qfvoOtwr0615hm123z8li7doF5PjBj1d95g98GEZk,902
164
+ qwak_sdk/commands/models/deployments/deploy/realtime/_logic/advanced_deployment_mapper.py,sha256=LDJR2XzSG3QkHaAY4cSeDOb6e1-Aw-p5ZbRiLy2BXsU,1006
164
165
  qwak_sdk/commands/models/deployments/deploy/realtime/_logic/deploy_executor.py,sha256=KClooUmWbt4Iym7_PC8jg8oHCFRWNvno-16-aFWwutA,950
165
166
  qwak_sdk/commands/models/deployments/deploy/realtime/_logic/serving_strategy_mapper.py,sha256=4UWpT6RMHvYCxnAxOcaSrvkEIz7v4oGCA-3Iz2KGNxs,3943
166
- qwak_sdk/commands/models/deployments/deploy/realtime/ui.py,sha256=Vk-NClMZwzqWOmGGxfeuK_VQ5CGfpO5VTWvAqo6qO8Y,5037
167
+ qwak_sdk/commands/models/deployments/deploy/realtime/ui.py,sha256=hiVte3GkLZp3Iio6TsOs6B1RmkGmsslCXyABGZPiT5A,5509
167
168
  qwak_sdk/commands/models/deployments/deploy/streaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
168
169
  qwak_sdk/commands/models/deployments/deploy/streaming/_logic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
170
  qwak_sdk/commands/models/deployments/deploy/streaming/_logic/deploy_executor.py,sha256=RRkNzFcPhfj70pjFJE5DQDMxDi-gJOiaH5C9ofHEQUA,948
@@ -326,7 +327,7 @@ qwak_sdk/tools/colors.py,sha256=7pui_GGjC4uZKYFsIyXaJjYsjLxJVHb4OrfTgr93hqo,287
326
327
  qwak_sdk/tools/files.py,sha256=AyKJTOy7NhvP3SrqwIw_lxYNCOy1CvLgMmSJpWZ0OKM,2257
327
328
  qwak_sdk/tools/log_handling.py,sha256=Aa1EmxUPCX8YWiZRutUvnqPv6K_z1zoGMwIWsEv24mM,6327
328
329
  qwak_sdk/tools/utils.py,sha256=SHmU4r_m2ABZyFYMC03P17GvltPbYbmB39hvalIZEtI,1168
329
- qwak_sdk-0.5.61.dist-info/entry_points.txt,sha256=vSl0ELYDyj640oMM57u0AjBP87wtLYxCcGOendhEx80,47
330
- qwak_sdk-0.5.61.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
331
- qwak_sdk-0.5.61.dist-info/METADATA,sha256=2FDWOpzb9YtBeVuQFYPXJYlCELvdeJMsc4JNgMPnnUc,1888
332
- qwak_sdk-0.5.61.dist-info/RECORD,,
330
+ qwak_sdk-0.5.63.dist-info/entry_points.txt,sha256=vSl0ELYDyj640oMM57u0AjBP87wtLYxCcGOendhEx80,47
331
+ qwak_sdk-0.5.63.dist-info/WHEEL,sha256=vVCvjcmxuUltf8cYhJ0sJMRDLr1XsPuxEId8YDzbyCY,88
332
+ qwak_sdk-0.5.63.dist-info/METADATA,sha256=cqytmWDDFp8xVxa-VJfzngK2NN6Wyhud0yW6-BzJAmM,1984
333
+ qwak_sdk-0.5.63.dist-info/RECORD,,