qwak-core 0.4.273__py3-none-any.whl → 0.4.275__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.
@@ -16,12 +16,14 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
16
16
  from _qwak_proto.qwak.model_group import model_group_repository_details_pb2 as qwak_dot_model__group_dot_model__group__repository__details__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"qwak/model_group/model_group.proto\x12\x1cqwak.model_groups.management\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x35qwak/model_group/model_group_repository_details.proto\"Y\n\"CreateIfNotExistsModelGroupRequest\x12\x18\n\x10model_group_name\x18\x01 \x01(\t\x12\x19\n\x11jfrog_project_key\x18\x02 \x01(\t\"\xdf\x01\n\x1bModelGroupBriefInfoResponse\x12\x16\n\x0emodel_group_id\x18\x01 \x01(\t\x12\x1f\n\x17model_group_description\x18\x02 \x01(\t\x12:\n\x16model_group_created_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x12repository_details\x18\x04 \x03(\x0b\x32/.qwak.model_groups.management.RepositoryDetails2\xba\x01\n\x1bModelGroupManagementService\x12\x9a\x01\n\x1b\x43reateIfNotExistsModelGroup\x12@.qwak.model_groups.management.CreateIfNotExistsModelGroupRequest\x1a\x39.qwak.model_groups.management.ModelGroupBriefInfoResponseBL\n&com.qwak.ai.management.model.group.apiB ModelGroupManagementServiceProtoP\x01\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"qwak/model_group/model_group.proto\x12\x1cqwak.model_groups.management\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x35qwak/model_group/model_group_repository_details.proto\"Y\n\"CreateIfNotExistsModelGroupRequest\x12\x18\n\x10model_group_name\x18\x01 \x01(\t\x12\x19\n\x11jfrog_project_key\x18\x02 \x01(\t\"\xdf\x01\n\x1bModelGroupBriefInfoResponse\x12\x16\n\x0emodel_group_id\x18\x01 \x01(\t\x12\x1f\n\x17model_group_description\x18\x02 \x01(\t\x12:\n\x16model_group_created_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12K\n\x12repository_details\x18\x04 \x03(\x0b\x32/.qwak.model_groups.management.RepositoryDetails\"\x95\x01\n&CreateRepositoriesForModelGroupRequest\x12\x18\n\x10model_group_uuid\x18\x01 \x01(\t\x12Q\n\x12repository_details\x18\x02 \x03(\x0b\x32\x35.qwak.model_groups.management.RemoteRepositoryDetails\"\x82\x01\n\'CreateRepositoriesForModelGroupResponse\x12W\n\x1e\x61rtifactory_repository_details\x18\x01 \x03(\x0b\x32/.qwak.model_groups.management.RepositoryDetails2\xeb\x02\n\x1bModelGroupManagementService\x12\x9a\x01\n\x1b\x43reateIfNotExistsModelGroup\x12@.qwak.model_groups.management.CreateIfNotExistsModelGroupRequest\x1a\x39.qwak.model_groups.management.ModelGroupBriefInfoResponse\x12\xae\x01\n\x1f\x43reateRepositoriesForModelGroup\x12\x44.qwak.model_groups.management.CreateRepositoriesForModelGroupRequest\x1a\x45.qwak.model_groups.management.CreateRepositoriesForModelGroupResponseBL\n&com.qwak.ai.management.model.group.apiB ModelGroupManagementServiceProtoP\x01\x62\x06proto3')
20
20
 
21
21
 
22
22
 
23
23
  _CREATEIFNOTEXISTSMODELGROUPREQUEST = DESCRIPTOR.message_types_by_name['CreateIfNotExistsModelGroupRequest']
24
24
  _MODELGROUPBRIEFINFORESPONSE = DESCRIPTOR.message_types_by_name['ModelGroupBriefInfoResponse']
