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.
Files changed (55) hide show
  1. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +23 -3
  2. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +25 -0
  3. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +33 -0
  4. qwak/__init__.py +1 -1
  5. qwak/clients/instance_template/client.py +4 -6
  6. qwak/clients/prompt_manager/model_descriptor_mapper.py +19 -21
  7. qwak/feature_store/_common/artifact_utils.py +3 -3
  8. qwak/feature_store/data_sources/base.py +4 -4
  9. qwak/feature_store/data_sources/batch/athena.py +3 -3
  10. qwak/feature_store/feature_sets/streaming.py +3 -3
  11. qwak/feature_store/feature_sets/streaming_backfill.py +1 -1
  12. qwak/feature_store/online/client.py +6 -6
  13. qwak/feature_store/sinks/streaming/factory.py +1 -1
  14. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
  15. qwak/llmops/provider/openai/provider.py +3 -3
  16. qwak/model/tools/adapters/output.py +1 -1
  17. qwak/model/utils/feature_utils.py +8 -12
  18. qwak/model_loggers/artifact_logger.py +7 -7
  19. qwak/tools/logger/logger.py +1 -1
  20. qwak_core-0.4.268.dist-info/METADATA +53 -0
  21. {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/RECORD +22 -54
  22. frogml_storage/__init__.py +0 -0
  23. frogml_storage/_artifactory_api.py +0 -315
  24. frogml_storage/_environment.py +0 -22
  25. frogml_storage/_log_config.py +0 -45
  26. frogml_storage/_storage_utils.py +0 -15
  27. frogml_storage/_utils.py +0 -69
  28. frogml_storage/authentication/_authentication_utils.py +0 -259
  29. frogml_storage/authentication/models/_auth_config.py +0 -70
  30. frogml_storage/cli/_frogml_cli.py +0 -40
  31. frogml_storage/cli/_login_cli.py +0 -240
  32. frogml_storage/cli/commands/_login_command.py +0 -74
  33. frogml_storage/cli/models/_cli_login_arguments.py +0 -22
  34. frogml_storage/cli/utils/_cli_utils.py +0 -19
  35. frogml_storage/cli/utils/_login_checks_utility.py +0 -114
  36. frogml_storage/constants.py +0 -56
  37. frogml_storage/dataset_manifest.py +0 -13
  38. frogml_storage/entity_manifest.py +0 -93
  39. frogml_storage/exceptions/checksum_verification_error.py +0 -3
  40. frogml_storage/exceptions/validation_error.py +0 -4
  41. frogml_storage/frog_ml.py +0 -668
  42. frogml_storage/frogml_entity_type_info.py +0 -46
  43. frogml_storage/http/__init__.py +0 -0
  44. frogml_storage/http/http_client.py +0 -83
  45. frogml_storage/model_manifest.py +0 -60
  46. frogml_storage/models/_download_context.py +0 -54
  47. frogml_storage/models/frogml_dataset_version.py +0 -21
  48. frogml_storage/models/frogml_entity_version.py +0 -34
  49. frogml_storage/models/frogml_model_version.py +0 -21
  50. frogml_storage/serialization_metadata.py +0 -15
  51. frogml_storage/storage.py +0 -140
  52. frogml_storage/utils/_input_checks_utility.py +0 -104
  53. qwak_core-0.4.266.dist-info/METADATA +0 -419
  54. qwak_core-0.4.266.dist-info/entry_points.txt +0 -3
  55. {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.BuildArtifact2\xcf\n\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.ListBuildArtifactsResponseB\'\n#com.qwak.ai.builds.orchestrator.apiP\x01\x62\x06proto3')
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
- _BUILDSORCHESTRATORSERVICE._serialized_start=2256
279
- _BUILDSORCHESTRATORSERVICE._serialized_end=3615
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
@@ -1,7 +1,7 @@
1
1
  """Top-level package for qwak-core."""
2
2
 
3
3
  __author__ = "Qwak.ai"
4
- __version__ = "0.4.266"
4
+ __version__ = "0.4.268"
5
5
 
6
6
  from qwak.inner.di_configuration import wire_dependencies
7
7
  from qwak.model.experiment_tracking import log_metric, log_param
@@ -49,12 +49,10 @@ class InstanceTemplateManagementClient:
49
49
 
50
50
  def list_instance_templates(self) -> List[InstanceTemplateSpec]:
51
51
  try:
52
- result: ListInstanceTemplatesResponse = (
53
- self._instance_template_service.ListInstanceTemplates(
54
- ListInstanceTemplatesRequest(
55
- optional_instance_filter=InstanceFilter(
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[str, ChatCompletionNamedToolChoiceParam] = (
48
- ModelDescriptorMapper._from_tool_choice(
49
- openai_chat_params=openai_chat_params
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
- p.frequency_penalty if p.HasField("frequency_penalty") else None
62
- ),
63
- logit_bias=(
64
- {k: int(v) for k, v in p.logit_bias.items()}
65
- if p.HasField("logit_bias")
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
- p.presence_penalty if p.HasField("presence_penalty") else None
73
- ),
74
- response_format=(
75
- p.response_format if p.HasField("response_format") else None
76
- ), # noqa
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
- d.response_format if d.response_format else None
157
- ), # noqa
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[List[Callable[..., Any]]] = (
49
- transformation.get_functions()
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
- str
68
- ) = FeatureRegistryClient().get_datasource_source_code_presign_url(
69
- ds_name=self.name
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[TimePartitionColumns] = (
122
- AthenaSource._extract_partition_column(proto_athena_source)
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[StreamingBackfill] = (
124
- StreamingBackfill.get_streaming_backfill_from_function(function=function)
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[Tuple[RequestedEntitiesMatrix, pd.DataFrame]] = (
186
- OnlineClient._split_entities(
187
- entity_names=ordered_entities,
188
- population_df=df,
189
- max_entities_per_split=max_keys_per_request,
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 # noqa: F842
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["GIT_SSH_COMMAND"] = (
167
- f"ssh -i {ssh_key_file_path} -o StrictHostKeyChecking=no"
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[OpenAIApiKeySystemSecret] = (
30
- IntegrationUtils().get_openai_api_keys()
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 isinstance(return_result, list) and len(return_result) > 0
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
- cast(
35
- FeatureStoreInput,
36
- dataclasses.replace(
37
- feature,
38
- name=validate_and_sanitize_feature_name(
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
- GetBuildVersioningDownloadURLResponse
97
- ) = BuildOrchestratorClient().get_build_versioning_download_url(
98
- build_id=build_id,
99
- model_id=model_id,
100
- tag=tag,
101
- tag_type=BuildVersioningTagsType.FILE_TAG_TYPE,
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:
@@ -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 not isinstance(existing_handler, RotatingFileHandler):
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
+