frogml-core 0.0.71__py3-none-any.whl → 0.0.73__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 (23) hide show
  1. frogml_core/__init__.py +1 -1
  2. frogml_core/clients/feature_store/offline_serving_client.py +31 -29
  3. frogml_core/clients/location_discovery/__init__.py +1 -0
  4. frogml_core/clients/location_discovery/client.py +73 -0
  5. frogml_core/feature_store/_common/functions.py +0 -19
  6. frogml_core/feature_store/offline/__init__.py +1 -2
  7. frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/upload_step.py +18 -18
  8. {frogml_core-0.0.71.dist-info → frogml_core-0.0.73.dist-info}/METADATA +1 -1
  9. {frogml_core-0.0.71.dist-info → frogml_core-0.0.73.dist-info}/RECORD +19 -14
  10. frogml_proto/qwak/service_discovery/service_discovery_location_pb2.py +65 -0
  11. frogml_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +73 -0
  12. frogml_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py +4 -0
  13. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +49 -0
  14. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +41 -0
  15. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py +231 -0
  16. frogml_services_mock/mocks/frogml_mocks.py +4 -0
  17. frogml_services_mock/mocks/location_discovery_service_api.py +104 -0
  18. frogml_services_mock/services_mock.py +16 -4
  19. frogml_core/feature_store/offline/_query_engine.py +0 -32
  20. frogml_core/feature_store/offline/athena/__init__.py +0 -0
  21. frogml_core/feature_store/offline/athena/athena_query_engine.py +0 -154
  22. frogml_core/feature_store/offline/client.py +0 -721
  23. {frogml_core-0.0.71.dist-info → frogml_core-0.0.73.dist-info}/WHEEL +0 -0
frogml_core/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """Top-level package for frogml."""
2
2
 
3
3
  __author__ = "jfrog"
4
- __version__ = "0.0.71"
4
+ __version__ = "0.0.73"
5
5
 
6
6
  from frogml_core.inner.di_configuration import wire_dependencies
7
7
  from frogml_core.model.model_version_tracking import ( # noqa: F401,E501
@@ -1,40 +1,23 @@
1
1
  import logging
2
2
  from typing import List, Optional
3
3
 
4
- from dependency_injector.wiring import Provide
5
- from google.protobuf.timestamp_pb2 import Timestamp as ProtoTimestamp
6
-
4
+ import grpc
5
+ from frogml_core.clients.location_discovery import LocationDiscoveryClient
6
+ from frogml_core.inner.tool.grpc.grpc_tools import create_grpc_channel
7
+ from frogml_core.inner.tool.retry_utils import retry
7
8
  from frogml_proto.qwak.offline.serving.v1.feature_values_pb2 import (
8
9
  FeaturesetFeatures as ProtoFeaturesetFeatures,
9
10
  )
10
11
  from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
11
12
  FeatureValuesRequestStatus as ProtoFeatureValuesRequestStatus,
12
- )
13
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
14
13
  FileFormat as ProtoFileFormat,
15
- )
16
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
17
14
  GetFeatureValuesInRangeRequest as ProtoGetFeatureValuesInRangeRequest,
18
- )
19
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
20
15
  GetFeatureValuesInRangeResponse as ProtoGetFeatureValuesInRangeResponse,
21
- )
22
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
23
16
  GetFeatureValuesRequest as ProtoGetFeatureValuesRequest,
24
- )
25
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
26
17
  GetFeatureValuesResponse as ProtoGetFeatureValuesResponse,
27
- )
28
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
29
18
  GetFeatureValuesResultRequest as ProtoGetFeatureValuesResultRequest,
30
- )
31
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
32
19
  GetFeatureValuesResultResponse as ProtoGetFeatureValuesResultResponse,
33
- )
34
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
35
20
  GetFileUploadUrlRequest as ProtoGetFileUploadUrlRequest,
36
- )
37
- from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2 import (
38
21
  GetFileUploadUrlResponse as ProtoGetFileUploadUrlResponse,
39
22
  )