25
+ _CREATEREPOSITORIESFORMODELGROUPREQUEST = DESCRIPTOR.message_types_by_name['CreateRepositoriesForModelGroupRequest']
26
+ _CREATEREPOSITORIESFORMODELGROUPRESPONSE = DESCRIPTOR.message_types_by_name['CreateRepositoriesForModelGroupResponse']
25
27
  CreateIfNotExistsModelGroupRequest = _reflection.GeneratedProtocolMessageType('CreateIfNotExistsModelGroupRequest', (_message.Message,), {
26
28
  'DESCRIPTOR' : _CREATEIFNOTEXISTSMODELGROUPREQUEST,
27
29
  '__module__' : 'qwak.model_group.model_group_pb2'
@@ -36,6 +38,20 @@ ModelGroupBriefInfoResponse = _reflection.GeneratedProtocolMessageType('ModelGro
36
38
  })
37
39
  _sym_db.RegisterMessage(ModelGroupBriefInfoResponse)
38
40
 
41
+ CreateRepositoriesForModelGroupRequest = _reflection.GeneratedProtocolMessageType('CreateRepositoriesForModelGroupRequest', (_message.Message,), {
42
+ 'DESCRIPTOR' : _CREATEREPOSITORIESFORMODELGROUPREQUEST,
43
+ '__module__' : 'qwak.model_group.model_group_pb2'
44
+ # @@protoc_insertion_point(class_scope:qwak.model_groups.management.CreateRepositoriesForModelGroupRequest)
45
+ })
46
+ _sym_db.RegisterMessage(CreateRepositoriesForModelGroupRequest)
47
+
48
+ CreateRepositoriesForModelGroupResponse = _reflection.GeneratedProtocolMessageType('CreateRepositoriesForModelGroupResponse', (_message.Message,), {
49
+ 'DESCRIPTOR' : _CREATEREPOSITORIESFORMODELGROUPRESPONSE,
50
+ '__module__' : 'qwak.model_group.model_group_pb2'
51
+ # @@protoc_insertion_point(class_scope:qwak.model_groups.management.CreateRepositoriesForModelGroupResponse)
52
+ })
53
+ _sym_db.RegisterMessage(CreateRepositoriesForModelGroupResponse)
54
+
39
55
  _MODELGROUPMANAGEMENTSERVICE = DESCRIPTOR.services_by_name['ModelGroupManagementService']
40
56
  if _descriptor._USE_C_DESCRIPTORS == False:
41
57
 
@@ -45,6 +61,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
45
61
  _CREATEIFNOTEXISTSMODELGROUPREQUEST._serialized_end=245
46
62
  _MODELGROUPBRIEFINFORESPONSE._serialized_start=248
47
63
  _MODELGROUPBRIEFINFORESPONSE._serialized_end=471
48
- _MODELGROUPMANAGEMENTSERVICE._serialized_start=474
49
- _MODELGROUPMANAGEMENTSERVICE._serialized_end=660
64
+ _CREATEREPOSITORIESFORMODELGROUPREQUEST._serialized_start=474
65
+ _CREATEREPOSITORIESFORMODELGROUPREQUEST._serialized_end=623
66
+ _CREATEREPOSITORIESFORMODELGROUPRESPONSE._serialized_start=626
67
+ _CREATEREPOSITORIESFORMODELGROUPRESPONSE._serialized_end=756
68
+ _MODELGROUPMANAGEMENTSERVICE._serialized_start=759
69
+ _MODELGROUPMANAGEMENTSERVICE._serialized_end=1122
50
70
  # @@protoc_insertion_point(module_scope)
@@ -66,3 +66,39 @@ class ModelGroupBriefInfoResponse(google.protobuf.message.Message):
66
66
  def ClearField(self, field_name: typing_extensions.Literal["model_group_created_at", b"model_group_created_at", "model_group_description", b"model_group_description", "model_group_id", b"model_group_id", "repository_details", b"repository_details"]) -> None: ...
67
67
 
68
68
  global___ModelGroupBriefInfoResponse = ModelGroupBriefInfoResponse
69
+
70
+ class CreateRepositoriesForModelGroupRequest(google.protobuf.message.Message):
71
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
72
+
73
+ MODEL_GROUP_UUID_FIELD_NUMBER: builtins.int
74
+ REPOSITORY_DETAILS_FIELD_NUMBER: builtins.int
75
+ model_group_uuid: builtins.str
76
+ """the model group UUID for which to create repositories"""
77
+ @property
78
+ def repository_details(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[qwak.model_group.model_group_repository_details_pb2.RemoteRepositoryDetails]:
79
+ """List of remote repository details to create for the model group"""
80
+ def __init__(
81
+ self,
82
+ *,
83
+ model_group_uuid: builtins.str = ...,
84
+ repository_details: collections.abc.Iterable[qwak.model_group.model_group_repository_details_pb2.RemoteRepositoryDetails] | None = ...,
85
+ ) -> None: ...
86
+ def ClearField(self, field_name: typing_extensions.Literal["model_group_uuid", b"model_group_uuid", "repository_details", b"repository_details"]) -> None: ...
87
+
88
+ global___CreateRepositoriesForModelGroupRequest = CreateRepositoriesForModelGroupRequest
89
+
90
+ class CreateRepositoriesForModelGroupResponse(google.protobuf.message.Message):
91
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
92
+
93
+ ARTIFACTORY_REPOSITORY_DETAILS_FIELD_NUMBER: builtins.int
94
+ @property
95
+ def artifactory_repository_details(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[qwak.model_group.model_group_repository_details_pb2.RepositoryDetails]:
96
+ """List of repository details associated with this model group"""
97
+ def __init__(
98
+ self,
99
+ *,
100
+ artifactory_repository_details: collections.abc.Iterable[qwak.model_group.model_group_repository_details_pb2.RepositoryDetails] | None = ...,
101
+ ) -> None: ...
102
+ def ClearField(self, field_name: typing_extensions.Literal["artifactory_repository_details", b"artifactory_repository_details"]) -> None: ...
103
+
104
+ global___CreateRepositoriesForModelGroupResponse = CreateRepositoriesForModelGroupResponse
@@ -19,6 +19,11 @@ class ModelGroupManagementServiceStub(object):
19
19
  request_serializer=qwak_dot_model__group_dot_model__group__pb2.CreateIfNotExistsModelGroupRequest.SerializeToString,
20
20
  response_deserializer=qwak_dot_model__group_dot_model__group__pb2.ModelGroupBriefInfoResponse.FromString,
21
21
  )
22
+ self.CreateRepositoriesForModelGroup = channel.unary_unary(
23
+ '/qwak.model_groups.management.ModelGroupManagementService/CreateRepositoriesForModelGroup',
24
+ request_serializer=qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupRequest.SerializeToString,
25
+ response_deserializer=qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupResponse.FromString,
26
+ )
22
27
 
23
28
 
24
29
  class ModelGroupManagementServiceServicer(object):
@@ -30,6 +35,12 @@ class ModelGroupManagementServiceServicer(object):
30
35
  context.set_details('Method not implemented!')
31
36
  raise NotImplementedError('Method not implemented!')
32
37
 
38
+ def CreateRepositoriesForModelGroup(self, request, context):
39
+ """Missing associated documentation comment in .proto file."""
40
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
41
+ context.set_details('Method not implemented!')
42
+ raise NotImplementedError('Method not implemented!')
43
+
33
44
 
34
45
  def add_ModelGroupManagementServiceServicer_to_server(servicer, server):
35
46
  rpc_method_handlers = {
@@ -38,6 +49,11 @@ def add_ModelGroupManagementServiceServicer_to_server(servicer, server):
38
49
  request_deserializer=qwak_dot_model__group_dot_model__group__pb2.CreateIfNotExistsModelGroupRequest.FromString,
39
50
  response_serializer=qwak_dot_model__group_dot_model__group__pb2.ModelGroupBriefInfoResponse.SerializeToString,
40
51
  ),
52
+ 'CreateRepositoriesForModelGroup': grpc.unary_unary_rpc_method_handler(
53
+ servicer.CreateRepositoriesForModelGroup,
54
+ request_deserializer=qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupRequest.FromString,
55
+ response_serializer=qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupResponse.SerializeToString,
56
+ ),
41
57
  }
42
58
  generic_handler = grpc.method_handlers_generic_handler(
43
59
  'qwak.model_groups.management.ModelGroupManagementService', rpc_method_handlers)
@@ -64,3 +80,20 @@ class ModelGroupManagementService(object):
64
80
  qwak_dot_model__group_dot_model__group__pb2.ModelGroupBriefInfoResponse.FromString,
65
81
  options, channel_credentials,
66
82
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
83
+
84
+ @staticmethod
85
+ def CreateRepositoriesForModelGroup(request,
86
+ target,
87
+ options=(),
88
+ channel_credentials=None,
89
+ call_credentials=None,
90
+ insecure=False,
91
+ compression=None,
92
+ wait_for_ready=None,
93
+ timeout=None,
94
+ metadata=None):
95
+ return grpc.experimental.unary_unary(request, target, '/qwak.model_groups.management.ModelGroupManagementService/CreateRepositoriesForModelGroup',
96
+ qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupRequest.SerializeToString,
97
+ qwak_dot_model__group_dot_model__group__pb2.CreateRepositoriesForModelGroupResponse.FromString,
98
+ options, channel_credentials,
99
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -12,14 +12,14 @@ from google.protobuf import symbol_database as _symbol_database
12
12
  _sym_db = _symbol_database.Default()
13
13
 
14
14
 
15
- from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
16
15
 
17
16
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n5qwak/model_group/model_group_repository_details.proto\x12\x1cqwak.model_groups.management\x1a\x1fgoogle/protobuf/timestamp.proto\"r\n\x11RepositoryDetails\x12\x45\n\x0frepository_type\x18\x01 \x01(\x0b\x32,.qwak.model_groups.management.RepositoryType\x12\x16\n\x0erepository_key\x18\x02 \x01(\t\"\x12\n\x10\x44ockerRepository\"\x13\n\x11\x44\x61tasetRepository\"\x14\n\x12\x41rtifactRepository\"\x17\n\x15HuggingFaceRepository\"\xdd\x02\n\x0eRepositoryType\x12K\n\x11\x64ocker_repository\x18\x01 \x01(\x0b\x32..qwak.model_groups.management.DockerRepositoryH\x00\x12M\n\x12\x64\x61taset_repository\x18\x02 \x01(\x0b\x32/.qwak.model_groups.management.DatasetRepositoryH\x00\x12O\n\x13\x61rtifact_repository\x18\x03 \x01(\x0b\x32\x30.qwak.model_groups.management.ArtifactRepositoryH\x00\x12V\n\x17hugging_face_repository\x18\x04 \x01(\x0b\x32\x33.qwak.model_groups.management.HuggingFaceRepositoryH\x00\x42\x06\n\x04typeBN\n&com.qwak.ai.management.model.group.apiB\"ModelGroupRepositoriesDetailsProtoP\x01\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n5qwak/model_group/model_group_repository_details.proto\x12\x1cqwak.model_groups.management\"r\n\x11RepositoryDetails\x12\x45\n\x0frepository_type\x18\x01 \x01(\x0b\x32,.qwak.model_groups.management.RepositoryType\x12\x16\n\x0erepository_key\x18\x02 \x01(\t\"\xf0\x01\n\x17RemoteRepositoryDetails\x12K\n\x11\x64ocker_repository\x18\x01 \x01(\x0b\x32..qwak.model_groups.management.DockerRepositoryH\x00\x12V\n\x17hugging_face_repository\x18\x02 \x01(\x0b\x32\x33.qwak.model_groups.management.HuggingFaceRepositoryH\x00\x12\x1d\n\x15repository_remote_url\x18\x03 \x01(\tB\x11\n\x0frepository_type\"\x12\n\x10\x44ockerRepository\"\x13\n\x11\x44\x61tasetRepository\"\x14\n\x12\x41rtifactRepository\"\x17\n\x15HuggingFaceRepository\"\xdd\x02\n\x0eRepositoryType\x12K\n\x11\x64ocker_repository\x18\x01 \x01(\x0b\x32..qwak.model_groups.management.DockerRepositoryH\x00\x12M\n\x12\x64\x61taset_repository\x18\x02 \x01(\x0b\x32/.qwak.model_groups.management.DatasetRepositoryH\x00\x12O\n\x13\x61rtifact_repository\x18\x03 \x01(\x0b\x32\x30.qwak.model_groups.management.ArtifactRepositoryH\x00\x12V\n\x17hugging_face_repository\x18\x04 \x01(\x0b\x32\x33.qwak.model_groups.management.HuggingFaceRepositoryH\x00\x42\x06\n\x04typeBN\n&com.qwak.ai.management.model.group.apiB\"ModelGroupRepositoriesDetailsProtoP\x01\x62\x06proto3')
19
18
 
20
19
 
21
20
 
22
21
  _REPOSITORYDETAILS = DESCRIPTOR.message_types_by_name['RepositoryDetails']
22
+ _REMOTEREPOSITORYDETAILS = DESCRIPTOR.message_types_by_name['RemoteRepositoryDetails']
23
23
  _DOCKERREPOSITORY = DESCRIPTOR.message_types_by_name['DockerRepository']
24
24
  _DATASETREPOSITORY = DESCRIPTOR.message_types_by_name['DatasetRepository']
25
25
  _ARTIFACTREPOSITORY = DESCRIPTOR.message_types_by_name['ArtifactRepository']
@@ -32,6 +32,13 @@ RepositoryDetails = _reflection.GeneratedProtocolMessageType('RepositoryDetails'
32
32
  })
33
33
  _sym_db.RegisterMessage(RepositoryDetails)
34
34
 
35
+ RemoteRepositoryDetails = _reflection.GeneratedProtocolMessageType('RemoteRepositoryDetails', (_message.Message,), {
36
+ 'DESCRIPTOR' : _REMOTEREPOSITORYDETAILS,
37
+ '__module__' : 'qwak.model_group.model_group_repository_details_pb2'
38
+ # @@protoc_insertion_point(class_scope:qwak.model_groups.management.RemoteRepositoryDetails)
39
+ })
40
+ _sym_db.RegisterMessage(RemoteRepositoryDetails)
41
+
35
42
  DockerRepository = _reflection.GeneratedProtocolMessageType('DockerRepository', (_message.Message,), {
36
43
  'DESCRIPTOR' : _DOCKERREPOSITORY,
37
44
  '__module__' : 'qwak.model_group.model_group_repository_details_pb2'
@@ -71,16 +78,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
71
78
 
72
79
  DESCRIPTOR._options = None
73
80
  DESCRIPTOR._serialized_options = b'\n&com.qwak.ai.management.model.group.apiB\"ModelGroupRepositoriesDetailsProtoP\001'
74
- _REPOSITORYDETAILS._serialized_start=120
75
- _REPOSITORYDETAILS._serialized_end=234
76
- _DOCKERREPOSITORY._serialized_start=236
77
- _DOCKERREPOSITORY._serialized_end=254
78
- _DATASETREPOSITORY._serialized_start=256
79
- _DATASETREPOSITORY._serialized_end=275
80
- _ARTIFACTREPOSITORY._serialized_start=277
81
- _ARTIFACTREPOSITORY._serialized_end=297
82
- _HUGGINGFACEREPOSITORY._serialized_start=299
83
- _HUGGINGFACEREPOSITORY._serialized_end=322
84
- _REPOSITORYTYPE._serialized_start=325
85
- _REPOSITORYTYPE._serialized_end=674
81
+ _REPOSITORYDETAILS._serialized_start=87
82
+ _REPOSITORYDETAILS._serialized_end=201
83
+ _REMOTEREPOSITORYDETAILS._serialized_start=204
84
+ _REMOTEREPOSITORYDETAILS._serialized_end=444
85
+ _DOCKERREPOSITORY._serialized_start=446
86
+ _DOCKERREPOSITORY._serialized_end=464
87
+ _DATASETREPOSITORY._serialized_start=466
88
+ _DATASETREPOSITORY._serialized_end=485
89
+ _ARTIFACTREPOSITORY._serialized_start=487
90
+ _ARTIFACTREPOSITORY._serialized_end=507
91
+ _HUGGINGFACEREPOSITORY._serialized_start=509
92
+ _HUGGINGFACEREPOSITORY._serialized_end=532
93
+ _REPOSITORYTYPE._serialized_start=535
94
+ _REPOSITORYTYPE._serialized_end=884
86
95
  # @@protoc_insertion_point(module_scope)
@@ -35,6 +35,33 @@ class RepositoryDetails(google.protobuf.message.Message):
35
35
 
36
36
  global___RepositoryDetails = RepositoryDetails
37
37
 
38
+ class RemoteRepositoryDetails(google.protobuf.message.Message):
39
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
40
+
41
+ DOCKER_REPOSITORY_FIELD_NUMBER: builtins.int
42
+ HUGGING_FACE_REPOSITORY_FIELD_NUMBER: builtins.int
43
+ REPOSITORY_REMOTE_URL_FIELD_NUMBER: builtins.int
44
+ @property
45
+ def docker_repository(self) -> global___DockerRepository:
46
+ """Docker repository"""
47
+ @property
48
+ def hugging_face_repository(self) -> global___HuggingFaceRepository:
49
+ """HuggingFace repository"""
50
+ repository_remote_url: builtins.str
51
+ """The remote repository URL"""
52
+ def __init__(
53
+ self,
54
+ *,
55
+ docker_repository: global___DockerRepository | None = ...,
56
+ hugging_face_repository: global___HuggingFaceRepository | None = ...,
57
+ repository_remote_url: builtins.str = ...,
58
+ ) -> None: ...
59
+ def HasField(self, field_name: typing_extensions.Literal["docker_repository", b"docker_repository", "hugging_face_repository", b"hugging_face_repository", "repository_type", b"repository_type"]) -> builtins.bool: ...
60
+ def ClearField(self, field_name: typing_extensions.Literal["docker_repository", b"docker_repository", "hugging_face_repository", b"hugging_face_repository", "repository_remote_url", b"repository_remote_url", "repository_type", b"repository_type"]) -> None: ...
61
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["repository_type", b"repository_type"]) -> typing_extensions.Literal["docker_repository", "hugging_face_repository"] | None: ...
62
+
63
+ global___RemoteRepositoryDetails = RemoteRepositoryDetails
64
+
38
65
  class DockerRepository(google.protobuf.message.Message):
39
66
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
40
67
 
@@ -1 +1 @@
1
- __version__ = "0.4.273"
1
+ __version__ = "0.4.275"
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.273"
4
+ __version__ = "0.4.275"
5
5
 
6
6
  from qwak.inner.di_configuration import wire_dependencies
7
7
  from qwak.model.experiment_tracking import log_metric, log_param
@@ -34,6 +34,10 @@ from _qwak_proto.qwak.batch_job.v1.batch_job_service_pb2 import (
34
34
  StartBatchJobResponse,
35
35
  StartWarmupJobRequest,
36
36
  StartWarmupJobResponse,
37
+ UpdateTasksDetailsResponse,
38
+ UpdateTasksDetailsRequest,
39
+ BatchTaskDetails,
40
+ InputFileDetails,
37
41
  )
38
42
  from _qwak_proto.qwak.batch_job.v1.batch_job_service_pb2_grpc import (
39
43
  BatchJobManagementServiceStub,
@@ -67,6 +71,8 @@ from .results import (
67
71
  StartExecutionResult,
68
72
  )
69
73
 
74
+ from typing import List
75
+
70
76
  CLIENT_TIMEOUT = 180 # Seconds
71
77
 
72
78
 
@@ -541,3 +547,36 @@ class BatchJobManagerClient:
541
547
 
542
548
  except grpc.RpcError as e:
543
549
  raise QwakException(f"Failed to get batch job details, error is: {e}")
550
+
551
+ def update_task_details(self, task_id: str, input_file_paths: List[str]):
552
+ """
553
+ Update task details for a specific task using the provided list of input file paths.
554
+
555
+ :param task_id: The ID of the task to update.
556
+ :param input_file_paths: A list of paths for the input files associated with the task.
557
+ """
558
+ # Create InputFileDetails messages for each input file path
559
+ input_files_details = [
560
+ InputFileDetails(path=file_path) for file_path in input_file_paths
561
+ ]
562
+
563
+ # Create BatchTaskDetails message for the single task
564
+ batch_task_details = BatchTaskDetails(
565
+ task_id=task_id, input_files_details=input_files_details
566
+ )
567
+
568
+ update_request = UpdateTasksDetailsRequest(
569
+ tasks_details=[batch_task_details] # Wrap in a list
570
+ )
571
+
572
+ try:
573
+ response: UpdateTasksDetailsResponse = (
574
+ self.batch_job_management.UpdateTasksDetails(
575
+ update_request, timeout=CLIENT_TIMEOUT
576
+ )
577
+ )
578
+ return response
579
+ except grpc.RpcError as e:
580
+ raise QwakException(
581
+ f"Failed to update task details for task '{task_id}', error is: {e}"
582
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: qwak-core
3
- Version: 0.4.273
3
+ Version: 0.4.275
4
4
  Summary: Qwak Core contains the necessary objects and communication tools for using the Qwak Platform
5
5
  License: Apache-2.0
6
6
  Keywords: mlops,ml,deployment,serving,model
@@ -487,11 +487,11 @@ _qwak_proto/qwak/logging/log_source_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHD
487
487
  _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py,sha256=HCM2-Ah66CkK5Io1jCouxgDHT5HmSgAYcHKvsfTZw48,6751
488
488
  _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi,sha256=G5CaQGczrZ9kGsMbmJXMFWAwnqMZ4jPSl9KQpSq0yMo,12345
489
489
  _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
490
- _qwak_proto/qwak/model_group/model_group_pb2.py,sha256=fP198ECc5Ca3WccDvRlcaNavZgWeXKrzKyFKZXL52So,3427
491
- _qwak_proto/qwak/model_group/model_group_pb2.pyi,sha256=6xP_BE9OccBWV784jfKS5BcBabUcDL22XtrtWq2_hlU,3038
492
- _qwak_proto/qwak/model_group/model_group_pb2_grpc.py,sha256=UyRBABlYr-W3uUKUnStENcfnc0mXOtShh8_mjpzpro0,3073
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
490
+ _qwak_proto/qwak/model_group/model_group_pb2.py,sha256=Gh4oDESijyWcSudhDkBKPkS-KTj46mFVy6Be9rmCL4g,5374
491
+ _qwak_proto/qwak/model_group/model_group_pb2.pyi,sha256=VxmZR2nKY6OjnM8yhTLSIp9eho-Uk-IkZBu6py2D_t4,5073
492
+ _qwak_proto/qwak/model_group/model_group_pb2_grpc.py,sha256=RAvxDibL9olZBfQRIoqr3lIuVGRyneTntWZS6bhx_zo,5125
493
+ _qwak_proto/qwak/model_group/model_group_repository_details_pb2.py,sha256=Kax2nuUQKQ5d0X2A3b_hw29rls8FX1JYAWoemEWmmDc,5799
494
+ _qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi,sha256=GgYhrSXu8L2RdEV0clooKgB9Gye3_no4q0YrMy8QrZw,5701
495
495
  _qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
496
496
  _qwak_proto/qwak/models/models_pb2.py,sha256=dypKmBnjqzAmSLkXRPx0QMXiB1D-mUNxRu5pGqxVj68,32093
497
497
  _qwak_proto/qwak/models/models_pb2.pyi,sha256=6h6PCqMOwZgSf77CUEx_SiRWX0uTxjiFMysVG_Z0Qvc,39027
@@ -601,7 +601,7 @@ _qwak_proto/qwak/workspace/workspace_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXH
601
601
  _qwak_proto/qwak/workspace/workspace_service_pb2.py,sha256=AB3C9S_AbOD7Nx1Ni4j1rW6PNtYTV1zjiqFQk-goQ74,21429
602
602
  _qwak_proto/qwak/workspace/workspace_service_pb2.pyi,sha256=nKKCHwnovZhsy8TSVmdz-Vtl0nviOOoX56HD-41Xo08,13726
603
603
  _qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py,sha256=yKGuexxTBza99Ihe0DSTniV2ZSd_AG47inHenqfi890,27193
604
- frogml_storage/__init__.py,sha256=Wq_pUPT9jRznmLWLcQuuLFhFJPxX4mt7avCmVvx1DJI,24
604
+ frogml_storage/__init__.py,sha256=5Cbsl32LEshQ8ZQ7F7gzUh2VGMGdkb06EdCOlAiWvGc,24
605
605
  frogml_storage/artifactory/__init__.py,sha256=C02rcm7kqsZBVA6c6Gztxamj96hn8Aj6BuzYWFRmWbQ,71
606
606
  frogml_storage/artifactory/_artifactory_api.py,sha256=z8YX90bCy82BWqMNUdpbbig1qF5CarkIOfP6V96uYYg,11188
607
607
  frogml_storage/authentication/login/__init__.py,sha256=ch8UhQwh3o5ddyoJykQ0Bnog5-8qKHmeDpwqny8xMzM,46
@@ -639,7 +639,7 @@ frogml_storage/utils/_environment.py,sha256=NEnRxaFdRDi3UA33IVTSfQxqc9ZB6nV9YlHD
639
639
  frogml_storage/utils/_input_checks_utility.py,sha256=ZUvkxhcTcbSKtpSo5ePWha3Ca5xohxIpiAlZlpcQ3xk,3221
640
640
  frogml_storage/utils/_storage_utils.py,sha256=HB2g7uY5A3b33yIcAUM1OjHb5jWsnpESsiDrEviQwrI,366
641
641
  frogml_storage/utils/_url_utils.py,sha256=NUEfz9Fp1iE8b676-A5wrMlSTsJVRKrUhcUItOFAJD8,821
642
- qwak/__init__.py,sha256=2Xg-Qy0BfDX-xLBTGxnWF9JZ2QFnpPKvTGk6wE82nKY,587
642
+ qwak/__init__.py,sha256=DRLZ7BRqdDrMQ_UVJKLmWIYj1PoXgd3S4anrAb26WJ8,587
643
643
  qwak/automations/__init__.py,sha256=qFZRvCxUUn8gcxkJR0v19ulHW2oJ0x6-Rif7HiheDP4,1522
644
644
  qwak/automations/automation_executions.py,sha256=5MeH_epYYWb8NKXgAozwT_jPyyUDednBHG7izloi7RY,3228
645
645
  qwak/automations/automations.py,sha256=3yx8e2v0uSKDnXbqyknasyEoQ5vxGni6K40Hbi1_zkk,12599
@@ -675,7 +675,7 @@ qwak/clients/automation_management/client.py,sha256=oO3CihRxPPPlIWN764Dmf4hmWChH
675
675
  qwak/clients/autoscaling/__init__.py,sha256=A-zuZOWaZf16NjnpX38204m730c5Lde491KaXneGirE,38
676
676
  qwak/clients/autoscaling/client.py,sha256=55Pc2yc8dLl2C2MSdO2g5E25vYgkmvJSxXnKZriP_dk,1240
677
677
  qwak/clients/batch_job_management/__init__.py,sha256=zywxYf2JupkIWnGVB2C6ugZs5CrOdxTPrksD5P6uQu4,211
678
- qwak/clients/batch_job_management/client.py,sha256=L0vq9n_z0pUBIvv97B3tQt4iIEZHEZTvLdLmCWMCHeo,21054
678
+ qwak/clients/batch_job_management/client.py,sha256=4fwZtljRW93Yz6hqNEpR4YP9T7s7rYXLn2jR7hUE9B8,22453
679
679
  qwak/clients/batch_job_management/executions_config.py,sha256=LYf9j8T5W1M1EK6cjXPwAmiyGNR7wfdjNCmeKNhiREU,6882
680
680
  qwak/clients/batch_job_management/results.py,sha256=nrFGZ3y538FBhej94CYV4cwqQssK1aUQOLGubYdQVrc,1846
681
681
  qwak/clients/build_management/__init__.py,sha256=oXurHX6Kho5X-fOuuNHB3B9oMX6ejYUqh6GWv5qJyjw,43
@@ -1072,7 +1072,7 @@ qwak_services_mock/mocks/audience_service_api.py,sha256=2PvXpzKBR-Dnu9Fmb70UJn-h
1072
1072
  qwak_services_mock/mocks/authentication_service.py,sha256=79A8hmYUsg4i7EwyGG54CidbANlp-ub4f716BbLCaJQ,1166
1073
1073
  qwak_services_mock/mocks/automation_management_service.py,sha256=C9rYKMy0hzOTaKTCrTkE5jTnPSenVkLV8DCptBKr02U,8211
1074
1074
  qwak_services_mock/mocks/autoscaling_service_api.py,sha256=YgucRD3ZjhxqttNVSF_HL7u3aDo55LdRSEE7q0fxp3M,1019
1075
- qwak_services_mock/mocks/batch_job_manager_service.py,sha256=HeUZulDtfIlSm2h4cLdByR0voJjOy97m4_YWldg7pqQ,13129
1075
+ qwak_services_mock/mocks/batch_job_manager_service.py,sha256=zVBBBkYdvWFwEXP_VHBH8SBIvJosPt0jHnHlJjuf6AI,14080
1076
1076
  qwak_services_mock/mocks/build_management.py,sha256=LYtrEvDt-lJbNJEP-pFpvAKcS82mAzb2gyoCu1-XCOs,3686
1077
1077
  qwak_services_mock/mocks/build_orchestrator_build_api.py,sha256=mtb6wEZug9zCiMHZVrfsU0YOP59rgBrpvZDjEInG7B8,5004
1078
1078
  qwak_services_mock/mocks/build_orchestrator_build_settings_api.py,sha256=oj_JTxY_3xj8FkgWkxQER_EoBFDqL2g21NPrU31fD6o,1379
@@ -1113,6 +1113,6 @@ qwak_services_mock/mocks/workspace_manager_service_mock.py,sha256=O9ZSwln4T4kHVk
1113
1113
  qwak_services_mock/services_mock.py,sha256=zXtHcX8a_acz7ynxuCBxxVpHpde7aAGjIn6Uw52LY1s,19593
1114
1114
  qwak_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1115
1115
  qwak_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
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,,
1116
+ qwak_core-0.4.275.dist-info/METADATA,sha256=nhP_L33Xeef7gSOW0aW9KWIAxSMn-fNRmYHezoD-S88,15142
1117
+ qwak_core-0.4.275.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1118
+ qwak_core-0.4.275.dist-info/RECORD,,
@@ -36,6 +36,9 @@ from _qwak_proto.qwak.batch_job.v1.batch_job_service_pb2 import (
36
36
  StartWarmupJobRequest,
37
37
  StartWarmupJobResponse,
38
38
  TaskExecutionDetails,
39
+ UpdateTasksDetailsRequest,
40
+ UpdateTasksDetailsResponse,
41
+ BatchTaskDetails,
39
42
  )
40
43
  from _qwak_proto.qwak.batch_job.v1.batch_job_service_pb2_grpc import (
41
44
  BatchJobManagementServiceServicer,
@@ -51,6 +54,7 @@ class BatchJobManagerService(BatchJobManagementServiceServicer):
51
54
  self.id_to_batch_job: Dict[str, MockBatchJob] = dict()
52
55
  self.model_id_active_warmup: Set[str] = set()
53
56
  self.models_to_fail: Set[str] = set()
57
+ self.task_id_to_update_task_details: Dict[str, BatchTaskDetails] = dict()
54
58
 
55
59
  def StartBatchJob(
56
60
  self, request: StartBatchJobRequest, context
@@ -265,6 +269,25 @@ class BatchJobManagerService(BatchJobManagementServiceServicer):
265
269
  except Exception as e:
266
270
  raise_internal_grpc_error(context, e)
267
271
 
272
+ def UpdateTasksDetails(
273
+ self, request: UpdateTasksDetailsRequest, context
274
+ ) -> UpdateTasksDetailsResponse:
275
+ for task in request.tasks_details:
276
+ task_id = task.task_id
277
+ if not task_id :
278
+ raise ValueError("Task ID cannot be empty")
279
+ input_files = task.input_files_details
280
+
281
+ print(f"Updating task with ID: {task_id} and input files: {[file.path for file in input_files]}")
282
+ self.task_id_to_update_task_details[task_id] = task
283
+ return UpdateTasksDetailsResponse()
284
+
285
+ def get_task_details(self,task_id: str
286
+ ) -> Optional[BatchTaskDetails]:
287
+ """
288
+ Get task details by task ID
289
+ """
290
+ return self.task_id_to_update_task_details[task_id]
268
291
 
269
292
  class MockBatchJob:
270
293
  def __init__(self, request: StartBatchJobRequest):
@@ -331,4 +354,4 @@ def batch_job_to_message(batch_job: MockBatchJob) -> BatchJobMessage:
331
354
  for line in batch_job.report
332
355
  ],
333
356
  task_executions=batch_job.tasks,
334
- )
357
+ )