qwak-core 0.4.266__py3-none-any.whl → 0.4.268__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/builds/builds_orchestrator_service_pb2.py +23 -3
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +25 -0
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +33 -0
- qwak/__init__.py +1 -1
- qwak/clients/instance_template/client.py +4 -6
- qwak/clients/prompt_manager/model_descriptor_mapper.py +19 -21
- 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/llmops/provider/openai/provider.py +3 -3
- qwak/model/tools/adapters/output.py +1 -1
- qwak/model/utils/feature_utils.py +8 -12
- qwak/model_loggers/artifact_logger.py +7 -7
- qwak/tools/logger/logger.py +1 -1
- qwak_core-0.4.268.dist-info/METADATA +53 -0
- {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/RECORD +22 -54
- frogml_storage/__init__.py +0 -0
- frogml_storage/_artifactory_api.py +0 -315
- frogml_storage/_environment.py +0 -22
- frogml_storage/_log_config.py +0 -45
- frogml_storage/_storage_utils.py +0 -15
- frogml_storage/_utils.py +0 -69
- frogml_storage/authentication/_authentication_utils.py +0 -259
- frogml_storage/authentication/models/_auth_config.py +0 -70
- frogml_storage/cli/_frogml_cli.py +0 -40
- frogml_storage/cli/_login_cli.py +0 -240
- frogml_storage/cli/commands/_login_command.py +0 -74
- frogml_storage/cli/models/_cli_login_arguments.py +0 -22
- frogml_storage/cli/utils/_cli_utils.py +0 -19
- frogml_storage/cli/utils/_login_checks_utility.py +0 -114
- frogml_storage/constants.py +0 -56
- frogml_storage/dataset_manifest.py +0 -13
- frogml_storage/entity_manifest.py +0 -93
- frogml_storage/exceptions/checksum_verification_error.py +0 -3
- frogml_storage/exceptions/validation_error.py +0 -4
- frogml_storage/frog_ml.py +0 -668
- frogml_storage/frogml_entity_type_info.py +0 -46
- frogml_storage/http/__init__.py +0 -0
- frogml_storage/http/http_client.py +0 -83
- frogml_storage/model_manifest.py +0 -60
- frogml_storage/models/_download_context.py +0 -54
- frogml_storage/models/frogml_dataset_version.py +0 -21
- frogml_storage/models/frogml_entity_version.py +0 -34
- frogml_storage/models/frogml_model_version.py +0 -21
- frogml_storage/serialization_metadata.py +0 -15
- frogml_storage/storage.py +0 -140
- frogml_storage/utils/_input_checks_utility.py +0 -104
- qwak_core-0.4.266.dist-info/METADATA +0 -419
- qwak_core-0.4.266.dist-info/entry_points.txt +0 -3
- {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/WHEEL +0 -0
@@ -16,7 +16,7 @@ from _qwak_proto.qwak.builds import build_pb2 as qwak_dot_builds_dot_build__pb2
|
|
16
16
|
from _qwak_proto.qwak.builds import build_url_pb2 as qwak_dot_builds_dot_build__url__pb2
|
17
17
|
|
18
18
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-qwak/builds/builds_orchestrator_service.proto\x12\x18qwak.builds.orchestrator\x1a\x17qwak/builds/build.proto\x1a\x1bqwak/builds/build_url.proto\"R\n\x11\x42uildModelRequest\x12=\n\nbuild_spec\x18\x01 \x01(\x0b\x32).qwak.builds.orchestrator.RemoteBuildSpec\"\x14\n\x12\x42uildModelResponse\"+\n\x17\x43\x61ncelBuildModelRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"\x1a\n\x18\x43\x61ncelBuildModelResponse\"*\n\x16\x43reateUploadURLRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"C\n\x17\x43reateUploadURLResponse\x12\x12\n\nupload_url\x18\x01 \x01(\t\x12\x14\n\x0c\x64ownload_url\x18\x02 \x01(\t\"h\n\"GetBuildVersioningUploadURLRequest\x12\x42\n\x06params\x18\x01 \x01(\x0b\x32\x32.qwak.builds.orchestrator.BuildVersioningUrlParams\"\xa7\x02\n#GetBuildVersioningUploadURLResponse\x12\x12\n\nupload_url\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12Q\n\x15\x61uthentication_detail\x18\x03 \x01(\x0b\x32..qwak.builds.orchestrator.AuthenticationDetailB\x02\x18\x01\x12[\n\x07headers\x18\x04 \x03(\x0b\x32J.qwak.builds.orchestrator.GetBuildVersioningUploadURLResponse.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x86\x01\n\x14\x41uthenticationDetail\x12Z\n\x1bjfrog_authentication_detail\x18\x01 \x01(\x0b\x32\x33.qwak.builds.orchestrator.JfrogAuthenticationDetailH\x00\x42\x12\n\x10integration_type\"<\n\x19JfrogAuthenticationDetail\x12\x10\n\x08username\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"j\n$GetBuildVersioningDownloadURLRequest\x12\x42\n\x06params\x18\x01 \x01(\x0b\x32\x32.qwak.builds.orchestrator.BuildVersioningUrlParams\"\xdf\x01\n%GetBuildVersioningDownloadURLResponse\x12\x14\n\x0c\x64ownload_url\x18\x01 \x01(\t\x12\x11\n\tfile_size\x18\x02 \x01(\x03\x12]\n\x07headers\x18\x03 \x03(\x0b\x32L.qwak.builds.orchestrator.GetBuildVersioningDownloadURLResponse.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x1eListBuildVersioningTagsRequest\x12L\n\x15\x62uild_versioning_tags\x18\x01 \x01(\x0b\x32-.qwak.builds.orchestrator.BuildVersioningTags\"\x9c\x01\n\x1fListBuildVersioningTagsResponse\x12\x61\n build_versioning_tags_properties\x18\x01 \x03(\x0b\x32\x37.qwak.builds.orchestrator.BuildVersioningTagsProperties\x12\x16\n\x0eui_direct_link\x18\x02 \x01(\t\"\x95\x01\n\x16\x43reateDataTableRequest\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x10\n\x08\x62uild_id\x18\x02 \x01(\t\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12<\n\x05table\x18\x04 \x01(\x0b\x32-.qwak.builds.orchestrator.DataTableDefinition\x12\x0c\n\x04path\x18\x05 \x01(\t\"\x19\n\x17\x43reateDataTableResponse\"n\n\x1dGetBaseDockerImageNameRequest\x12M\n\x16\x62\x61se_docker_image_type\x18\x01 \x01(\x0e\x32-.qwak.builds.orchestrator.BaseDockerImageType\"@\n\x1eGetBaseDockerImageNameResponse\x12\x1e\n\x16\x62\x61se_docker_image_name\x18\x01 \x01(\t\"f\n\x17SaveArtifactPathRequest\x12K\n\x12\x61rtifact_path_spec\x18\x01 \x01(\x0b\x32/.qwak.builds.orchestrator.BuildArtifactPathSpec\"\x1a\n\x18SaveArtifactPathResponse\"-\n\x19ListBuildArtifactsRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"X\n\x1aListBuildArtifactsResponse\x12:\n\tartifacts\x18\x01 \x03(\x0b\x32\'.qwak.builds.orchestrator.
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-qwak/builds/builds_orchestrator_service.proto\x12\x18qwak.builds.orchestrator\x1a\x17qwak/builds/build.proto\x1a\x1bqwak/builds/build_url.proto\"R\n\x11\x42uildModelRequest\x12=\n\nbuild_spec\x18\x01 \x01(\x0b\x32).qwak.builds.orchestrator.RemoteBuildSpec\"\x14\n\x12\x42uildModelResponse\"+\n\x17\x43\x61ncelBuildModelRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"\x1a\n\x18\x43\x61ncelBuildModelResponse\"*\n\x16\x43reateUploadURLRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"C\n\x17\x43reateUploadURLResponse\x12\x12\n\nupload_url\x18\x01 \x01(\t\x12\x14\n\x0c\x64ownload_url\x18\x02 \x01(\t\"h\n\"GetBuildVersioningUploadURLRequest\x12\x42\n\x06params\x18\x01 \x01(\x0b\x32\x32.qwak.builds.orchestrator.BuildVersioningUrlParams\"\xa7\x02\n#GetBuildVersioningUploadURLResponse\x12\x12\n\nupload_url\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12Q\n\x15\x61uthentication_detail\x18\x03 \x01(\x0b\x32..qwak.builds.orchestrator.AuthenticationDetailB\x02\x18\x01\x12[\n\x07headers\x18\x04 \x03(\x0b\x32J.qwak.builds.orchestrator.GetBuildVersioningUploadURLResponse.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x86\x01\n\x14\x41uthenticationDetail\x12Z\n\x1bjfrog_authentication_detail\x18\x01 \x01(\x0b\x32\x33.qwak.builds.orchestrator.JfrogAuthenticationDetailH\x00\x42\x12\n\x10integration_type\"<\n\x19JfrogAuthenticationDetail\x12\x10\n\x08username\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"j\n$GetBuildVersioningDownloadURLRequest\x12\x42\n\x06params\x18\x01 \x01(\x0b\x32\x32.qwak.builds.orchestrator.BuildVersioningUrlParams\"\xdf\x01\n%GetBuildVersioningDownloadURLResponse\x12\x14\n\x0c\x64ownload_url\x18\x01 \x01(\t\x12\x11\n\tfile_size\x18\x02 \x01(\x03\x12]\n\x07headers\x18\x03 \x03(\x0b\x32L.qwak.builds.orchestrator.GetBuildVersioningDownloadURLResponse.HeadersEntry\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"n\n\x1eListBuildVersioningTagsRequest\x12L\n\x15\x62uild_versioning_tags\x18\x01 \x01(\x0b\x32-.qwak.builds.orchestrator.BuildVersioningTags\"\x9c\x01\n\x1fListBuildVersioningTagsResponse\x12\x61\n build_versioning_tags_properties\x18\x01 \x03(\x0b\x32\x37.qwak.builds.orchestrator.BuildVersioningTagsProperties\x12\x16\n\x0eui_direct_link\x18\x02 \x01(\t\"\x95\x01\n\x16\x43reateDataTableRequest\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x10\n\x08\x62uild_id\x18\x02 \x01(\t\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12<\n\x05table\x18\x04 \x01(\x0b\x32-.qwak.builds.orchestrator.DataTableDefinition\x12\x0c\n\x04path\x18\x05 \x01(\t\"\x19\n\x17\x43reateDataTableResponse\"n\n\x1dGetBaseDockerImageNameRequest\x12M\n\x16\x62\x61se_docker_image_type\x18\x01 \x01(\x0e\x32-.qwak.builds.orchestrator.BaseDockerImageType\"@\n\x1eGetBaseDockerImageNameResponse\x12\x1e\n\x16\x62\x61se_docker_image_name\x18\x01 \x01(\t\"f\n\x17SaveArtifactPathRequest\x12K\n\x12\x61rtifact_path_spec\x18\x01 \x01(\x0b\x32/.qwak.builds.orchestrator.BuildArtifactPathSpec\"\x1a\n\x18SaveArtifactPathResponse\"-\n\x19ListBuildArtifactsRequest\x12\x10\n\x08\x62uild_id\x18\x01 \x01(\t\"X\n\x1aListBuildArtifactsResponse\x12:\n\tartifacts\x18\x01 \x03(\x0b\x32\'.qwak.builds.orchestrator.BuildArtifact\"A\n$DetachBuildsFromModelVersionsRequest\x12\x19\n\x11model_version_ids\x18\x01 \x03(\t\"\'\n%DetachBuildsFromModelVersionsResponse2\xf2\x0b\n\x19\x42uildsOrchestratorService\x12g\n\nBuildModel\x12+.qwak.builds.orchestrator.BuildModelRequest\x1a,.qwak.builds.orchestrator.BuildModelResponse\x12y\n\x10\x43\x61ncelBuildModel\x12\x31.qwak.builds.orchestrator.CancelBuildModelRequest\x1a\x32.qwak.builds.orchestrator.CancelBuildModelResponse\x12{\n\x0f\x43reateUploadURL\x12\x30.qwak.builds.orchestrator.CreateUploadURLRequest\x1a\x31.qwak.builds.orchestrator.CreateUploadURLResponse\"\x03\x88\x02\x01\x12\x9a\x01\n\x1bGetBuildVersioningUploadURL\x12<.qwak.builds.orchestrator.GetBuildVersioningUploadURLRequest\x1a=.qwak.builds.orchestrator.GetBuildVersioningUploadURLResponse\x12\xa0\x01\n\x1dGetBuildVersioningDownloadURL\x12>.qwak.builds.orchestrator.GetBuildVersioningDownloadURLRequest\x1a?.qwak.builds.orchestrator.GetBuildVersioningDownloadURLResponse\x12\x8e\x01\n\x17ListBuildVersioningTags\x12\x38.qwak.builds.orchestrator.ListBuildVersioningTagsRequest\x1a\x39.qwak.builds.orchestrator.ListBuildVersioningTagsResponse\x12v\n\x0f\x43reateDataTable\x12\x30.qwak.builds.orchestrator.CreateDataTableRequest\x1a\x31.qwak.builds.orchestrator.CreateDataTableResponse\x12\x8b\x01\n\x16GetBaseDockerImageName\x12\x37.qwak.builds.orchestrator.GetBaseDockerImageNameRequest\x1a\x38.qwak.builds.orchestrator.GetBaseDockerImageNameResponse\x12y\n\x10SaveArtifactPath\x12\x31.qwak.builds.orchestrator.SaveArtifactPathRequest\x1a\x32.qwak.builds.orchestrator.SaveArtifactPathResponse\x12\x7f\n\x12ListBuildArtifacts\x12\x33.qwak.builds.orchestrator.ListBuildArtifactsRequest\x1a\x34.qwak.builds.orchestrator.ListBuildArtifactsResponse\x12\xa0\x01\n\x1d\x44\x65tachBuildsFromModelVersions\x12>.qwak.builds.orchestrator.DetachBuildsFromModelVersionsRequest\x1a?.qwak.builds.orchestrator.DetachBuildsFromModelVersionsResponseB\'\n#com.qwak.ai.builds.orchestrator.apiP\x01\x62\x06proto3')
|
20
20
|
|
21
21
|
|
22
22
|
|
@@ -44,6 +44,8 @@ _SAVEARTIFACTPATHREQUEST = DESCRIPTOR.message_types_by_name['SaveArtifactPathReq
|
|
44
44
|
_SAVEARTIFACTPATHRESPONSE = DESCRIPTOR.message_types_by_name['SaveArtifactPathResponse']
|
45
45
|
_LISTBUILDARTIFACTSREQUEST = DESCRIPTOR.message_types_by_name['ListBuildArtifactsRequest']
|
46
46
|
_LISTBUILDARTIFACTSRESPONSE = DESCRIPTOR.message_types_by_name['ListBuildArtifactsResponse']
|
47
|
+
_DETACHBUILDSFROMMODELVERSIONSREQUEST = DESCRIPTOR.message_types_by_name['DetachBuildsFromModelVersionsRequest']
|
48
|
+
_DETACHBUILDSFROMMODELVERSIONSRESPONSE = DESCRIPTOR.message_types_by_name['DetachBuildsFromModelVersionsResponse']
|
47
49
|
BuildModelRequest = _reflection.GeneratedProtocolMessageType('BuildModelRequest', (_message.Message,), {
|
48
50
|
'DESCRIPTOR' : _BUILDMODELREQUEST,
|
49
51
|
'__module__' : 'qwak.builds.builds_orchestrator_service_pb2'
|
@@ -214,6 +216,20 @@ ListBuildArtifactsResponse = _reflection.GeneratedProtocolMessageType('ListBuild
|
|
214
216
|
})
|
215
217
|
_sym_db.RegisterMessage(ListBuildArtifactsResponse)
|
216
218
|
|
219
|
+
DetachBuildsFromModelVersionsRequest = _reflection.GeneratedProtocolMessageType('DetachBuildsFromModelVersionsRequest', (_message.Message,), {
|
220
|
+
'DESCRIPTOR' : _DETACHBUILDSFROMMODELVERSIONSREQUEST,
|
221
|
+
'__module__' : 'qwak.builds.builds_orchestrator_service_pb2'
|
222
|
+
# @@protoc_insertion_point(class_scope:qwak.builds.orchestrator.DetachBuildsFromModelVersionsRequest)
|
223
|
+
})
|
224
|
+
_sym_db.RegisterMessage(DetachBuildsFromModelVersionsRequest)
|
225
|
+
|
226
|
+
DetachBuildsFromModelVersionsResponse = _reflection.GeneratedProtocolMessageType('DetachBuildsFromModelVersionsResponse', (_message.Message,), {
|
227
|
+
'DESCRIPTOR' : _DETACHBUILDSFROMMODELVERSIONSRESPONSE,
|
228
|
+
'__module__' : 'qwak.builds.builds_orchestrator_service_pb2'
|
229
|
+
# @@protoc_insertion_point(class_scope:qwak.builds.orchestrator.DetachBuildsFromModelVersionsResponse)
|
230
|
+
})
|
231
|
+
_sym_db.RegisterMessage(DetachBuildsFromModelVersionsResponse)
|
232
|
+
|
217
233
|
_BUILDSORCHESTRATORSERVICE = DESCRIPTOR.services_by_name['BuildsOrchestratorService']
|
218
234
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
219
235
|
|
@@ -275,6 +291,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
275
291
|
_LISTBUILDARTIFACTSREQUEST._serialized_end=2163
|
276
292
|
_LISTBUILDARTIFACTSRESPONSE._serialized_start=2165
|
277
293
|
_LISTBUILDARTIFACTSRESPONSE._serialized_end=2253
|
278
|
-
|
279
|
-
|
294
|
+
_DETACHBUILDSFROMMODELVERSIONSREQUEST._serialized_start=2255
|
295
|
+
_DETACHBUILDSFROMMODELVERSIONSREQUEST._serialized_end=2320
|
296
|
+
_DETACHBUILDSFROMMODELVERSIONSRESPONSE._serialized_start=2322
|
297
|
+
_DETACHBUILDSFROMMODELVERSIONSRESPONSE._serialized_end=2361
|
298
|
+
_BUILDSORCHESTRATORSERVICE._serialized_start=2364
|
299
|
+
_BUILDSORCHESTRATORSERVICE._serialized_end=3886
|
280
300
|
# @@protoc_insertion_point(module_scope)
|
@@ -417,3 +417,28 @@ class ListBuildArtifactsResponse(google.protobuf.message.Message):
|
|
417
417
|
def ClearField(self, field_name: typing_extensions.Literal["artifacts", b"artifacts"]) -> None: ...
|
418
418
|
|
419
419
|
global___ListBuildArtifactsResponse = ListBuildArtifactsResponse
|
420
|
+
|
421
|
+
class DetachBuildsFromModelVersionsRequest(google.protobuf.message.Message):
|
422
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
423
|
+
|
424
|
+
MODEL_VERSION_IDS_FIELD_NUMBER: builtins.int
|
425
|
+
@property
|
426
|
+
def model_version_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
427
|
+
"""The model versions to detach"""
|
428
|
+
def __init__(
|
429
|
+
self,
|
430
|
+
*,
|
431
|
+
model_version_ids: collections.abc.Iterable[builtins.str] | None = ...,
|
432
|
+
) -> None: ...
|
433
|
+
def ClearField(self, field_name: typing_extensions.Literal["model_version_ids", b"model_version_ids"]) -> None: ...
|
434
|
+
|
435
|
+
global___DetachBuildsFromModelVersionsRequest = DetachBuildsFromModelVersionsRequest
|
436
|
+
|
437
|
+
class DetachBuildsFromModelVersionsResponse(google.protobuf.message.Message):
|
438
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
439
|
+
|
440
|
+
def __init__(
|
441
|
+
self,
|
442
|
+
) -> None: ...
|
443
|
+
|
444
|
+
global___DetachBuildsFromModelVersionsResponse = DetachBuildsFromModelVersionsResponse
|
@@ -64,6 +64,11 @@ class BuildsOrchestratorServiceStub(object):
|
|
64
64
|
request_serializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.ListBuildArtifactsRequest.SerializeToString,
|
65
65
|
response_deserializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.ListBuildArtifactsResponse.FromString,
|
66
66
|
)
|
67
|
+
self.DetachBuildsFromModelVersions = channel.unary_unary(
|
68
|
+
'/qwak.builds.orchestrator.BuildsOrchestratorService/DetachBuildsFromModelVersions',
|
69
|
+
request_serializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsRequest.SerializeToString,
|
70
|
+
response_deserializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsResponse.FromString,
|
71
|
+
)
|
67
72
|
|
68
73
|
|
69
74
|
class BuildsOrchestratorServiceServicer(object):
|
@@ -139,6 +144,12 @@ class BuildsOrchestratorServiceServicer(object):
|
|
139
144
|
context.set_details('Method not implemented!')
|
140
145
|
raise NotImplementedError('Method not implemented!')
|
141
146
|
|
147
|
+
def DetachBuildsFromModelVersions(self, request, context):
|
148
|
+
"""Missing associated documentation comment in .proto file."""
|
149
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
150
|
+
context.set_details('Method not implemented!')
|
151
|
+
raise NotImplementedError('Method not implemented!')
|
152
|
+
|
142
153
|
|
143
154
|
def add_BuildsOrchestratorServiceServicer_to_server(servicer, server):
|
144
155
|
rpc_method_handlers = {
|
@@ -192,6 +203,11 @@ def add_BuildsOrchestratorServiceServicer_to_server(servicer, server):
|
|
192
203
|
request_deserializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.ListBuildArtifactsRequest.FromString,
|
193
204
|
response_serializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.ListBuildArtifactsResponse.SerializeToString,
|
194
205
|
),
|
206
|
+
'DetachBuildsFromModelVersions': grpc.unary_unary_rpc_method_handler(
|
207
|
+
servicer.DetachBuildsFromModelVersions,
|
208
|
+
request_deserializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsRequest.FromString,
|
209
|
+
response_serializer=qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsResponse.SerializeToString,
|
210
|
+
),
|
195
211
|
}
|
196
212
|
generic_handler = grpc.method_handlers_generic_handler(
|
197
213
|
'qwak.builds.orchestrator.BuildsOrchestratorService', rpc_method_handlers)
|
@@ -371,3 +387,20 @@ class BuildsOrchestratorService(object):
|
|
371
387
|
qwak_dot_builds_dot_builds__orchestrator__service__pb2.ListBuildArtifactsResponse.FromString,
|
372
388
|
options, channel_credentials,
|
373
389
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
390
|
+
|
391
|
+
@staticmethod
|
392
|
+
def DetachBuildsFromModelVersions(request,
|
393
|
+
target,
|
394
|
+
options=(),
|
395
|
+
channel_credentials=None,
|
396
|
+
call_credentials=None,
|
397
|
+
insecure=False,
|
398
|
+
compression=None,
|
399
|
+
wait_for_ready=None,
|
400
|
+
timeout=None,
|
401
|
+
metadata=None):
|
402
|
+
return grpc.experimental.unary_unary(request, target, '/qwak.builds.orchestrator.BuildsOrchestratorService/DetachBuildsFromModelVersions',
|
403
|
+
qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsRequest.SerializeToString,
|
404
|
+
qwak_dot_builds_dot_builds__orchestrator__service__pb2.DetachBuildsFromModelVersionsResponse.FromString,
|
405
|
+
options, channel_credentials,
|
406
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
qwak/__init__.py
CHANGED
@@ -49,12 +49,10 @@ class InstanceTemplateManagementClient:
|
|
49
49
|
|
50
50
|
def list_instance_templates(self) -> List[InstanceTemplateSpec]:
|
51
51
|
try:
|
52
|
-
result: ListInstanceTemplatesResponse = (
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
instance_type_filter=InstanceTypeFilter.INSTANCE_TYPE_FILTER_ALL
|
57
|
-
)
|
52
|
+
result: ListInstanceTemplatesResponse = self._instance_template_service.ListInstanceTemplates(
|
53
|
+
ListInstanceTemplatesRequest(
|
54
|
+
optional_instance_filter=InstanceFilter(
|
55
|
+
instance_type_filter=InstanceTypeFilter.INSTANCE_TYPE_FILTER_ALL
|
58
56
|
)
|
59
57
|
)
|
60
58
|
)
|
@@ -44,10 +44,10 @@ class ModelDescriptorMapper:
|
|
44
44
|
model_id: str, openai_chat_params: ProtoOpenAIChatModelParams
|
45
45
|
) -> OpenAIChat:
|
46
46
|
p = openai_chat_params
|
47
|
-
_tool_choice: Union[
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
_tool_choice: Union[
|
48
|
+
str, ChatCompletionNamedToolChoiceParam
|
49
|
+
] = ModelDescriptorMapper._from_tool_choice(
|
50
|
+
openai_chat_params=openai_chat_params
|
51
51
|
)
|
52
52
|
_tools: List[ChatCompletionToolParam] = []
|
53
53
|
|
@@ -57,23 +57,21 @@ class ModelDescriptorMapper:
|
|
57
57
|
|
58
58
|
return OpenAIChat(
|
59
59
|
model_id=model_id,
|
60
|
-
frequency_penalty=
|
61
|
-
|
62
|
-
|
63
|
-
logit_bias=(
|
64
|
-
|
65
|
-
|
66
|
-
else None
|
67
|
-
),
|
60
|
+
frequency_penalty=p.frequency_penalty
|
61
|
+
if p.HasField("frequency_penalty")
|
62
|
+
else None,
|
63
|
+
logit_bias={k: int(v) for k, v in p.logit_bias.items()}
|
64
|
+
if p.HasField("logit_bias")
|
65
|
+
else None,
|
68
66
|
logprobs=p.logprobs if p.HasField("logprobs") else None,
|
69
67
|
max_tokens=p.max_tokens if p.HasField("max_tokens") else None,
|
70
68
|
n=p.n if p.HasField("n") else None,
|
71
|
-
presence_penalty=
|
72
|
-
|
73
|
-
|
74
|
-
response_format=
|
75
|
-
|
76
|
-
|
69
|
+
presence_penalty=p.presence_penalty
|
70
|
+
if p.HasField("presence_penalty")
|
71
|
+
else None,
|
72
|
+
response_format=p.response_format
|
73
|
+
if p.HasField("response_format")
|
74
|
+
else None, # noqa
|
77
75
|
seed=p.seed if p.HasField("seed") else None,
|
78
76
|
stop=[_ for _ in p.stop] if p.HasField("stop") else None,
|
79
77
|
temperature=p.temperature if p.HasField("temperature") else None,
|
@@ -152,9 +150,9 @@ class ModelDescriptorMapper:
|
|
152
150
|
max_tokens=d.max_tokens,
|
153
151
|
n=d.n,
|
154
152
|
presence_penalty=d.presence_penalty,
|
155
|
-
response_format=
|
156
|
-
|
157
|
-
|
153
|
+
response_format=d.response_format
|
154
|
+
if d.response_format
|
155
|
+
else None, # noqa
|
158
156
|
seed=d.seed,
|
159
157
|
stop=stop_list_value if d.stop else None,
|
160
158
|
temperature=d.temperature,
|
@@ -45,9 +45,9 @@ class ArtifactsUploader:
|
|
45
45
|
featureset_name: str,
|
46
46
|
__instance_module_path__: str,
|
47
47
|
) -> Optional[ArtifactSpec]:
|
48
|
-
transformation_functions: Optional[
|
49
|
-
|
50
|
-
)
|
48
|
+
transformation_functions: Optional[
|
49
|
+
List[Callable[..., Any]]
|
50
|
+
] = transformation.get_functions()
|
51
51
|
if transformation_functions is not None and transformation_functions:
|
52
52
|
return ArtifactSpec(
|
53
53
|
artifact_name=featureset_name,
|
@@ -63,10 +63,10 @@ class BaseSource(ABC):
|
|
63
63
|
uploaded_artifact_url = self._upload_artifact()
|
64
64
|
|
65
65
|
if source_definition_path:
|
66
|
-
presign_url: (
|
67
|
-
|
68
|
-
|
69
|
-
|
66
|
+
presign_url: str = (
|
67
|
+
FeatureRegistryClient().get_datasource_source_code_presign_url(
|
68
|
+
ds_name=self.name
|
69
|
+
)
|
70
70
|
)
|
71
71
|
source_code_spec: SourceCodeSpec = (
|
72
72
|
SourceCodeSpecFactory.get_zip_source_code_spec(
|
@@ -118,9 +118,9 @@ class AthenaSource(JdbcSource):
|
|
118
118
|
)
|
119
119
|
)
|
120
120
|
|
121
|
-
time_partition_columns: Optional[
|
122
|
-
|
123
|
-
)
|
121
|
+
time_partition_columns: Optional[
|
122
|
+
TimePartitionColumns
|
123
|
+
] = AthenaSource._extract_partition_column(proto_athena_source)
|
124
124
|
workgroup: Optional[str] = (
|
125
125
|
proto_athena_source.workgroup
|
126
126
|
if proto_athena_source.HasField("workgroup")
|
@@ -120,9 +120,9 @@ def feature_set(
|
|
120
120
|
offline_scheduling_policy=offline_scheduling_policy,
|
121
121
|
)
|
122
122
|
|
123
|
-
streaming_backfill: Optional[
|
124
|
-
StreamingBackfill
|
125
|
-
)
|
123
|
+
streaming_backfill: Optional[
|
124
|
+
StreamingBackfill
|
125
|
+
] = StreamingBackfill.get_streaming_backfill_from_function(function=function)
|
126
126
|
|
127
127
|
fs_name = name or function.__name__
|
128
128
|
streaming_feature_set = StreamingFeatureSet(
|
@@ -218,7 +218,7 @@ class StreamingBackfill:
|
|
218
218
|
|
219
219
|
@staticmethod
|
220
220
|
def _get_normalized_backfill_sources_spec(
|
221
|
-
data_sources: Union[List[str], List[DataSourceBackfillSpec]]
|
221
|
+
data_sources: Union[List[str], List[DataSourceBackfillSpec]]
|
222
222
|
) -> List[DataSourceBackfillSpec]:
|
223
223
|
# reformat all data source specs to 'DataSourceBackfillSpec'
|
224
224
|
return [
|
@@ -182,12 +182,12 @@ class OnlineClient:
|
|
182
182
|
)
|
183
183
|
ordered_entities = [entity[0] for entity in ordered_entities_tuple]
|
184
184
|
|
185
|
-
request_chunks: List[
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
185
|
+
request_chunks: List[
|
186
|
+
Tuple[RequestedEntitiesMatrix, pd.DataFrame]
|
187
|
+
] = OnlineClient._split_entities(
|
188
|
+
entity_names=ordered_entities,
|
189
|
+
population_df=df,
|
190
|
+
max_entities_per_split=max_keys_per_request,
|
191
191
|
)
|
192
192
|
|
193
193
|
results: List[pd.DataFrame] = []
|
@@ -25,7 +25,7 @@ class StreamingSinkFactory:
|
|
25
25
|
def get_streaming_sink(proto_streaming_sink: ProtoStreamingSink) -> BaseSink:
|
26
26
|
sink_type = proto_streaming_sink.WhichOneof("sink_type")
|
27
27
|
|
28
|
-
auth_conf: BaseAuthentication
|
28
|
+
auth_conf: BaseAuthentication
|
29
29
|
if sink_type == "kafka_sink":
|
30
30
|
proto_kafka_sink: ProtoKafkaSink = proto_streaming_sink.kafka_sink
|
31
31
|
auth_configuration: BaseAuthentication = cast(
|
@@ -163,9 +163,9 @@ def make_ssh_key_file(git_ssh_key: str) -> str:
|
|
163
163
|
|
164
164
|
|
165
165
|
def add_ssh_file_to_env(ssh_key_file_path: str) -> None:
|
166
|
-
os.environ[
|
167
|
-
|
168
|
-
|
166
|
+
os.environ[
|
167
|
+
"GIT_SSH_COMMAND"
|
168
|
+
] = f"ssh -i {ssh_key_file_path} -o StrictHostKeyChecking=no"
|
169
169
|
os.environ["GIT_SSH"] = f"ssh -i {ssh_key_file_path} -o StrictHostKeyChecking=no"
|
170
170
|
|
171
171
|
|
@@ -26,9 +26,9 @@ class OpenAIProvider:
|
|
26
26
|
self.client = OpenAIClient()
|
27
27
|
|
28
28
|
def _get_random_openai_api_key(self) -> Optional[str]:
|
29
|
-
openai_api_keys: List[
|
30
|
-
|
31
|
-
)
|
29
|
+
openai_api_keys: List[
|
30
|
+
OpenAIApiKeySystemSecret
|
31
|
+
] = IntegrationUtils().get_openai_api_keys()
|
32
32
|
if len(openai_api_keys) == 0:
|
33
33
|
return None
|
34
34
|
|
@@ -46,7 +46,7 @@ def get_output_adapter(
|
|
46
46
|
|
47
47
|
first_result = (
|
48
48
|
return_result[0]
|
49
|
-
if
|
49
|
+
if type(return_result) == list and len(return_result) > 0
|
50
50
|
else return_result
|
51
51
|
)
|
52
52
|
if issubclass(type(first_result), Message):
|
@@ -30,19 +30,15 @@ def validate_and_sanitize_features_name(
|
|
30
30
|
ecosystem_utils = EcosystemUtils()
|
31
31
|
current_env_name = ecosystem_utils.get_current_environment_name()
|
32
32
|
return [
|
33
|
-
(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
feature.name, current_env_name
|
40
|
-
),
|
41
|
-
),
|
42
|
-
)
|
43
|
-
if isinstance(feature, FeatureStoreInput)
|
44
|
-
else feature
|
33
|
+
cast(
|
34
|
+
FeatureStoreInput,
|
35
|
+
dataclasses.replace(
|
36
|
+
feature,
|
37
|
+
name=validate_and_sanitize_feature_name(feature.name, current_env_name),
|
38
|
+
),
|
45
39
|
)
|
40
|
+
if isinstance(feature, FeatureStoreInput)
|
41
|
+
else feature
|
46
42
|
for feature in features
|
47
43
|
]
|
48
44
|
|
@@ -92,13 +92,13 @@ def load_file(
|
|
92
92
|
)
|
93
93
|
|
94
94
|
model_id = validate_model(model_id)
|
95
|
-
download_url_response: (
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
95
|
+
download_url_response: GetBuildVersioningDownloadURLResponse = (
|
96
|
+
BuildOrchestratorClient().get_build_versioning_download_url(
|
97
|
+
build_id=build_id,
|
98
|
+
model_id=model_id,
|
99
|
+
tag=tag,
|
100
|
+
tag_type=BuildVersioningTagsType.FILE_TAG_TYPE,
|
101
|
+
)
|
102
102
|
)
|
103
103
|
|
104
104
|
try:
|
qwak/tools/logger/logger.py
CHANGED
@@ -275,7 +275,7 @@ def set_file_handler_log_file(
|
|
275
275
|
logger: logging.Logger, handler_name: str, log_file: Path
|
276
276
|
):
|
277
277
|
existing_handler = get_handler_from_logger(logger, handler_name)
|
278
|
-
if
|
278
|
+
if type(existing_handler) != RotatingFileHandler:
|
279
279
|
raise QwakException(
|
280
280
|
f"Error in setting log file. Error message: handler of name {handler_name} is not a file logger handler"
|
281
281
|
)
|
@@ -0,0 +1,53 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: qwak-core
|
3
|
+
Version: 0.4.268
|
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
|
+
Provides-Extra: local-core-dependencies
|
22
|
+
Requires-Dist: PyYAML
|
23
|
+
Requires-Dist: cachetools
|
24
|
+
Requires-Dist: chevron (==0.14.0)
|
25
|
+
Requires-Dist: cloudpickle (==2.2.1) ; extra == "feature-store"
|
26
|
+
Requires-Dist: dacite (==1.8.1)
|
27
|
+
Requires-Dist: dependency-injector (>=4.0)
|
28
|
+
Requires-Dist: filelock
|
29
|
+
Requires-Dist: frogml-storage (>=0.11.2)
|
30
|
+
Requires-Dist: grpcio (>=1.57.0)
|
31
|
+
Requires-Dist: grpcio-tools (>=1.47.0) ; (python_full_version >= "3.7.1" and python_version < "3.10") and (extra == "local-core-dependencies")
|
32
|
+
Requires-Dist: grpcio-tools (>=1.56.2) ; (python_version >= "3.10") and (extra == "local-core-dependencies")
|
33
|
+
Requires-Dist: joblib (>=1.3.2,<2.0.0)
|
34
|
+
Requires-Dist: marshmallow-dataclass (>=8.5.8,<9.0.0)
|
35
|
+
Requires-Dist: mypy-protobuf (>=3.0.0,<4.0.0) ; extra == "local-core-dependencies"
|
36
|
+
Requires-Dist: protobuf (>=3.10,<4) ; python_full_version >= "3.7.1" and python_version < "3.10"
|
37
|
+
Requires-Dist: protobuf (>=4.21.6) ; python_version >= "3.10"
|
38
|
+
Requires-Dist: pyarrow (>=6.0.0) ; extra == "feature-store"
|
39
|
+
Requires-Dist: pyathena (>=2.2.0,!=2.18.0) ; extra == "feature-store"
|
40
|
+
Requires-Dist: pyspark (==3.4.2) ; extra == "feature-store"
|
41
|
+
Requires-Dist: python-jose[cryptography] (>=3.4.0)
|
42
|
+
Requires-Dist: python-json-logger (>=2.0.2)
|
43
|
+
Requires-Dist: requests
|
44
|
+
Requires-Dist: retrying (==1.3.4)
|
45
|
+
Requires-Dist: typeguard (>=2,<3)
|
46
|
+
Project-URL: Home page, https://www.qwak.com/
|
47
|
+
Description-Content-Type: text/markdown
|
48
|
+
|
49
|
+
# Qwak Core
|
50
|
+
|
51
|
+
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.
|
52
|
+
Qwak Core contains all the objects and tools necessary to use the Qwak Platform
|
53
|
+
|