40
23
  from frogml_proto.qwak.offline.serving.v1.offline_serving_async_service_pb2_grpc import (
@@ -45,15 +28,10 @@ from frogml_proto.qwak.offline.serving.v1.options_pb2 import (
45
28
  )
46
29
  from frogml_proto.qwak.offline.serving.v1.population_pb2 import (
47
30
  Population as ProtoPopulation,
48
- )
49
- from frogml_proto.qwak.offline.serving.v1.population_pb2 import (
50
31
  PopulationFileUploadUrlType as ProtoPopulationFileUploadUrlType,
51
- )
52
- from frogml_proto.qwak.offline.serving.v1.population_pb2 import (
53
32
  TimedPopulation as ProtoTimedPopulation,
54
33
  )
55
- from frogml_core.inner.di_configuration import FrogmlContainer
56
- from frogml_core.inner.tool.retry_utils import retry
34
+ from google.protobuf.timestamp_pb2 import Timestamp as ProtoTimestamp
57
35
 
58
36
 
59
37
  class FeatureValuesResultNotReadyException(Exception):
@@ -69,8 +47,32 @@ class FsOfflineServingClient:
69
47
  Querying offline features store
70
48
  """
71
49
 
72
- def __init__(self, grpc_channel=Provide[FrogmlContainer.core_grpc_channel]):
73
- self._client = FeatureStoreOfflineServingAsyncServiceStub(grpc_channel)
50
+ def __init__(self, grpc_channel: Optional[grpc.Channel] = None):
51
+ self._client = self._create_client(grpc_channel)
52
+
53
+ @staticmethod
54
+ def _get_offline_serving_url() -> str:
55
+ """
56
+ Fetches the offline serving service URL from the LocationDiscoveryService.
57
+ """
58
+ return LocationDiscoveryClient().get_offline_serving().service_url
59
+
60
+ def _create_client(
61
+ self, grpc_channel: Optional[grpc.Channel] = None
62
+ ) -> FeatureStoreOfflineServingAsyncServiceStub:
63
+ if grpc_channel:
64
+ return FeatureStoreOfflineServingAsyncServiceStub(grpc_channel)
65
+
66
+ channel = create_grpc_channel(
67
+ url=self._get_offline_serving_url(),
68
+ enable_ssl=True,
69
+ status_for_retry=(
70
+ grpc.StatusCode.UNAVAILABLE,
71
+ grpc.StatusCode.CANCELLED,
72
+ grpc.StatusCode.DEADLINE_EXCEEDED,
73
+ ),
74
+ )
75
+ return FeatureStoreOfflineServingAsyncServiceStub(channel)
74
76
 
75
77
  def get_population_file_upload_url(
76
78
  self,
@@ -0,0 +1 @@
1
+ from .client import LocationDiscoveryClient
@@ -0,0 +1,73 @@
1
+ from typing import Callable
2
+
3
+ import grpc
4
+ from dependency_injector.wiring import Provide
5
+ from frogml_core.exceptions import FrogmlException
6
+ from frogml_core.inner.di_configuration import FrogmlContainer
7
+ from frogml_proto.qwak.service_discovery.service_discovery_location_pb2 import (
8
+ ServiceLocationDescriptor,
9
+ )
10
+ from frogml_proto.qwak.service_discovery.service_discovery_location_service_pb2 import (
11
+ GetServingUrlRequest as ProtoGetServingUrlRequest,
12
+ GetServingUrlRequestResponse as ProtoGetServingUrlRequestResponse,
13
+ )
14
+ from frogml_proto.qwak.service_discovery.service_discovery_location_service_pb2_grpc import (
15
+ LocationDiscoveryServiceStub,
16
+ )
17
+
18
+
19
+ class LocationDiscoveryClient:
20
+ """
21
+ Client for querying service locations from the LocationDiscoveryService.
22
+ """
23
+
24
+ def __init__(self, grpc_channel=Provide[FrogmlContainer.core_grpc_channel]):
25
+ self._service = LocationDiscoveryServiceStub(grpc_channel)
26
+
27
+ @staticmethod
28
+ def _get_location(
29
+ method: Callable[
30
+ [ProtoGetServingUrlRequest], ProtoGetServingUrlRequestResponse
31
+ ],
32
+ ) -> ServiceLocationDescriptor:
33
+ """
34
+ Calls a specific RPC and extracts the service location descriptor.
35
+
36
+ Args:
37
+ method: The gRPC method to call.
38
+
39
+ Returns:
40
+ ServiceLocationDescriptor: Contains service_url and location metadata.
41
+ """
42
+ try:
43
+ request = ProtoGetServingUrlRequest()
44
+ response = method(request)
45
+ return response.location
46
+ except grpc.RpcError as e:
47
+ raise FrogmlException(
48
+ f"Failed to retrieve service location. Error is: {e.details()}"
49
+ ) from e
50
+
51
+ def get_offline_serving(self) -> ServiceLocationDescriptor:
52
+ """Fetches the offline serving service location."""
53
+ return self._get_location(self._service.GetOfflineServingUrl)
54
+
55
+ def get_distribution_manager(self) -> ServiceLocationDescriptor:
56
+ """Fetches the distribution manager service location."""
57
+ return self._get_location(self._service.GetDistributionManagerUrl)
58
+
59
+ def get_analytics_engine(self) -> ServiceLocationDescriptor:
60
+ """Fetches the analytics engine service location."""
61
+ return self._get_location(self._service.GetAnalyticsEngineUrl)
62
+
63
+ def get_metrics_gateway(self) -> ServiceLocationDescriptor:
64
+ """Fetches the metrics gateway service location."""
65
+ return self._get_location(self._service.GetMetricsGatewayUrl)
66
+
67
+ def get_features_operator(self) -> ServiceLocationDescriptor:
68
+ """Fetches the features operator service location."""
69
+ return self._get_location(self._service.GetFeaturesOperatorUrl)
70
+
71
+ def get_hosting_gateway(self) -> ServiceLocationDescriptor:
72
+ """Fetches the hosting gateway service location."""
73
+ return self._get_location(self._service.GetHostingGatewayUrl)
@@ -16,22 +16,3 @@ def _generate_new_col(col_name: str, duplicate_cols_dict: dict):
16
16
  return col_name
17
17
  elif len(feature_full_name) == 2 and duplicate_cols_dict[feature_full_name[1]] == 1:
18
18
  return feature_full_name[1]
19
-
20
-
21
- def normalize_cols(cols) -> List[str]:
22
- """
23
- Normalize cols - try to remove leading feature set name from features
24
- Args:
25
- cols: list of column
26
- Return normalized columns
27
- """
28
- duplicate_columns_dict = {}
29
- for col in cols:
30
- feature_full_name: List[str] = col.split(".")
31
- if len(feature_full_name) != 2:
32
- duplicate_columns_dict[col] = 1
33
- else:
34
- fs_name = feature_full_name[1]
35
- duplicate_columns_dict[fs_name] = duplicate_columns_dict.get(fs_name, 0) + 1
36
- cols = [_generate_new_col(col_name, duplicate_columns_dict) for col_name in cols]
37
- return cols
@@ -1,4 +1,3 @@
1
- from frogml_core.feature_store.offline.client import OfflineClient
2
1
  from frogml_core.feature_store.offline.client_v2 import OfflineClientV2
3
2
 
4
- __all__ = ["OfflineClient", "OfflineClientV2"]
3
+ __all__ = ["OfflineClientV2"]
@@ -10,7 +10,6 @@ from retrying import retry
10
10
 
11
11
  from frogml_proto.qwak.builds.build_url_pb2 import BuildVersioningTagsType
12
12
  from frogml_proto.qwak.builds.builds_orchestrator_service_pb2 import (
13
- AuthenticationDetail,
14
13
  GetBuildVersioningUploadURLResponse,
15
14
  )
16
15
  from frogml_core.exceptions import FrogmlException, FrogmlGeneralBuildException
@@ -159,15 +158,17 @@ class UploadStep(Step):
159
158
  ):
160
159
  self.build_logger.debug(f"Upload file {file}")
161
160
 
162
- pre_signed_url_response = self.get_pre_signed_upload_url(
163
- tag=tag, tag_type=BuildVersioningTagsType.FILE_TAG_TYPE
161
+ pre_signed_url_response: GetBuildVersioningUploadURLResponse = (
162
+ self.get_pre_signed_upload_url(
163
+ tag=tag, tag_type=BuildVersioningTagsType.FILE_TAG_TYPE
164
+ )
164
165
  )
165
166
  self.upload_file_to_remote_storge(
166
167
  upload_url=pre_signed_url_response.upload_url,
167
168
  file=file,
168
169
  all_files_size_to_upload=all_files_size_to_upload,
169
170
  read_so_far=read_so_far,
170
- authentication_details=pre_signed_url_response.authentication_detail,
171
+ headers=pre_signed_url_response.headers,
171
172
  )
172
173
 
173
174
  self.build_logger.debug(f"Upload file {file} completed")
@@ -204,22 +205,16 @@ class UploadStep(Step):
204
205
  file: Path,
205
206
  all_files_size_to_upload: int,
206
207
  read_so_far: int,
207
- authentication_details: Optional[AuthenticationDetail] = None,
208
+ headers: Optional[dict] = None,
208
209
  ):
210
+ if not headers:
211
+ headers = {}
212
+
209
213
  try:
210
214
  self.build_logger.debug(f"Upload file {file} to Qwak storage")
211
- auth: Optional[Tuple[str, str]] = None
212
- if (
213
- authentication_details.WhichOneof("integration_type")
214
- == "jfrog_authentication_detail"
215
- ):
216
- auth = (
217
- authentication_details.jfrog_authentication_detail.username,
218
- authentication_details.jfrog_authentication_detail.token,
219
- )
220
215
 
221
216
  self.send_request(
222
- upload_url, file, all_files_size_to_upload, read_so_far, auth
217
+ upload_url, file, all_files_size_to_upload, read_so_far, headers
223
218
  )
224
219
  self.build_logger.debug(
225
220
  f"File {file} uploaded to Qwak storage successfully"
@@ -237,8 +232,14 @@ class UploadStep(Step):
237
232
  file: Path,
238
233
  all_files_size_to_upload: int,
239
234
  read_so_far: int,
240
- auth: Optional[Tuple[str, str]],
235
+ headers: Optional[dict],
241
236
  ):
237
+ if not headers:
238
+ headers = {}
239
+
240
+ # Adding to the current headers the content-type
241
+ headers["content-type"] = "text/plain"
242
+
242
243
  http_response = requests.put( # nosec B113
243
244
  url=upload_url,
244
245
  data=UploadInChunks(
@@ -248,8 +249,7 @@ class UploadStep(Step):
248
249
  all_files_size_to_upload=all_files_size_to_upload,
249
250
  read_so_far=read_so_far,
250
251
  ),
251
- auth=auth,
252
- headers={"content-type": "text/plain"},
252
+ headers=headers,
253
253
  )
254
254
 
255
255
  if http_response.status_code not in [200, 201]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: frogml-core
3
- Version: 0.0.71
3
+ Version: 0.0.73
4
4
  Summary: frogml Core contains the necessary objects and communication tools for using the Jfrog ml Platform
5
5
  License: Apache-2.0
6
6
  Keywords: mlops,ml,deployment,serving,model
@@ -1,4 +1,4 @@
1
- frogml_core/__init__.py,sha256=ulzYRqlreb83b240lIjMo6hT8Vweg-Pr8UncNGR-d_4,777
1
+ frogml_core/__init__.py,sha256=H1v3NaV6G8_CLt1gzMDEGJYry0urU7ROISKUYX1mw5Q,777
2
2
  frogml_core/automations/__init__.py,sha256=j2gD15MN-xVWhI5rAFsDwhL0CIyICLNT0scXsKvNBkU,1547
3
3
  frogml_core/automations/automation_executions.py,sha256=xpOb9Dq8gPPGNQDJTvBBZbNz4woZDRZY0HqnLSu7pwU,3230
4
4
  frogml_core/automations/automations.py,sha256=GKEQyQMi8sxX5oZn62PaxPi0zD8IaJRjBkhczRJxHNs,13070
@@ -52,7 +52,7 @@ frogml_core/clients/feature_store/__init__.py,sha256=mMCPBHDga6Y7dtJfNoHvfOvCyjN
52
52
  frogml_core/clients/feature_store/execution_management_client.py,sha256=vLSq2I_Tw6IZAIcf5BeN6OAK3qwj_5WketVAcu4nci0,4114
53
53
  frogml_core/clients/feature_store/job_registry_client.py,sha256=zggguwuvnkSccClLO_4NasmTWIUkoLje4TXzVyZ-GxU,2668
54
54
  frogml_core/clients/feature_store/management_client.py,sha256=cSBFxwXNkL8amIdopLaMkDbKzxiVcX6ED1cST3aYKH4,20768
55
- frogml_core/clients/feature_store/offline_serving_client.py,sha256=15TbEWd3tic-J_520abqiPaeV-r720CT5RSiSGfCT38,9418
55
+ frogml_core/clients/feature_store/offline_serving_client.py,sha256=OBY4Q7bNLIiqHIMQTAd4kBk3Wx4BfaxTIfRIVD2OnDo,9372
56
56
  frogml_core/clients/feature_store/operator_client.py,sha256=G-i1ild7JEHcwAB9-O2OTHB3-W8n5DQuGtV8JJoXIeA,5837
57
57
  frogml_core/clients/file_versioning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
58
  frogml_core/clients/file_versioning/client.py,sha256=GQ0drq_6f3lyKFSEg_tLh6wybGgyiiPF7TsiHCIPPZU,2533
@@ -68,6 +68,8 @@ frogml_core/clients/jfrog_gateway/__init__.py,sha256=E_BrYKBESU3wGNiR_RQncbAhLWy
68
68
  frogml_core/clients/jfrog_gateway/client.py,sha256=H4hF3MNi0QBYwGgD9c9A-4-VQlBB7zlQgH3ImpX8aBQ,1357
69
69
  frogml_core/clients/kube_deployment_captain/__init__.py,sha256=rJUEEy3zNH0aTFyuO_UBexzaUKdjvwU9P2vV1MDj684,41
70
70
  frogml_core/clients/kube_deployment_captain/client.py,sha256=oz7VF37TSO0S07MqXOYu2Xmx_rl9IVrfHOz_8MWnBZ8,9340
71
+ frogml_core/clients/location_discovery/__init__.py,sha256=sqGQ75YHFE6nvOcir38fykUUmAa6cFEIze8PJYgYWRc,44
72
+ frogml_core/clients/location_discovery/client.py,sha256=P9Ru2za3FtBCF6PkYFeeHPiPPtvNKLDNH1khmUmN0ng,2892
71
73
  frogml_core/clients/logging_client/__init__.py,sha256=1OCHnigQBYThBwGbxCreYA0BgP0HcuLFzNEWd3Yxh-c,34
72
74
  frogml_core/clients/logging_client/client.py,sha256=A7qQJWW54Ve7O0DuJX9gmSJlUQyRIKC0VmfGS6bUwjo,4950
73
75
  frogml_core/clients/model_management/__init__.py,sha256=vjWVP8MjmK4_A70WOgJqa6x24AeLK-ABjGJtogGzw9w,43
@@ -112,7 +114,7 @@ frogml_core/feature_store/_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
112
114
  frogml_core/feature_store/_common/artifact_utils.py,sha256=STiDfiYOOX57zYSm2O8oUKIiRNP07w2NaxNcR0CuqWk,2005
113
115
  frogml_core/feature_store/_common/feature_set_utils.py,sha256=s_GGSHqgMD88c1ij62ptgMo0ar9iEBi4yd6T1wuocwQ,9222
114
116
  frogml_core/feature_store/_common/featureset_asterisk_handler.py,sha256=3kygt0HM6QxDSGIRWcWoDwhOr126wwtv0Xr8W7AUGnk,4721
115
- frogml_core/feature_store/_common/functions.py,sha256=z033VNAqGZak2oB7pUSS9iJrh9aMRblVGP3iLWCChko,1298
117
+ frogml_core/feature_store/_common/functions.py,sha256=kSNYJ7dy48NN09HG9asm4ibQh0JaCGcZYsRDjRWlUHE,659
116
118
  frogml_core/feature_store/_common/packaging.py,sha256=5E8v6NO_g-r-qJDD1pv1tqjWEAHjR6pAEWJ0s6VzJEE,8185
117
119
  frogml_core/feature_store/_common/source_code_spec.py,sha256=Ue8N_xdqrooPXJn690ZClct0LvfmxvRgDDiS0ZLHhww,1988
118
120
  frogml_core/feature_store/_common/source_code_spec_factory.py,sha256=pK2k6DDUFwaJje9zMYcOU8fBMj7VrvaUlm6Ez7wg3Xs,1798
@@ -174,12 +176,8 @@ frogml_core/feature_store/feature_sets/transformations/functions/frogml_pandas.p
174
176
  frogml_core/feature_store/feature_sets/transformations/functions/schema.py,sha256=kuu8MZ3d2Y9DkmgPZCRgDb0ecsc8isFHQG1lFLPBR3Y,1156
175
177
  frogml_core/feature_store/feature_sets/transformations/transformations.py,sha256=MOZFeeMumXP5QODG5h2Hifcry69IDuiZgoiTlKpgVcE,15978
176
178
  frogml_core/feature_store/feature_sets/transformations/validations/validations_util.py,sha256=u5EnrfpMzJjzbhO-odYDyNtgF50GBq6oMrDMivsPwmg,3215
177
- frogml_core/feature_store/offline/__init__.py,sha256=wykzcryc7d6zul2xKhxSypr6P1-XLYK9Jjz5dBYITXs,187
179
+ frogml_core/feature_store/offline/__init__.py,sha256=NKI5pmLMuRjh_5C5f9jMImOwnG80fxy-n8y3kjU8Jdk,103
178
180
  frogml_core/feature_store/offline/_offline_serving_validations.py,sha256=yfkV8UVLDi719QvZU_UfIiIHqdWfrTzATUDTVAseDu0,1239
179
- frogml_core/feature_store/offline/_query_engine.py,sha256=LBVejISK9daYYWUYclXuMifezfsuzF4JgBhp2YlHZf0,738
180
- frogml_core/feature_store/offline/athena/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
181
- frogml_core/feature_store/offline/athena/athena_query_engine.py,sha256=7Obo5n5BWtMpV06IwYQ0gm63uq5JrC8L5E9zgw-SWto,5213
182
- frogml_core/feature_store/offline/client.py,sha256=psgNKr9MjI1ZnRbpAlpHhx34d7AE71KX1YNKYPOx-kc,28759
183
181
  frogml_core/feature_store/offline/client_v2.py,sha256=kTFyHAYIsKBe3wcuE1S_LyD9CLQ_yCorOLcHVR3Emms,14966
184
182
  frogml_core/feature_store/offline/feature_set_features.py,sha256=MjrQrXNhzk7QBdCojdpLfy1fuGdP3GcpOgcc7n7H0G8,740
185
183
  frogml_core/feature_store/online/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -260,7 +258,7 @@ frogml_core/inner/build_logic/phases/phase_010_fetch_model/set_version_step.py,s
260
258
  frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
261
259
  frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/cleanup_step.py,sha256=HmQ0iQ9pJxLZTDzUvwVwwWO2CG-4fHtxwmye-xL0Q9U,632
262
260
  frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/start_remote_build_step.py,sha256=UQWLfJpj9lm0fJfKj0Kc2N99x6ioUVfKPXrf1u70rJY,1691
263
- frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/upload_step.py,sha256=TbNonL_FR0yycEiPqAGYldPD5hY_ooXDXo3JgvMdWC8,9617
261
+ frogml_core/inner/build_logic/phases/phase_020_remote_register_frogml_build/upload_step.py,sha256=bbNSttwy2vEZv9yfE1Ndxf_rv03KP7QuM4Q9rM9BEUI,9350
264
262
  frogml_core/inner/build_logic/phases/phases_pipeline.py,sha256=Ei70zbiiT6Be2aFLV7Z5zcVykm2peOsd-UFLG47AR_c,1258
265
263
  frogml_core/inner/build_logic/run_handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
266
264
  frogml_core/inner/build_logic/run_handlers/programmatic_phase_run_handler.py,sha256=XE1afXZfA1AQOa9bV2CtmK--gcX0YKRhLwGdkfb3cto,3547
@@ -995,6 +993,12 @@ frogml_proto/qwak/self_service/user/v1/user_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7
995
993
  frogml_proto/qwak/self_service/user/v1/user_service_pb2.py,sha256=NgUE8b_XEdnLYblT7kAhC1iE8h9lOXwFYCLL6cNJMX8,10404
996
994
  frogml_proto/qwak/self_service/user/v1/user_service_pb2.pyi,sha256=e3OA_PP-BzlZxm05tM9IJ0LDjKd8iW0E9a9I0-R8_Q8,8278
997
995
  frogml_proto/qwak/self_service/user/v1/user_service_pb2_grpc.py,sha256=B8i4v8j4UdQu331789PPN2tWLKi2hwS8mtZU57nutXY,10513
996
+ frogml_proto/qwak/service_discovery/service_discovery_location_pb2.py,sha256=WY5jhlurURD49b4xNmR6BFIPZOJ4QU6V7k2D_WwDwh4,3342
997
+ frogml_proto/qwak/service_discovery/service_discovery_location_pb2.pyi,sha256=33gciRiYabLn_gmN5Ksw5reequ4GkfUbGxFW4gionf4,2406
998
+ frogml_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
999
+ frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.py,sha256=jWtA0BNqmA7R3jjHW6RnDN4IlfbsoFIzigS7kIM5NWA,3827
1000
+ frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi,sha256=g3ooXHZr8fgpGnIm5NFqD2ZJ9caK6Hkt5484x1ZmpU4,1396
1001
+ frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py,sha256=3s2fslqiAsckASNky0FzqVVtVA5801fdbI1UvmBHqLA,13685
998
1002
  frogml_proto/qwak/traffic/v1/traffic_api_pb2.py,sha256=yWJe2zJWGKK7sx11-SQNG1Jf9jymyAYUN4alBWcE2is,6923
999
1003
  frogml_proto/qwak/traffic/v1/traffic_api_pb2.pyi,sha256=1InzqfEe36axD60wEF0_S7NjISDTTalrfzBY-7kgeBE,5251
1000
1004
  frogml_proto/qwak/traffic/v1/traffic_api_pb2_grpc.py,sha256=rxTMb-vkj5ZpaKg7uEpgj-CKW7fajw0FX64AFzScQZU,8229
@@ -1057,13 +1061,14 @@ frogml_services_mock/mocks/features_operator_v3_service.py,sha256=_RcUeL9LRFbxL7
1057
1061
  frogml_services_mock/mocks/features_set_state_service_api.py,sha256=jLtDYRBQUXP9x2DaywRPNFTtAGewP1JF1wv28ZTRbL4,2290
1058
1062
  frogml_services_mock/mocks/feedback_service.py,sha256=NH8IskHnwbHGfDJCunSWMWQd9UfVBL7rPzVrFWrCZC4,1140
1059
1063
  frogml_services_mock/mocks/file_versioning_service.py,sha256=MtxGcWoB_hkJUMBRSso9-G_6_WBbHkrgzG6Rf_37Ysk,2606
1060
- frogml_services_mock/mocks/frogml_mocks.py,sha256=NkzhyXe7wKyGNZvpcMV3cJTIGitlvgIBw0v_sOM0BVc,6371
1064
+ frogml_services_mock/mocks/frogml_mocks.py,sha256=bR8pW3pdz5ogHBiHTA_RrQNf85x1CDSnUnwMvOpt4p0,6546
1061
1065
  frogml_services_mock/mocks/fs_offline_serving_service.py,sha256=O4hd4kQ-sXm9zMPVJYHXO4ARPuc3UN0E9rcOtDkSJRk,2093
1062
1066
  frogml_services_mock/mocks/instance_template_management_service.py,sha256=8J8NlD667kWfjhSXsyH31jjr7qKIaF77K1Fc7FgxtHY,4762
1063
1067
  frogml_services_mock/mocks/integration_management_service.py,sha256=XvWyif8pGuqJsrjTs6m29cneVuYdjVptPpRndwIdqq4,2771
1064
1068
  frogml_services_mock/mocks/internal_build_orchestrator_service.py,sha256=saWQOWbJC5uoAcr053rmd0Jj2TI4TH3Kyr2D5lsL87w,1059
1065
1069
  frogml_services_mock/mocks/job_registry_service_api.py,sha256=Zd5lVM6h4jFfKHxnQAux1FiBEw2tXFA284OJ33a_IH4,2711
1066
1070
  frogml_services_mock/mocks/kube_captain_service_api.py,sha256=WVCaoOHY-kFdS73bd7kuOssr1RAK1F6MUlJ-NO0eLfY,1596
1071
+ frogml_services_mock/mocks/location_discovery_service_api.py,sha256=TUdku1zdmIZXZYbkGurK-OhScPfMeGUzRVa7FgxZnrQ,3682
1067
1072
  frogml_services_mock/mocks/logging_service.py,sha256=JRTCjJRIKlJQeTHr3Qt5gbkfxMLUPblo0Sp50COspxE,7385
1068
1073
  frogml_services_mock/mocks/model_management_service.py,sha256=YKNgZ65AcKTMFs1zkrfVfGOBjqPBpodTgD6r358iRMg,4167
1069
1074
  frogml_services_mock/mocks/model_version_manager_service.py,sha256=nBSB-bL0X8AR1e_3J8R_bHuRaGQvf9P8aFskjNUvEo8,4814
@@ -1079,9 +1084,9 @@ frogml_services_mock/mocks/utils/exception_handlers.py,sha256=k_8mez3cwjNjKE9yGQ
1079
1084
  frogml_services_mock/mocks/vector_serving_api.py,sha256=ZljLOw9_ee-nlvEMU0HNzmK2tcsmBY6VzuVzLmInYj4,5838
1080
1085
  frogml_services_mock/mocks/vectors_management_api.py,sha256=-GtKow3JmBj6LRZw625WdD8pt9VKtGZUs2VXTbtEPg0,3602
1081
1086
  frogml_services_mock/mocks/workspace_manager_service_mock.py,sha256=WbOiWgOyr-xTicwJO7jdY-gN_5hF_s9GOU-ZO5P_2_M,7745
1082
- frogml_services_mock/services_mock.py,sha256=_34z6rFCHFwcSni-9eyJlrH264xsL_QDNmG-EBv0zMc,20281
1087
+ frogml_services_mock/services_mock.py,sha256=xfbYvl05gFUq2oT82cT-6K2CEJ6d9kFX_tk77QZHTFI,20787
1083
1088
  frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1084
1089
  frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
1085
- frogml_core-0.0.71.dist-info/METADATA,sha256=OMEQfxHj-4aK09h3A6A-1ak4g6BkW3H_1-GGyOZXkmE,2004
1086
- frogml_core-0.0.71.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1087
- frogml_core-0.0.71.dist-info/RECORD,,
1090
+ frogml_core-0.0.73.dist-info/METADATA,sha256=Wj9TaS1GR3LEc-TVI0YUKGKbjTAjLE6wz-6cnvlYriA,2004
1091
+ frogml_core-0.0.73.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1092
+ frogml_core-0.0.73.dist-info/RECORD,,
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: frogml_proto.qwak.service_discovery/service_discovery_location.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf import descriptor as _descriptor
6
+ from google.protobuf import descriptor_pool as _descriptor_pool
7
+ from google.protobuf import message as _message
8
+ from google.protobuf import reflection as _reflection
9
+ from google.protobuf import symbol_database as _symbol_database
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7qwak/service_discovery/service_discovery_location.proto\x12\"qwak.service_discovery.location.v0\"w\n\x19ServiceLocationDescriptor\x12\x13\n\x0bservice_url\x18\x01 \x01(\t\x12\x45\n\x08location\x18\x02 \x01(\x0b\x32\x33.qwak.service_discovery.location.v0.ServiceLocation\"\x99\x01\n\x0fServiceLocation\x12\x38\n\x04\x63ore\x18\x01 \x01(\x0b\x32(.qwak.service_discovery.location.v0.CoreH\x00\x12\x38\n\x04\x65\x64ge\x18\x02 \x01(\x0b\x32(.qwak.service_discovery.location.v0.EdgeH\x00\x42\x12\n\x10service_location\"\x06\n\x04\x43ore\"\x06\n\x04\x45\x64geB-\n)com.qwak.ai.service_discovery.location.v0P\x01\x62\x06proto3')
18
+
19
+
20
+
21
+ _SERVICELOCATIONDESCRIPTOR = DESCRIPTOR.message_types_by_name['ServiceLocationDescriptor']
22
+ _SERVICELOCATION = DESCRIPTOR.message_types_by_name['ServiceLocation']
23
+ _CORE = DESCRIPTOR.message_types_by_name['Core']
24
+ _EDGE = DESCRIPTOR.message_types_by_name['Edge']
25
+ ServiceLocationDescriptor = _reflection.GeneratedProtocolMessageType('ServiceLocationDescriptor', (_message.Message,), {
26
+ 'DESCRIPTOR' : _SERVICELOCATIONDESCRIPTOR,
27
+ '__module__' : 'qwak.service_discovery.service_discovery_location_pb2'
28
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.ServiceLocationDescriptor)
29
+ })
30
+ _sym_db.RegisterMessage(ServiceLocationDescriptor)
31
+
32
+ ServiceLocation = _reflection.GeneratedProtocolMessageType('ServiceLocation', (_message.Message,), {
33
+ 'DESCRIPTOR' : _SERVICELOCATION,
34
+ '__module__' : 'qwak.service_discovery.service_discovery_location_pb2'
35
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.ServiceLocation)
36
+ })
37
+ _sym_db.RegisterMessage(ServiceLocation)
38
+
39
+ Core = _reflection.GeneratedProtocolMessageType('Core', (_message.Message,), {
40
+ 'DESCRIPTOR' : _CORE,
41
+ '__module__' : 'qwak.service_discovery.service_discovery_location_pb2'
42
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.Core)
43
+ })
44
+ _sym_db.RegisterMessage(Core)
45
+
46
+ Edge = _reflection.GeneratedProtocolMessageType('Edge', (_message.Message,), {
47
+ 'DESCRIPTOR' : _EDGE,
48
+ '__module__' : 'qwak.service_discovery.service_discovery_location_pb2'
49
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.Edge)
50
+ })
51
+ _sym_db.RegisterMessage(Edge)
52
+
53
+ if _descriptor._USE_C_DESCRIPTORS == False:
54
+
55
+ DESCRIPTOR._options = None
56
+ DESCRIPTOR._serialized_options = b'\n)com.qwak.ai.service_discovery.location.v0P\001'
57
+ _SERVICELOCATIONDESCRIPTOR._serialized_start=95
58
+ _SERVICELOCATIONDESCRIPTOR._serialized_end=214
59
+ _SERVICELOCATION._serialized_start=217
60
+ _SERVICELOCATION._serialized_end=370
61
+ _CORE._serialized_start=372
62
+ _CORE._serialized_end=378
63
+ _EDGE._serialized_start=380
64
+ _EDGE._serialized_end=386
65
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,73 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import google.protobuf.descriptor
7
+ import google.protobuf.message
8
+ import sys
9
+
10
+ if sys.version_info >= (3, 8):
11
+ import typing as typing_extensions
12
+ else:
13
+ import typing_extensions
14
+
15
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
16
+
17
+ class ServiceLocationDescriptor(google.protobuf.message.Message):
18
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+
20
+ SERVICE_URL_FIELD_NUMBER: builtins.int
21
+ LOCATION_FIELD_NUMBER: builtins.int
22
+ service_url: builtins.str
23
+ @property
24
+ def location(self) -> global___ServiceLocation: ...
25
+ def __init__(
26
+ self,
27
+ *,
28
+ service_url: builtins.str = ...,
29
+ location: global___ServiceLocation | None = ...,
30
+ ) -> None: ...
31
+ def HasField(self, field_name: typing_extensions.Literal["location", b"location"]) -> builtins.bool: ...
32
+ def ClearField(self, field_name: typing_extensions.Literal["location", b"location", "service_url", b"service_url"]) -> None: ...
33
+
34
+ global___ServiceLocationDescriptor = ServiceLocationDescriptor
35
+
36
+ class ServiceLocation(google.protobuf.message.Message):
37
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
38
+
39
+ CORE_FIELD_NUMBER: builtins.int
40
+ EDGE_FIELD_NUMBER: builtins.int
41
+ @property
42
+ def core(self) -> global___Core: ...
43
+ @property
44
+ def edge(self) -> global___Edge: ...
45
+ def __init__(
46
+ self,
47
+ *,
48
+ core: global___Core | None = ...,
49
+ edge: global___Edge | None = ...,
50
+ ) -> None: ...
51
+ def HasField(self, field_name: typing_extensions.Literal["core", b"core", "edge", b"edge", "service_location", b"service_location"]) -> builtins.bool: ...
52
+ def ClearField(self, field_name: typing_extensions.Literal["core", b"core", "edge", b"edge", "service_location", b"service_location"]) -> None: ...
53
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["service_location", b"service_location"]) -> typing_extensions.Literal["core", "edge"] | None: ...
54
+
55
+ global___ServiceLocation = ServiceLocation
56
+
57
+ class Core(google.protobuf.message.Message):
58
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
59
+
60
+ def __init__(
61
+ self,
62
+ ) -> None: ...
63
+
64
+ global___Core = Core
65
+
66
+ class Edge(google.protobuf.message.Message):
67
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
68
+
69
+ def __init__(
70
+ self,
71
+ ) -> None: ...
72
+
73
+ global___Edge = Edge
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: frogml_proto.qwak.service_discovery/service_discovery_location_service.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf import descriptor as _descriptor
6
+ from google.protobuf import descriptor_pool as _descriptor_pool
7
+ from google.protobuf import message as _message
8
+ from google.protobuf import reflection as _reflection
9
+ from google.protobuf import symbol_database as _symbol_database
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from frogml_proto.qwak.service_discovery import service_discovery_location_pb2 as qwak_dot_service__discovery_dot_service__discovery__location__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n?qwak/service_discovery/service_discovery_location_service.proto\x12\"qwak.service_discovery.location.v0\x1a\x37qwak/service_discovery/service_discovery_location.proto\"\x16\n\x14GetServingUrlRequest\"o\n\x1cGetServingUrlRequestResponse\x12O\n\x08location\x18\x01 \x01(\x0b\x32=.qwak.service_discovery.location.v0.ServiceLocationDescriptor2\xa0\x07\n\x18LocationDiscoveryService\x12\x92\x01\n\x14GetOfflineServingUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponse\x12\x97\x01\n\x19GetDistributionManagerUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponse\x12\x93\x01\n\x15GetAnalyticsEngineUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponse\x12\x92\x01\n\x14GetMetricsGatewayUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponse\x12\x94\x01\n\x16GetFeaturesOperatorUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponse\x12\x92\x01\n\x14GetHostingGatewayUrl\x12\x38.qwak.service_discovery.location.v0.GetServingUrlRequest\x1a@.qwak.service_discovery.location.v0.GetServingUrlRequestResponseB-\n)com.qwak.ai.service_discovery.location.v0P\x01\x62\x06proto3')
19
+
20
+
21
+
22
+ _GETSERVINGURLREQUEST = DESCRIPTOR.message_types_by_name['GetServingUrlRequest']
23
+ _GETSERVINGURLREQUESTRESPONSE = DESCRIPTOR.message_types_by_name['GetServingUrlRequestResponse']
24
+ GetServingUrlRequest = _reflection.GeneratedProtocolMessageType('GetServingUrlRequest', (_message.Message,), {
25
+ 'DESCRIPTOR' : _GETSERVINGURLREQUEST,
26
+ '__module__' : 'qwak.service_discovery.service_discovery_location_service_pb2'
27
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.GetServingUrlRequest)
28
+ })
29
+ _sym_db.RegisterMessage(GetServingUrlRequest)
30
+
31
+ GetServingUrlRequestResponse = _reflection.GeneratedProtocolMessageType('GetServingUrlRequestResponse', (_message.Message,), {
32
+ 'DESCRIPTOR' : _GETSERVINGURLREQUESTRESPONSE,
33
+ '__module__' : 'qwak.service_discovery.service_discovery_location_service_pb2'
34
+ # @@protoc_insertion_point(class_scope:qwak.service_discovery.location.v0.GetServingUrlRequestResponse)
35
+ })
36
+ _sym_db.RegisterMessage(GetServingUrlRequestResponse)
37
+
38
+ _LOCATIONDISCOVERYSERVICE = DESCRIPTOR.services_by_name['LocationDiscoveryService']
39
+ if _descriptor._USE_C_DESCRIPTORS == False:
40
+
41
+ DESCRIPTOR._options = None
42
+ DESCRIPTOR._serialized_options = b'\n)com.qwak.ai.service_discovery.location.v0P\001'
43
+ _GETSERVINGURLREQUEST._serialized_start=160
44
+ _GETSERVINGURLREQUEST._serialized_end=182
45
+ _GETSERVINGURLREQUESTRESPONSE._serialized_start=184
46
+ _GETSERVINGURLREQUESTRESPONSE._serialized_end=295
47
+ _LOCATIONDISCOVERYSERVICE._serialized_start=298
48
+ _LOCATIONDISCOVERYSERVICE._serialized_end=1226
49
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,41 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import google.protobuf.descriptor
7
+ import google.protobuf.message
8
+ import frogml_proto.qwak.service_discovery.service_discovery_location_pb2
9
+ import sys
10
+
11
+ if sys.version_info >= (3, 8):
12
+ import typing as typing_extensions
13
+ else:
14
+ import typing_extensions
15
+
16
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
17
+
18
+ class GetServingUrlRequest(google.protobuf.message.Message):
19
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
20
+
21
+ def __init__(
22
+ self,
23
+ ) -> None: ...
24
+
25
+ global___GetServingUrlRequest = GetServingUrlRequest
26
+
27
+ class GetServingUrlRequestResponse(google.protobuf.message.Message):
28
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
29
+
30
+ LOCATION_FIELD_NUMBER: builtins.int
31
+ @property
32
+ def location(self) -> frogml_proto.qwak.service_discovery.service_discovery_location_pb2.ServiceLocationDescriptor: ...
33
+ def __init__(
34
+ self,
35
+ *,
36
+ location: frogml_proto.qwak.service_discovery.service_discovery_location_pb2.ServiceLocationDescriptor | None = ...,
37
+ ) -> None: ...
38
+ def HasField(self, field_name: typing_extensions.Literal["location", b"location"]) -> builtins.bool: ...
39
+ def ClearField(self, field_name: typing_extensions.Literal["location", b"location"]) -> None: ...
40
+
41
+ global___GetServingUrlRequestResponse = GetServingUrlRequestResponse