qwak-core 0.4.271__py3-none-any.whl → 0.4.273__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.
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.py +86 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi +107 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/models/models_pb2.py +102 -81
- _qwak_proto/qwak/models/models_pb2.pyi +57 -0
- _qwak_proto/qwak/models/models_pb2_grpc.py +34 -0
- _qwak_proto/qwak/models/models_query_pb2.py +77 -0
- _qwak_proto/qwak/models/models_query_pb2.pyi +157 -0
- _qwak_proto/qwak/models/models_query_pb2_grpc.py +4 -0
- frogml_storage/__init__.py +1 -0
- frogml_storage/artifactory/__init__.py +1 -0
- frogml_storage/artifactory/_artifactory_api.py +315 -0
- frogml_storage/authentication/login/__init__.py +1 -0
- frogml_storage/authentication/login/_login_cli.py +239 -0
- frogml_storage/authentication/login/_login_command.py +74 -0
- frogml_storage/authentication/models/__init__.py +3 -0
- frogml_storage/authentication/models/_auth.py +24 -0
- frogml_storage/authentication/models/_auth_config.py +70 -0
- frogml_storage/authentication/models/_login.py +22 -0
- frogml_storage/authentication/utils/__init__.py +17 -0
- frogml_storage/authentication/utils/_authentication_utils.py +281 -0
- frogml_storage/authentication/utils/_login_checks_utils.py +114 -0
- frogml_storage/base_storage.py +140 -0
- frogml_storage/constants.py +56 -0
- frogml_storage/exceptions/checksum_verification_error.py +3 -0
- frogml_storage/exceptions/validation_error.py +4 -0
- frogml_storage/frog_ml.py +668 -0
- frogml_storage/http/__init__.py +1 -0
- frogml_storage/http/http_client.py +83 -0
- frogml_storage/logging/__init__.py +1 -0
- frogml_storage/logging/_log_config.py +45 -0
- frogml_storage/logging/log_utils.py +21 -0
- frogml_storage/models/__init__.py +1 -0
- frogml_storage/models/_download_context.py +54 -0
- frogml_storage/models/dataset_manifest.py +13 -0
- frogml_storage/models/entity_manifest.py +93 -0
- frogml_storage/models/frogml_dataset_version.py +21 -0
- frogml_storage/models/frogml_entity_type_info.py +50 -0
- frogml_storage/models/frogml_entity_version.py +34 -0
- frogml_storage/models/frogml_model_version.py +21 -0
- frogml_storage/models/model_manifest.py +60 -0
- frogml_storage/models/serialization_metadata.py +15 -0
- frogml_storage/utils/__init__.py +12 -0
- frogml_storage/utils/_environment.py +21 -0
- frogml_storage/utils/_input_checks_utility.py +104 -0
- frogml_storage/utils/_storage_utils.py +15 -0
- frogml_storage/utils/_url_utils.py +27 -0
- qwak/__init__.py +1 -1
- qwak/clients/instance_template/client.py +6 -4
- qwak/clients/prompt_manager/model_descriptor_mapper.py +21 -19
- qwak/feature_store/_common/artifact_utils.py +3 -3
- qwak/feature_store/data_sources/base.py +4 -4
- qwak/feature_store/data_sources/batch/athena.py +3 -3
- qwak/feature_store/feature_sets/streaming.py +3 -3
- qwak/feature_store/feature_sets/streaming_backfill.py +1 -1
- qwak/feature_store/online/client.py +6 -6
- qwak/feature_store/sinks/streaming/factory.py +1 -1
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
- qwak/inner/di_configuration/account.py +23 -24
- qwak/inner/tool/auth.py +2 -2
- qwak/llmops/provider/openai/provider.py +3 -3
- qwak/model/tools/adapters/output.py +1 -1
- qwak/model/utils/feature_utils.py +12 -8
- qwak/model_loggers/artifact_logger.py +7 -7
- qwak/tools/logger/logger.py +1 -1
- qwak_core-0.4.273.dist-info/METADATA +415 -0
- {qwak_core-0.4.271.dist-info → qwak_core-0.4.273.dist-info}/RECORD +68 -26
- _qwak_proto/__init__.py +0 -0
- _qwak_proto/qwak/__init__.py +0 -0
- qwak_core-0.4.271.dist-info/METADATA +0 -53
- {qwak_core-0.4.271.dist-info → qwak_core-0.4.273.dist-info}/WHEEL +0 -0
@@ -0,0 +1,415 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: qwak-core
|
3
|
+
Version: 0.4.273
|
4
|
+
Summary: Qwak Core contains the necessary objects and communication tools for using the Qwak Platform
|
5
|
+
License: Apache-2.0
|
6
|
+
Keywords: mlops,ml,deployment,serving,model
|
7
|
+
Author: Qwak
|
8
|
+
Author-email: info@qwak.com
|
9
|
+
Requires-Python: >=3.9,<3.12
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
11
|
+
Classifier: Operating System :: OS Independent
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
16
|
+
Classifier: Programming Language :: Python :: 3.7
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
18
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
20
|
+
Provides-Extra: feature-store
|
21
|
+
Requires-Dist: PyYAML
|
22
|
+
Requires-Dist: cachetools
|
23
|
+
Requires-Dist: chevron (==0.14.0)
|
24
|
+
Requires-Dist: cloudpickle (==2.2.1) ; extra == "feature-store"
|
25
|
+
Requires-Dist: dacite (==1.8.1)
|
26
|
+
Requires-Dist: dependency-injector (>=4.0)
|
27
|
+
Requires-Dist: filelock
|
28
|
+
Requires-Dist: grpcio (>=1.57.0)
|
29
|
+
Requires-Dist: joblib (>=1.3.2,<2.0.0)
|
30
|
+
Requires-Dist: marshmallow-dataclass (>=8.5.8,<9.0.0)
|
31
|
+
Requires-Dist: protobuf (>=3.10,<4) ; python_full_version >= "3.7.1" and python_version < "3.10"
|
32
|
+
Requires-Dist: protobuf (>=4.21.6) ; python_version >= "3.10"
|
33
|
+
Requires-Dist: pyarrow (>=6.0.0) ; extra == "feature-store"
|
34
|
+
Requires-Dist: pyathena (>=2.2.0,!=2.18.0) ; extra == "feature-store"
|
35
|
+
Requires-Dist: pydantic
|
36
|
+
Requires-Dist: pyspark (==3.4.2) ; extra == "feature-store"
|
37
|
+
Requires-Dist: python-jose[cryptography] (>=3.4.0)
|
38
|
+
Requires-Dist: python-json-logger (>=2.0.2)
|
39
|
+
Requires-Dist: requests
|
40
|
+
Requires-Dist: retrying (==1.3.4)
|
41
|
+
Requires-Dist: tqdm
|
42
|
+
Requires-Dist: typeguard (>=2,<3)
|
43
|
+
Requires-Dist: typer
|
44
|
+
Project-URL: Home page, https://www.qwak.com/
|
45
|
+
Description-Content-Type: text/markdown
|
46
|
+
|
47
|
+
# Qwak Core
|
48
|
+
|
49
|
+
Qwak is an end-to-end production ML platform designed to allow data scientists to build, deploy, and monitor their models in production with minimal engineering friction.
|
50
|
+
Qwak Core contains all the objects and tools necessary to use the Qwak Platform
|
51
|
+
|
52
|
+
# Frog ML Storage
|
53
|
+
|
54
|
+
## Table of contents:
|
55
|
+
|
56
|
+
- [Overview](#overview)
|
57
|
+
- [Working with Artifactory](#Working-with-Artifactory)
|
58
|
+
- [Login by adding authentication details to your python code](#Login-by-adding-authentication-details-to-your-python-code)
|
59
|
+
- [Login via environment variables](#Login-via-environment-variables)
|
60
|
+
- [Login via cli](#Login-via-cli)
|
61
|
+
- [Login by a single command line with options](#Login-by-a-single-command-line-with-options)
|
62
|
+
- [Login by interactive flow in Cli](#Login-by-interactive-flow-in-Cli)
|
63
|
+
- [Upload ML model to Artifactory](#Upload-ML-model-to-Artifactory)
|
64
|
+
- [Download ML model from Artifactory](#Download-ML-model-from-Artifactory)
|
65
|
+
- [Upload ML dataset to Artifactory](#Upload-ML-dataset-to-Artifactory)
|
66
|
+
- [Download ML dataset from Artifactory](#Download-ML-dataset-from-Artifactory)
|
67
|
+
- [Testing](#Testing)
|
68
|
+
- [Locally run integration tests using local artifactory](#Locally-run-integration-tests-using-artifactory)
|
69
|
+
- [Locally run tests using existing Artifactory](#Locally-run-tests-using-existing-Artifactory)
|
70
|
+
- [Packaging](#Packaging)
|
71
|
+
- [Linters](#Linters)
|
72
|
+
|
73
|
+
## Overview
|
74
|
+
|
75
|
+
JFrog ML Storage is a smart python client library providing a simple and efficient method of storing and downloading models, model data and datasets from the JFrog platform, utilizing the advanced capabilities of the JFrog platform.
|
76
|
+
|
77
|
+
## Working with Artifactory
|
78
|
+
|
79
|
+
FrogML Storage Library support is available from Artifactory version 7.84.x.
|
80
|
+
|
81
|
+
To be able to use FrogML Storage with Artifactory, you should authenticate the frogml storage client against Artifactory.
|
82
|
+
JFrog implements a credentials provider chain. It sequentially checks each place where you can set the credentials to authenticate with FrogML, and then selects the first one you set.
|
83
|
+
|
84
|
+
The credentials retrieval order is as follows:
|
85
|
+
|
86
|
+
1. [Login by adding authentication details to your python code](#Login-by-adding-authentication-details-to-your-python-code)
|
87
|
+
2. [Login via environment variables](#Login-via-environment-variables)
|
88
|
+
3. [Login via cli](#login-via-cli)
|
89
|
+
|
90
|
+
|
91
|
+
#### Login by adding authentication details to your python code
|
92
|
+
|
93
|
+
---
|
94
|
+
**NOTE**
|
95
|
+
|
96
|
+
It is strongly discouraged to use credentials in clear text. Use this method for testing purposes only.
|
97
|
+
|
98
|
+
---
|
99
|
+
|
100
|
+
You can authenticate the FrogML client directly via your Python code, using any of the following credentials (overriding env vars and the credentials in the configuration file):
|
101
|
+
- Username and Password
|
102
|
+
- Access Token
|
103
|
+
|
104
|
+
To log in as an anonymous user, log in first via CLI, and then you will be able to log in via Python using only your JFrog Platform domain.
|
105
|
+
|
106
|
+
Authentication by username and password:
|
107
|
+
|
108
|
+
```
|
109
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
110
|
+
from frogml_storage.authentication.models._auth_config import AuthConfig
|
111
|
+
|
112
|
+
arti = FrogMLStorage(AuthConfig.by_basic_auth("http://myorg.jfrog.io", <username>, <password>))
|
113
|
+
```
|
114
|
+
|
115
|
+
Authentication by access token:
|
116
|
+
|
117
|
+
```
|
118
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
119
|
+
from frogml_storage.authentication.models._auth_config import AuthConfig
|
120
|
+
|
121
|
+
arti = FrogMLStorage(AuthConfig.by_access_token("http://myorg.jfrog.io", <token>))
|
122
|
+
```
|
123
|
+
|
124
|
+
#### Login via environment variables
|
125
|
+
|
126
|
+
You can also authenticate the frogml client using the following environment variables:
|
127
|
+
|
128
|
+
- JF_URL - your JFrog platform domain, for example 'http://myorg.jfrog.io'
|
129
|
+
- JF_ACCESS_TOKEN - your artifactory token for this domain. To generate a token, log in to your artifactory, navigate to your FrogML repository and click on "Set Me Up".
|
130
|
+
|
131
|
+
After setting the environment variables, you can log in to the frogml client without specifying credentials.
|
132
|
+
|
133
|
+
|
134
|
+
```
|
135
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
136
|
+
from frogml_storage.authentication.models._auth_config import AuthConfig
|
137
|
+
|
138
|
+
arti = FrogMLStorage()
|
139
|
+
```
|
140
|
+
|
141
|
+
|
142
|
+
### Login via cli
|
143
|
+
|
144
|
+
It is possible to authenticate the frogml client using any of the following methods:
|
145
|
+
|
146
|
+
1. Login by a single CLI command
|
147
|
+
2. Interactive flow
|
148
|
+
|
149
|
+
After each login attempt, the authentication result (success or failure) is printed on the screen.
|
150
|
+
If the login attempt succeeded, the authentication details will be saved as frogml configuration file under the path: ~/.frogml/config.json and from that point you can login again without specifying credentials.
|
151
|
+
|
152
|
+
In both interactive flow and the single command flow, it is possible to authenticate the frogml client by:
|
153
|
+
|
154
|
+
1. Username and password
|
155
|
+
2. Access token
|
156
|
+
3. Anonymous authentication
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
#### Login by a single command line with options
|
161
|
+
|
162
|
+
The below examples show the frogml login options using the cli:
|
163
|
+
|
164
|
+
Login using existing jfrog-cli of frogml configuration files (~/.jfrog/jfrog-cli.conf.v6 or ~/.frogml/config.json, respectively):
|
165
|
+
|
166
|
+
```
|
167
|
+
frogml login
|
168
|
+
```
|
169
|
+
If no configuration file is found, interactive mode will be triggered.
|
170
|
+
|
171
|
+
Login by username and password:
|
172
|
+
|
173
|
+
```
|
174
|
+
frogml login --url <artifactory_url> --username <username> --password <password>
|
175
|
+
```
|
176
|
+
|
177
|
+
Where:
|
178
|
+
- artifactory_url is your JFrog platform domain, for example 'http://myorg.jfrog.io'
|
179
|
+
- username and password are your artifactory credentials for this domain
|
180
|
+
|
181
|
+
Login by access token:
|
182
|
+
|
183
|
+
```
|
184
|
+
frogml login --url <artifactory_url> --token <access_token>
|
185
|
+
```
|
186
|
+
|
187
|
+
Where:
|
188
|
+
- artifactory_url is your JFrog platform domain, for example 'http://myorg.jfrog.io'
|
189
|
+
- token - your artifactory token for this domain. To generate a token, log in to your artifactory and navigate to Administration -> User Management -> Access Tokens.
|
190
|
+
|
191
|
+
Login by anonymous access:
|
192
|
+
|
193
|
+
```
|
194
|
+
frogml login --url <artifactory_url> --anonymous
|
195
|
+
```
|
196
|
+
|
197
|
+
#### Login by interactive flow in cli:
|
198
|
+
|
199
|
+
To start an interactive flow in the cli, run the command:
|
200
|
+
|
201
|
+
```
|
202
|
+
frogml login --interactive
|
203
|
+
```
|
204
|
+
|
205
|
+
After executing the command above, the cli prompts two options as follows:
|
206
|
+
|
207
|
+
```
|
208
|
+
frogml login --interactive
|
209
|
+
Please select from the following options:
|
210
|
+
1.Login by jfrog-cli configuration file: ~/.jfrog/jfrog-cli.conf.v6
|
211
|
+
2.Connecting to a new server
|
212
|
+
```
|
213
|
+
|
214
|
+
On choosing the first option, the cli attempts to retrieve your authentication credentials from your JFrog CLI configuration file and sends them to Artifactory.
|
215
|
+
|
216
|
+
On choosing the second option, the cli prompts you to input your JFrog platform domain URL. Afterwards, you can select the method you wish to use for authenticating the FrogML library.
|
217
|
+
|
218
|
+
```
|
219
|
+
Enter artifactory base url: http://myorg.jfrog.io
|
220
|
+
Choose your preferred authentication option:
|
221
|
+
0: Username and Password
|
222
|
+
1: Access Token
|
223
|
+
2: Anonymous Access
|
224
|
+
```
|
225
|
+
|
226
|
+
|
227
|
+
### Upload ML model to Artifactory
|
228
|
+
|
229
|
+
You can upload a model to a FrogML repository using the upload_model_version() function.
|
230
|
+
You can upload a single file or an entire folder.
|
231
|
+
This function uses checksum upload, assigning a SHA2 value to each model for retrieval from storage. If the binary content cannot be reused, the smart upload mechanism performs regular upload instead.
|
232
|
+
After uploading the model, FrogML generates a file named model-info.json which contains the model name and its related files and dependencies.
|
233
|
+
|
234
|
+
The version parameter is optional. If not specified, Artifactory will set the version as the timestamp of the time you uploaded the model in your time zone, in UTC format: yyyy-MM-dd-HH-mm-ss.
|
235
|
+
Additionally, you can add properties to the model in Artifactory to categorize and label it.
|
236
|
+
The function upload_model_version returns an instance of FrogMlModelVersion, which includes the model's name, version, and namespace.
|
237
|
+
|
238
|
+
The below examples show how to upload a model to Artifactory:
|
239
|
+
|
240
|
+
---
|
241
|
+
**NOTE**
|
242
|
+
|
243
|
+
namespace, version, properties, dependencies_files_paths and code_archive_file_path are optional.
|
244
|
+
model_path can point to a single file or a directory, in which case the whole directory is uploaded.
|
245
|
+
model_type can be written as JSON or as SerializationMetadata object imported from jfrog_ml.serialization_metadata.
|
246
|
+
All of SerializationMetadata fields must be populated.
|
247
|
+
|
248
|
+
---
|
249
|
+
|
250
|
+
|
251
|
+
Upload an entire folder as model:
|
252
|
+
|
253
|
+
```
|
254
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
255
|
+
|
256
|
+
arti = FrogMLStorage()
|
257
|
+
arti.upload_model_version(repository=<repository_key>,
|
258
|
+
namespace=<namespce>,
|
259
|
+
model_name=<model_name>,
|
260
|
+
model_path="~/model_to_upload/",
|
261
|
+
model_type={"framework": "tensorflow", "framework_version": "2.3.0", "serialization_format": "H5", "runtime": "python", "runtime_version": "3.7"},
|
262
|
+
properties={"model_type": "keras", "experiment": "my-exp"},
|
263
|
+
dependencies_files_paths=["path/to/req/file1", "path/to/req/file2"],
|
264
|
+
code_archive_file_path="path/to/code/archieve/file"
|
265
|
+
)
|
266
|
+
```
|
267
|
+
|
268
|
+
Upload a model with a specified version, and no dependencies and code archive:
|
269
|
+
|
270
|
+
```
|
271
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
272
|
+
|
273
|
+
arti = FrogMLStorage()
|
274
|
+
arti.upload_model_version(repository=<repository_key>,
|
275
|
+
namespace=<namespce>,
|
276
|
+
model_name=<model_name>,
|
277
|
+
version=<version>,
|
278
|
+
model_path="~/model_to_upload/",
|
279
|
+
model_type={"framework": "tensorflow", "framework_version": "2.3.0", "serialization_format": "H5", "runtime": "python", "runtime_version": "3.7"}
|
280
|
+
)
|
281
|
+
```
|
282
|
+
|
283
|
+
---
|
284
|
+
|
285
|
+
#### Download ML model from Artifactory
|
286
|
+
|
287
|
+
The below example shows how to download a model from Artifactory:
|
288
|
+
|
289
|
+
```
|
290
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
291
|
+
|
292
|
+
arti = FrogMLStorage()
|
293
|
+
|
294
|
+
arti.download_model_version(repository=<repository_key>,
|
295
|
+
namespace=<namespace>,
|
296
|
+
model_name=<model_name>,
|
297
|
+
target_path="~/models",
|
298
|
+
version=<version>)
|
299
|
+
```
|
300
|
+
|
301
|
+
---
|
302
|
+
**NOTE**
|
303
|
+
|
304
|
+
The dependencies and code archive cannot be downloaded.
|
305
|
+
|
306
|
+
---
|
307
|
+
|
308
|
+
### Upload ML dataset to Artifactory
|
309
|
+
|
310
|
+
Upload an entire folder as dataset:
|
311
|
+
|
312
|
+
|
313
|
+
```
|
314
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
315
|
+
|
316
|
+
arti = FrogMLStorage()
|
317
|
+
arti.upload_dataset_version(repository=<repository_key>,
|
318
|
+
namespace=<namespce>,
|
319
|
+
dataset_name=<dataset_name>,
|
320
|
+
source_path="~/dataset_to_upload/",
|
321
|
+
properties={"dataset_type": "kerras", "experiment": "my-exp"})
|
322
|
+
```
|
323
|
+
|
324
|
+
Upload a dataset with specified version:
|
325
|
+
|
326
|
+
```
|
327
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
328
|
+
|
329
|
+
arti = FrogMLStorage()
|
330
|
+
arti.upload_dataset_version(repository=<repository_key>,
|
331
|
+
namespace=<namespce>,
|
332
|
+
dataset_name=<dataset_name>,
|
333
|
+
version=<version>,
|
334
|
+
source_path="~/dataset_to_upload/")
|
335
|
+
```
|
336
|
+
|
337
|
+
Upload a single file as a dataset:
|
338
|
+
|
339
|
+
```
|
340
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
341
|
+
|
342
|
+
arti = FrogMLStorage()
|
343
|
+
arti.upload_dataset_version(repository=<repository_key>,
|
344
|
+
namespace=<namespce>,
|
345
|
+
dataset_name=<dataset_name>,
|
346
|
+
version=<version>,
|
347
|
+
source_path="~/dataset_to_upload/config.json")
|
348
|
+
```
|
349
|
+
|
350
|
+
#### Download ML dataset from Artifactory
|
351
|
+
|
352
|
+
The below example shows how to download a dataset from Artifactory:
|
353
|
+
|
354
|
+
```
|
355
|
+
from frogml_storage.frog_ml import FrogMLStorage
|
356
|
+
|
357
|
+
arti = FrogMLStorage()
|
358
|
+
|
359
|
+
arti.download_dataset_version(repository=<repository_key>,
|
360
|
+
namespace=<namespace>,
|
361
|
+
dataset_name=<dataset_name>,
|
362
|
+
target_path="~/datasets",
|
363
|
+
version=<version>)
|
364
|
+
```
|
365
|
+
|
366
|
+
## Testing
|
367
|
+
|
368
|
+
### Locally run integration tests using artifactory
|
369
|
+
|
370
|
+
Prerequisites:
|
371
|
+
- A user credentials (username, password)
|
372
|
+
|
373
|
+
To run the integration tests, use the ```poetry run pytest tests/integrations/test_artifactory_integration.py``` command.
|
374
|
+
In addition, you will need to supply your
|
375
|
+
ARTIFACTORY_URL in a `http(s)://` format (if not supplied, default will be as defined [here](tests/integrations/conftest.py)), ARTIFACTORY_USERNAME, ARTIFACTORY_PASSWORD.
|
376
|
+
the test will create a local repository in RT, will upload and download model and datasets using the provided details,
|
377
|
+
and will delete the repository after the test.
|
378
|
+
|
379
|
+
example:
|
380
|
+
```
|
381
|
+
export ARTIFACTORY_URL=<artifactory_url>
|
382
|
+
export ARTIFACTORY_USERNAME=<username>
|
383
|
+
export ARTIFACTORY_PASSWORD=<password>
|
384
|
+
|
385
|
+
poetry run pytest tests/integrations/test_artifactory_integration.py
|
386
|
+
```
|
387
|
+
|
388
|
+
### Locally run tests using existing Artifactory
|
389
|
+
|
390
|
+
To run the tests, use the ```pytest``` command pointing it to an existing Artifactory host.
|
391
|
+
Prerequisites:
|
392
|
+
- A generic local repository in the Artifactory instance
|
393
|
+
- A user token or user credentials (username, password)
|
394
|
+
|
395
|
+
To run the test:
|
396
|
+
|
397
|
+
```
|
398
|
+
python3 -m pytest tests/integrations/test_artifactory_integration.py --rt_url "<artifactory_url>" --rt_access_token <token> --repo_name <generic-repo-name> -s
|
399
|
+
```
|
400
|
+
|
401
|
+
## Packaging
|
402
|
+
|
403
|
+
```
|
404
|
+
poetry build
|
405
|
+
```
|
406
|
+
|
407
|
+
## Linters
|
408
|
+
Fix spaces and linebreaks with:
|
409
|
+
```
|
410
|
+
make format
|
411
|
+
```
|
412
|
+
Run linter check:
|
413
|
+
```
|
414
|
+
make format
|
415
|
+
```
|
@@ -1,11 +1,9 @@
|
|
1
|
-
_qwak_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
1
|
_qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py,sha256=zEXiqCyaQNloO23DGWrilwn1bXoaStuCaiXkcnm3F_o,2436
|
3
2
|
_qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi,sha256=HFrUIrEJFdKls7PhmadzZ-daVPV1i062w-71wPMMPa4,3116
|
4
3
|
_qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
5
4
|
_qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.py,sha256=T0RwhekjgVIlXFY5M9toJNqlZtpZvInh172ZSHiWIZc,3049
|
6
5
|
_qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.pyi,sha256=1ph1Ifv61UeT1aloXi3Ml4Ls5-tkrUUpjtOO16Pd5A0,1690
|
7
6
|
_qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2_grpc.py,sha256=zrgMffnpFmrB7dxF6QmdLYRg-OUKsaVj2A3NBBKTXJU,3264
|
8
|
-
_qwak_proto/qwak/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
7
|
_qwak_proto/qwak/administration/account/v1/account_pb2.py,sha256=WM_b2Yzakj2quNp08TdndvjE1tPBzrnGYBsFO4PX094,8229
|
10
8
|
_qwak_proto/qwak/administration/account/v1/account_pb2.pyi,sha256=nVQd1EGvYdJZ4WpsHxqUGK1m9F-ESB0bX7S8d-pziWo,11832
|
11
9
|
_qwak_proto/qwak/administration/account/v1/account_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
@@ -492,9 +490,15 @@ _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2_grpc.py,sha256=1oboBPFx
|
|
492
490
|
_qwak_proto/qwak/model_group/model_group_pb2.py,sha256=fP198ECc5Ca3WccDvRlcaNavZgWeXKrzKyFKZXL52So,3427
|
493
491
|
_qwak_proto/qwak/model_group/model_group_pb2.pyi,sha256=6xP_BE9OccBWV784jfKS5BcBabUcDL22XtrtWq2_hlU,3038
|
494
492
|
_qwak_proto/qwak/model_group/model_group_pb2_grpc.py,sha256=UyRBABlYr-W3uUKUnStENcfnc0mXOtShh8_mjpzpro0,3073
|
495
|
-
_qwak_proto/qwak/
|
496
|
-
_qwak_proto/qwak/
|
497
|
-
_qwak_proto/qwak/
|
493
|
+
_qwak_proto/qwak/model_group/model_group_repository_details_pb2.py,sha256=t7oUXXLQvgxNuLyrA0qzuyfazRXK-uCIArXD_4s_1J4,5022
|
494
|
+
_qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi,sha256=h5ciIby9peqjZqHosajfrHdmX5kosmzDJiadoCVpTmc,4119
|
495
|
+
_qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
496
|
+
_qwak_proto/qwak/models/models_pb2.py,sha256=dypKmBnjqzAmSLkXRPx0QMXiB1D-mUNxRu5pGqxVj68,32093
|
497
|
+
_qwak_proto/qwak/models/models_pb2.pyi,sha256=6h6PCqMOwZgSf77CUEx_SiRWX0uTxjiFMysVG_Z0Qvc,39027
|
498
|
+
_qwak_proto/qwak/models/models_pb2_grpc.py,sha256=2V7rVTiSaJcjw38OjUgtvYkouHMt6nAVJb0DE22ujE0,21680
|
499
|
+
_qwak_proto/qwak/models/models_query_pb2.py,sha256=GlkN0jKFqX2x4fbX1zLnk0Jbr3nlfLNINmSh5_JGqHo,4322
|
500
|
+
_qwak_proto/qwak/models/models_query_pb2.pyi,sha256=cZO7EA_JetDIQbC-9hg42G07DJMBC6Adgn6IMhnhhNQ,7456
|
501
|
+
_qwak_proto/qwak/models/models_query_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
498
502
|
_qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.py,sha256=Wj1nO5GzAigK3axuY2Qwc3WeENLLwLvCj3FcQ6Zuhpo,10745
|
499
503
|
_qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.pyi,sha256=0l-75-C7DniOm1DOY8y9DbxKuU4_930V6KS6bjCrM2c,6790
|
500
504
|
_qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2_grpc.py,sha256=YuYQU-wACkHV0h9aBlXJ8qFFT2p85LGXswfkme74_s0,13657
|
@@ -597,7 +601,45 @@ _qwak_proto/qwak/workspace/workspace_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXH
|
|
597
601
|
_qwak_proto/qwak/workspace/workspace_service_pb2.py,sha256=AB3C9S_AbOD7Nx1Ni4j1rW6PNtYTV1zjiqFQk-goQ74,21429
|
598
602
|
_qwak_proto/qwak/workspace/workspace_service_pb2.pyi,sha256=nKKCHwnovZhsy8TSVmdz-Vtl0nviOOoX56HD-41Xo08,13726
|
599
603
|
_qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py,sha256=yKGuexxTBza99Ihe0DSTniV2ZSd_AG47inHenqfi890,27193
|
600
|
-
|
604
|
+
frogml_storage/__init__.py,sha256=Wq_pUPT9jRznmLWLcQuuLFhFJPxX4mt7avCmVvx1DJI,24
|
605
|
+
frogml_storage/artifactory/__init__.py,sha256=C02rcm7kqsZBVA6c6Gztxamj96hn8Aj6BuzYWFRmWbQ,71
|
606
|
+
frogml_storage/artifactory/_artifactory_api.py,sha256=z8YX90bCy82BWqMNUdpbbig1qF5CarkIOfP6V96uYYg,11188
|
607
|
+
frogml_storage/authentication/login/__init__.py,sha256=ch8UhQwh3o5ddyoJykQ0Bnog5-8qKHmeDpwqny8xMzM,46
|
608
|
+
frogml_storage/authentication/login/_login_cli.py,sha256=9Lyt0poCYVYPFaiWWtcX0kO4MncXeZnkQ-GfEnamnfo,8414
|
609
|
+
frogml_storage/authentication/login/_login_command.py,sha256=dj9pOanaYg4PMNbF1EbgMXeoIMo1lfoHp5JFNUZFZ5g,2849
|
610
|
+
frogml_storage/authentication/models/__init__.py,sha256=-nG08ZWSD2nIa5lqGtn9pidXM_-XLj4ASG_jHATOK84,113
|
611
|
+
frogml_storage/authentication/models/_auth.py,sha256=uKo6hxD1jjDGmYeQIJSnKJCOZIE6iTA8LJJs__BTufA,600
|
612
|
+
frogml_storage/authentication/models/_auth_config.py,sha256=uDcPXaPRXKDEtAhHEuN-GQTeDg8AUL8FE4aiAByHU_I,2024
|
613
|
+
frogml_storage/authentication/models/_login.py,sha256=jcFdiWRqjaVAGG9hiYpPHF0WUNT4DqMqVp1FPFGuwOM,723
|
614
|
+
frogml_storage/authentication/utils/__init__.py,sha256=NBT-KjHJrqXYS3sZvWENjq1gmLiyKSN3fXWDl0-rh8k,430
|
615
|
+
frogml_storage/authentication/utils/_authentication_utils.py,sha256=WTQRclyGKWTKLfFQEV3Xgq1_aCsKVDZsuhM3WkxeC1k,9730
|
616
|
+
frogml_storage/authentication/utils/_login_checks_utils.py,sha256=OQZSJHN9C0ujCaAjYuttBBxyoOrWo0KGLKOw5et__ds,2993
|
617
|
+
frogml_storage/base_storage.py,sha256=gbkDRhXhLLJrr72A2vGcQqEHEjCDEk9-n7ye98F3_2k,5606
|
618
|
+
frogml_storage/constants.py,sha256=Fx-Dyzkl9e28O2qCvIgyEf2aBuhftXAdbn2BIfXFaGw,1542
|
619
|
+
frogml_storage/exceptions/checksum_verification_error.py,sha256=t1muLRYvqza7Q4jo1mYHck9ZoDwlGE7WxcheAFAnIQs,159
|
620
|
+
frogml_storage/exceptions/validation_error.py,sha256=_twu_xcL-O7D26qkskuuR-_NcnPPTADIUO9HGY4g0x0,156
|
621
|
+
frogml_storage/frog_ml.py,sha256=TavbAqoZ8Q-DYN93nORmT88pcwwLEjkkRb9tp_gFy1o,24182
|
622
|
+
frogml_storage/http/__init__.py,sha256=BOXGzjq1gJXlihldaZvMQNGJIdCy-UHWsk3u-bXEZnQ,36
|
623
|
+
frogml_storage/http/http_client.py,sha256=jYwe4aHhMRsTjl5fZDlJxaTFuY3RnIcw7P1Wz8Ykz4g,2420
|
624
|
+
frogml_storage/logging/__init__.py,sha256=JaBPWQQt3pjoLhUcZtgqPydGlKAWYpSvfPkt2z1Wi90,32
|
625
|
+
frogml_storage/logging/_log_config.py,sha256=ytwyRLYr3SyRlo4UpTjLBtlNqVApP9URTVO5m5DN3uU,1162
|
626
|
+
frogml_storage/logging/log_utils.py,sha256=MLuQvBrmysiWAeKKq1lHFt3o6DJPyafFWRJNTg9ECaY,711
|
627
|
+
frogml_storage/models/__init__.py,sha256=ZoWMjtQ4Bn-ARJqKEUp-XDRbHgaSQJG_1M2S5z91jbQ,47
|
628
|
+
frogml_storage/models/_download_context.py,sha256=8Jc5JmQG5mwObQp-CXF-D6dP3xUbZcyHUSdwM-p-8s0,1667
|
629
|
+
frogml_storage/models/dataset_manifest.py,sha256=w5ARGQSkRSP7mofsbxOcc9bXORKXIMo5iF1yFGd8Nyw,303
|
630
|
+
frogml_storage/models/entity_manifest.py,sha256=BXwJz1q3NIH6QFccnGDG51R3HnHO9-oCeO9qZqaxQg4,2787
|
631
|
+
frogml_storage/models/frogml_dataset_version.py,sha256=Uwe50e8eD9XqwARCsa4-iJJqyMQsDqs9E-iuAInvJuA,637
|
632
|
+
frogml_storage/models/frogml_entity_type_info.py,sha256=gIoWcm-nqKQRpVg8DJcq8jJE-e7qgR_-EUv6R8wKCFs,1448
|
633
|
+
frogml_storage/models/frogml_entity_version.py,sha256=jiDGk3xcZ-OaaTacs6VLshpyUNKYs8qgBOPk1NUJFkY,928
|
634
|
+
frogml_storage/models/frogml_model_version.py,sha256=2pVHW-BhowBcIScLZzWj5SH0abAirP3cDvXeq334lJI,631
|
635
|
+
frogml_storage/models/model_manifest.py,sha256=NEyUTt0ZbLbv-47nb_yJJrA0xnTCk67SdEUcZ09tjr8,2200
|
636
|
+
frogml_storage/models/serialization_metadata.py,sha256=KOJ9Yj0XGbYudpcUBMh67Hd7VohmoWsYOvhD-L2yzyY,347
|
637
|
+
frogml_storage/utils/__init__.py,sha256=HQUWfuGUIPZY7kfS795TRW8BQ4WmNqrNjS7lUrbxCdk,299
|
638
|
+
frogml_storage/utils/_environment.py,sha256=NEnRxaFdRDi3UA33IVTSfQxqc9ZB6nV9YlHDmT5bIkI,650
|
639
|
+
frogml_storage/utils/_input_checks_utility.py,sha256=ZUvkxhcTcbSKtpSo5ePWha3Ca5xohxIpiAlZlpcQ3xk,3221
|
640
|
+
frogml_storage/utils/_storage_utils.py,sha256=HB2g7uY5A3b33yIcAUM1OjHb5jWsnpESsiDrEviQwrI,366
|
641
|
+
frogml_storage/utils/_url_utils.py,sha256=NUEfz9Fp1iE8b676-A5wrMlSTsJVRKrUhcUItOFAJD8,821
|
642
|
+
qwak/__init__.py,sha256=2Xg-Qy0BfDX-xLBTGxnWF9JZ2QFnpPKvTGk6wE82nKY,587
|
601
643
|
qwak/automations/__init__.py,sha256=qFZRvCxUUn8gcxkJR0v19ulHW2oJ0x6-Rif7HiheDP4,1522
|
602
644
|
qwak/automations/automation_executions.py,sha256=5MeH_epYYWb8NKXgAozwT_jPyyUDednBHG7izloi7RY,3228
|
603
645
|
qwak/automations/automations.py,sha256=3yx8e2v0uSKDnXbqyknasyEoQ5vxGni6K40Hbi1_zkk,12599
|
@@ -657,7 +699,7 @@ qwak/clients/file_versioning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
657
699
|
qwak/clients/file_versioning/client.py,sha256=ywOy9olB4mekjQQrKUufAbaC-3sWzQnqd3ChcwrAJzc,2505
|
658
700
|
qwak/clients/file_versioning/file_tag_filter.py,sha256=5pVJ0mGq9DEOqQkg7H-jjSbsmnWusO4-_0Jpz4DhDwo,885
|
659
701
|
qwak/clients/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
660
|
-
qwak/clients/instance_template/client.py,sha256=
|
702
|
+
qwak/clients/instance_template/client.py,sha256=8EjXzMLTeGfywO1kDycVr4MxT3Z6gF7nX8B9i03JRYQ,2565
|
661
703
|
qwak/clients/integration_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
662
704
|
qwak/clients/integration_management/integration_manager_client.py,sha256=-pNY6iQU8du46wvRCiTKKCi23RcCNXr9La_0oG0mJo0,1225
|
663
705
|
qwak/clients/integration_management/integration_utils.py,sha256=EVNsM5ItlGwpfqfZPayJCrTiZa0AaR241ui4QvzcLVg,953
|
@@ -674,7 +716,7 @@ qwak/clients/model_management/client.py,sha256=LHJlR12plQCjv0TtuozJ4Da91M7C-ay6G
|
|
674
716
|
qwak/clients/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
675
717
|
qwak/clients/project/client.py,sha256=Np4vDU4iPndGtWTF_bH2CqepCQHw49whvsq23uLMMJs,2484
|
676
718
|
qwak/clients/prompt_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
677
|
-
qwak/clients/prompt_manager/model_descriptor_mapper.py,sha256=
|
719
|
+
qwak/clients/prompt_manager/model_descriptor_mapper.py,sha256=QDLPImRIPv9Jrdtg03oL7zgKvrWDXmzK0QXkUFAo1bs,7395
|
678
720
|
qwak/clients/prompt_manager/prompt_manager_client.py,sha256=Mg1uqJjwj57jFfNKx6tomzfOe6C8keTKpxvXFSPo0yA,6952
|
679
721
|
qwak/clients/prompt_manager/prompt_proto_mapper.py,sha256=ybLsPz5nt4BsgBFk2RYk0tFwbNpHTsCOp93k8ALXmr4,9233
|
680
722
|
qwak/clients/secret_service/__init__.py,sha256=TdQl1lgplXCKVHYSN4feRIAoonZ7XDz50zALjwVDcM4,40
|
@@ -706,7 +748,7 @@ qwak/exceptions/qwak_remote_build_failed.py,sha256=JgrYwCQGclCCcpSkYk2FKqhkEk45a
|
|
706
748
|
qwak/exceptions/qwak_suggestion_exception.py,sha256=3sIK6s3OB3G0NLC_fGV1WkAo_tHNjH-A5vaehxmkoek,746
|
707
749
|
qwak/feature_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
708
750
|
qwak/feature_store/_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
709
|
-
qwak/feature_store/_common/artifact_utils.py,sha256=
|
751
|
+
qwak/feature_store/_common/artifact_utils.py,sha256=0u90A3Fxdw5_QFWaK80VJoJh907ffy-GIuVMku7cyL0,1979
|
710
752
|
qwak/feature_store/_common/feature_set_utils.py,sha256=dhtPWnwv1nB3h3EA8FAYklx1qGkO_Dj1jecaBGNNpew,8634
|
711
753
|
qwak/feature_store/_common/functions.py,sha256=kSNYJ7dy48NN09HG9asm4ibQh0JaCGcZYsRDjRWlUHE,659
|
712
754
|
qwak/feature_store/_common/packaging.py,sha256=eyTyjIB_C6wGHcdU7xR5u7-N2Ld98s4LPU_iZtcbRO0,8122
|
@@ -715,11 +757,11 @@ qwak/feature_store/_common/source_code_spec_factory.py,sha256=zDif0nlWs43T87-k2V
|
|
715
757
|
qwak/feature_store/_common/value.py,sha256=6aN3101DvEDUJalNL1LrzH32wi9SVhl0ZpsGHcFJZzg,323
|
716
758
|
qwak/feature_store/data_sources/__init__.py,sha256=IKv3UDhcaCm6VagPGv1AvdYu_gxHUc69mbNOG96kEsU,2316
|
717
759
|
qwak/feature_store/data_sources/attributes.py,sha256=6xbotlaWcrqmW5cjCET57hyCRDy8I2a2aoo5BGcIE4I,791
|
718
|
-
qwak/feature_store/data_sources/base.py,sha256=
|
760
|
+
qwak/feature_store/data_sources/base.py,sha256=KYP1VLr_Br_4se3-JxKWC2dj5CjMM5Mli7OOz_NZtCQ,4170
|
719
761
|
qwak/feature_store/data_sources/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
720
762
|
qwak/feature_store/data_sources/batch/_batch.py,sha256=V-VLVgUVPN1Mfk-brNYl0nPczqRU-GYOB7Xy-3-O0zI,197
|
721
763
|
qwak/feature_store/data_sources/batch/_jdbc.py,sha256=k045Rm5iMx2pXYvif4C4vdZt7tbVgAt-3ThH3cP2rTM,695
|
722
|
-
qwak/feature_store/data_sources/batch/athena.py,sha256=
|
764
|
+
qwak/feature_store/data_sources/batch/athena.py,sha256=Ogrr3Za7owdWu8cWsa81UnvZ4_R2UFA1YMe8UjkYroA,10902
|
723
765
|
qwak/feature_store/data_sources/batch/big_query.py,sha256=H3rEWGxXJjIQNFiyZ9c6JgcSyeWzSeZzh59y8ZjAn0U,3117
|
724
766
|
qwak/feature_store/data_sources/batch/clickhouse.py,sha256=FELh-70EIyPeYap3Gj8maoalXdXbJ5kBvnfvaiw6Kk4,2158
|
725
767
|
qwak/feature_store/data_sources/batch/csv.py,sha256=wdn8ARBYebTcNojaji8OYXnKlx_U1G7sFLChGffMxfg,2076
|
@@ -759,8 +801,8 @@ qwak/feature_store/feature_sets/context.py,sha256=zV6r0O70cfM4pmxlfC6xxAtro-wBhe
|
|
759
801
|
qwak/feature_store/feature_sets/execution_spec.py,sha256=SXlhgNJeFDIKvrH35ZOyjBqGUesdoxjWkPgHmm518Y0,1877
|
760
802
|
qwak/feature_store/feature_sets/metadata.py,sha256=ckr-zr0hZgsK-tRWucMomF7Tj8XIYcp_cnNGwtMV4mA,1814
|
761
803
|
qwak/feature_store/feature_sets/read_policies.py,sha256=ZVMRiducxfb5YbU0NQQDPb78BH5fRttsE5y2TL7Jaj4,6820
|
762
|
-
qwak/feature_store/feature_sets/streaming.py,sha256=
|
763
|
-
qwak/feature_store/feature_sets/streaming_backfill.py,sha256=
|
804
|
+
qwak/feature_store/feature_sets/streaming.py,sha256=G0Prg6hyjrzimL0u7tA71G-Bq3mnn57ZZCneMfudL0Y,25161
|
805
|
+
qwak/feature_store/feature_sets/streaming_backfill.py,sha256=NInPNnc0WYx2FDsjaOt5woTO7EtzgrZCbMB_Ull0ux0,9585
|
764
806
|
qwak/feature_store/feature_sets/transformations/__init__.py,sha256=TtzeMNhqxuYu8NIxqBCcGHJoA-B8389RTIHrDMvpMbw,857
|
765
807
|
qwak/feature_store/feature_sets/transformations/aggregations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
766
808
|
qwak/feature_store/feature_sets/transformations/aggregations/aggregations.py,sha256=MENQyuDEG5G4TQs7fd1L1FEfP4kWd0LaHbG61Kw4rbY,14117
|
@@ -775,14 +817,14 @@ qwak/feature_store/offline/_offline_serving_validations.py,sha256=a3Ga9-IPTS0TPf
|
|
775
817
|
qwak/feature_store/offline/client_v2.py,sha256=MKIlVGohW7aMmCpBUKE9wP9X6gtU_pLVfOgnBn2Bp98,14393
|
776
818
|
qwak/feature_store/offline/feature_set_features.py,sha256=Eh_rPz_m12cAQvrhIF-xtA-ZGVKy1HlgKJdjNvsmPoo,739
|
777
819
|
qwak/feature_store/online/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
778
|
-
qwak/feature_store/online/client.py,sha256=
|
820
|
+
qwak/feature_store/online/client.py,sha256=V317ol5IXslhmHmUlmucc-yBXaByj6HuA6LdzGWDSTk,12929
|
779
821
|
qwak/feature_store/online/endpoint_utils.py,sha256=Lx5Wvvg7teJGXP3SOUPPmYQeVjSve2b0hQlqhs13R5M,2210
|
780
822
|
qwak/feature_store/sinks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
781
823
|
qwak/feature_store/sinks/base.py,sha256=FvNz9aabvYHT-3vZdHdtEnlFQ0tyvsnspkPnWt2lTdU,360
|
782
824
|
qwak/feature_store/sinks/kafka.py,sha256=P9gPxotQMyC3qr8xZyL_7g65amnzeqpvz6jutwRoHiY,1826
|
783
825
|
qwak/feature_store/sinks/streaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
784
826
|
qwak/feature_store/sinks/streaming/attachment.py,sha256=sONswzyTZlxB9OEDc1DzE_Et6AI7gBi_T--NSY3MeOw,1031
|
785
|
-
qwak/feature_store/sinks/streaming/factory.py,sha256=
|
827
|
+
qwak/feature_store/sinks/streaming/factory.py,sha256=8gGJs6dAzYZVhTIyvlmnQgm7KqYe5xa9eBGUyigMPSw,2361
|
786
828
|
qwak/feature_store/validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
787
829
|
qwak/feature_store/validations/validation_options.py,sha256=f4kqv8j-lyvWLGnaFlUQNmAleZ3hkTZZs0CJPcsk18I,2656
|
788
830
|
qwak/feature_store/validations/validation_response.py,sha256=e052KUs2qzYvh5Kuo4XbnscRK_1jcT6HwqwdL-4qH20,3783
|
@@ -818,7 +860,7 @@ qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strat
|
|
818
860
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
819
861
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py,sha256=Cry97YuBP16TZT6iL512Gmqp-U1J-UDxdARt-E1MD2M,5057
|
820
862
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
821
|
-
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=
|
863
|
+
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=xt2Ywwf0zirPkpLCu_RgtZp7AxFU-qEboqK6DZdNb5Y,5946
|
822
864
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py,sha256=iRl-au3V6KbKIY-doYSAaqiS5Bt2_w3ZIvUw9xwSK64,1424
|
823
865
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
824
866
|
qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py,sha256=z1PHzvhUWtEqcppE5Ju4BRbwvZ07kodNglkl6AwvbfI,2258
|
@@ -840,7 +882,7 @@ qwak/inner/build_logic/tools/text.py,sha256=tH-v19Mt8l90sMVxku5XRtrderT0qdRqJ-jL
|
|
840
882
|
qwak/inner/build_logic/trigger_build_context.py,sha256=n5s7MRk41h8cxPI3IVuqMQUVuCc-D8A7Hhq35YuuAps,200
|
841
883
|
qwak/inner/const.py,sha256=cGC_pvrMxOgA7601PU4X_nlQwnov1Sfolxg5ZqpPH8s,1135
|
842
884
|
qwak/inner/di_configuration/__init__.py,sha256=hWlDSkum6Vi42I2weMRWucKwcWEdxpyOOEHFxjbBzfI,1765
|
843
|
-
qwak/inner/di_configuration/account.py,sha256=
|
885
|
+
qwak/inner/di_configuration/account.py,sha256=UinLhBLxg9wyNZzXw9zVNC1GddT3gVdmQJ5_lxNcy1g,7257
|
844
886
|
qwak/inner/di_configuration/config.yml,sha256=GUvaZMWIDIR_d7hFcPVG_kHdCwpERKH1AFDakG3vqI4,242
|
845
887
|
qwak/inner/di_configuration/containers.py,sha256=1Vvs_p5laNcduDWH47dZpJJa2xu3v5P5w3eFTtPWgbA,1136
|
846
888
|
qwak/inner/di_configuration/session.py,sha256=Pwqapcu-0dsbb5dDn7ZGewVk4bYRN9sWk6ity72IDqY,452
|
@@ -852,7 +894,7 @@ qwak/inner/runtime_di/__init__.py,sha256=ylaHwo2Hlq3pmeziA0Ip87DMnkcuBffKKi0tTH7
|
|
852
894
|
qwak/inner/runtime_di/containers.py,sha256=-AREM-IUAd9JhrhQablqixxpj4L9Tk1iQkK1fA5YbrA,545
|
853
895
|
qwak/inner/singleton_meta.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
854
896
|
qwak/inner/tool/__init__.py,sha256=DDoMZk7LIZNfu63Ft0mLE5wflwlQoghAJ1ZmMAcAeVE,74
|
855
|
-
qwak/inner/tool/auth.py,sha256=
|
897
|
+
qwak/inner/tool/auth.py,sha256=5T3q4lcCsgtXQZ4_xEUiCNjMKAU9E1GwRbSz6PA4-g8,7459
|
856
898
|
qwak/inner/tool/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
857
899
|
qwak/inner/tool/grpc/grpc_auth.py,sha256=nHfIk2R5ljCvU8hsgk_X6grfNhVrbTvQe6uJffe5W5o,2291
|
858
900
|
qwak/inner/tool/grpc/grpc_tools.py,sha256=ArtsEZz5V-YxOVE6vH_UHJwOn6gAJVIolda8hF6qwMs,7256
|
@@ -916,7 +958,7 @@ qwak/llmops/provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
916
958
|
qwak/llmops/provider/chat.py,sha256=dec-IKGzkECb5tz63HNK0Fx9Tm4ukQ4kkYFEr6bA7co,1582
|
917
959
|
qwak/llmops/provider/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
918
960
|
qwak/llmops/provider/openai/client.py,sha256=G20TB3LW4amdOu-_7526xBDnvpNop7c_QvhLz7hSLUs,4462
|
919
|
-
qwak/llmops/provider/openai/provider.py,sha256=
|
961
|
+
qwak/llmops/provider/openai/provider.py,sha256=TFdbo9NWPPKkx8yNuAfDkVmYFvVW9IcAg_NBtCowW4Q,3044
|
920
962
|
qwak/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
921
963
|
qwak/model/_entity_extraction.py,sha256=-h66QcJS0bzrzHMqdvxybHj3lgPbQhoVHnt7YKAFjKg,4626
|
922
964
|
qwak/model/adapters/__init__.py,sha256=jMM_0Nf6_vCKccsRB0izs8odCXYlXt-u1sXGh4PcpX4,1739
|
@@ -964,7 +1006,7 @@ qwak/model/tools/adapters/input_adapters/image_input.py,sha256=NL869uiD5TjI3WzjQ
|
|
964
1006
|
qwak/model/tools/adapters/input_adapters/json_input.py,sha256=nP_1EgJvmv4rkXR6tLYrJwf4p-FAfFQOTxY-LEfAJaU,608
|
965
1007
|
qwak/model/tools/adapters/input_adapters/string_input.py,sha256=K2SIJy92C-1eX1ReT8iqeFAU8UQWF2d88Zv79jsMrac,151
|
966
1008
|
qwak/model/tools/adapters/input_adapters/tf_tensor_input.py,sha256=tNid73S0WOLjvD6tKrO2BsgUa-eJaMmCkRs4ucVQXDU,1363
|
967
|
-
qwak/model/tools/adapters/output.py,sha256=
|
1009
|
+
qwak/model/tools/adapters/output.py,sha256=tj2kj7TQiH0b7N1C3j-EPYWESoNiwSyqazV8gbkMIbY,2716
|
968
1010
|
qwak/model/tools/adapters/output_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
969
1011
|
qwak/model/tools/adapters/output_adapters/base_output.py,sha256=VXiwnA1499RQSfdFbEU769lRhuOqWTBPfXglKaymhRc,343
|
970
1012
|
qwak/model/tools/adapters/output_adapters/dataframe_output.py,sha256=tJwG798QCarqXSfD8Je-E3RNwvW9KskcgAYoLioPFns,798
|
@@ -974,9 +1016,9 @@ qwak/model/tools/adapters/output_adapters/tf_tensor_output.py,sha256=Xg98LMoldKE
|
|
974
1016
|
qwak/model/tools/run_model_locally.py,sha256=xRYOOi-BLAs-QRTrSWxKPQLeTg5j3FSmImDq6e6lLro,2289
|
975
1017
|
qwak/model/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
976
1018
|
qwak/model/utils/extract_wrapped_function.py,sha256=uIle1zL8vbmeS3PGAuaNFLIUQAsvpuzk3LlH-Teba94,320
|
977
|
-
qwak/model/utils/feature_utils.py,sha256=
|
1019
|
+
qwak/model/utils/feature_utils.py,sha256=bCeWZgsKSvGjbQOfLKubEJNec6Gp1Gbxug_fsO3wReo,2491
|
978
1020
|
qwak/model_loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
979
|
-
qwak/model_loggers/artifact_logger.py,sha256=
|
1021
|
+
qwak/model_loggers/artifact_logger.py,sha256=kXYfnVu7zvInA3CQlPFdIQLWOUGpZ6wNTprY5WE6Mvo,3889
|
980
1022
|
qwak/model_loggers/data_logger.py,sha256=aTRnRwKmKUFZq9SRg4sY-b1yGDY2XB-pExlQ0WlcH0k,5629
|
981
1023
|
qwak/model_loggers/model_logger.py,sha256=WxKLEpfzDaRn3kanrI0kj4zqqKQrwT2sin1IS1WNEA8,852
|
982
1024
|
qwak/qwak_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1007,7 +1049,7 @@ qwak/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1007
1049
|
qwak/testing/fixtures.py,sha256=tjWIvdZ2nIfNPs6VtUeGx5coJepQVMUWemKGtqUYPzM,318
|
1008
1050
|
qwak/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1009
1051
|
qwak/tools/logger/__init__.py,sha256=i70JxYs7RGOaUrcYAHkakLqyUt486qJyEY1cXFvkk9Y,107
|
1010
|
-
qwak/tools/logger/logger.py,sha256=
|
1052
|
+
qwak/tools/logger/logger.py,sha256=aGCsimvkfBF4eVPCqgwQc0LVuQZyenheNUmNiOSruK4,9606
|
1011
1053
|
qwak/tools/logger/logging.yml,sha256=UWC2i3NVKT3j5S8_SapzqClDzXLIEAurzNIXa2tS4UA,1941
|
1012
1054
|
qwak/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1013
1055
|
qwak/utils/datetime_utils.py,sha256=3zK7PUrerMlwB7U6WeuYwMAclVMfPqBNZihNRyIVMs4,581
|
@@ -1071,6 +1113,6 @@ qwak_services_mock/mocks/workspace_manager_service_mock.py,sha256=O9ZSwln4T4kHVk
|
|
1071
1113
|
qwak_services_mock/services_mock.py,sha256=zXtHcX8a_acz7ynxuCBxxVpHpde7aAGjIn6Uw52LY1s,19593
|
1072
1114
|
qwak_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1073
1115
|
qwak_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
|
1074
|
-
qwak_core-0.4.
|
1075
|
-
qwak_core-0.4.
|
1076
|
-
qwak_core-0.4.
|
1116
|
+
qwak_core-0.4.273.dist-info/METADATA,sha256=dg-g1DVAuLRRPWYRI2dG7fUCqg4bNMsWuMKqLY83xM0,15142
|
1117
|
+
qwak_core-0.4.273.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
1118
|
+
qwak_core-0.4.273.dist-info/RECORD,,
|
_qwak_proto/__init__.py
DELETED
File without changes
|
_qwak_proto/qwak/__init__.py
DELETED
File without changes
|