frogml-core 0.0.72__py3-none-any.whl → 0.0.74__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 (25) 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/model_loggers_utils.py +8 -22
  8. frogml_core/model_loggers/artifact_logger.py +7 -2
  9. frogml_core/model_loggers/data_logger.py +11 -6
  10. {frogml_core-0.0.72.dist-info → frogml_core-0.0.74.dist-info}/METADATA +1 -1
  11. {frogml_core-0.0.72.dist-info → frogml_core-0.0.74.dist-info}/RECORD +21 -16
  12. frogml_proto/qwak/service_discovery/service_discovery_location_pb2.py +65 -0
  13. frogml_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +73 -0
  14. frogml_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py +4 -0
  15. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +49 -0
  16. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +41 -0
  17. frogml_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py +231 -0
  18. frogml_services_mock/mocks/frogml_mocks.py +4 -0
  19. frogml_services_mock/mocks/location_discovery_service_api.py +104 -0
  20. frogml_services_mock/services_mock.py +16 -4
  21. frogml_core/feature_store/offline/_query_engine.py +0 -32
  22. frogml_core/feature_store/offline/athena/__init__.py +0 -0
  23. frogml_core/feature_store/offline/athena/athena_query_engine.py +0 -154
  24. frogml_core/feature_store/offline/client.py +0 -721
  25. {frogml_core-0.0.72.dist-info → frogml_core-0.0.74.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.72"
4
+ __version__ = "0.0.74"
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"]
@@ -4,9 +4,6 @@ from typing import Optional
4
4
 
5
5
  import requests
6
6
 
7
- from frogml_proto.qwak.builds.builds_orchestrator_service_pb2 import (
8
- AuthenticationDetail,
9
- )
10
7
  from frogml_core.clients.model_management.client import ModelsManagementClient
11
8
  from frogml_core.exceptions import FrogmlException
12
9
 
@@ -71,33 +68,22 @@ def fetch_build_id() -> Optional[str]:
71
68
  def upload_data(
72
69
  upload_url: str,
73
70
  data: bytes,
74
- authentication_details: Optional[AuthenticationDetail],
71
+ headers: dict,
75
72
  content_type: str = "text/plain",
76
- ) -> None:
73
+ ):
77
74
  """
78
75
  Upload data
79
- Args:
80
- upload_url: the url to upload to.
81
- data: the data to upload
82
- authentication_details: authentication details for upload data
83
- content_type: Uploaded content-type
76
+ :param upload_url: the url to upload to.
77
+ :param data: the data to upload
78
+ :param headers: authentication details for upload data
79
+ :param content_type: Uploaded content-type
84
80
  """
85
81
  try:
86
- auth = None
87
- if (
88
- authentication_details.WhichOneof("integration_type")
89
- == "jfrog_authentication_detail"
90
- ):
91
- auth = (
92
- authentication_details.jfrog_authentication_detail.username,
93
- authentication_details.jfrog_authentication_detail.token,
94
- )
95
-
82
+ headers["Content-Type"] = content_type
96
83
  http_response = requests.put( # nosec B113
97
84
  upload_url,
98
85
  data=data,
99
- headers={"content-type": content_type},
100
- auth=auth,
86
+ headers=headers,
101
87
  )
102
88
 
103
89
  if http_response.status_code not in [200, 201]:
@@ -11,6 +11,9 @@ from frogml_core.inner.model_loggers_utils import (
11
11
  validate_model,
12
12
  validate_tag,
13
13
  )
14
+ from frogml_proto.qwak.builds.builds_orchestrator_service_pb2 import (
15
+ GetBuildVersioningUploadURLResponse,
16
+ )
14
17
 
15
18
 
16
19
  def log_file(
@@ -38,7 +41,9 @@ def log_file(
38
41
  # Checking if called inside a model - then build id saved as environment variable or stays
39
42
  build_id = fetch_build_id()
40
43
 
41
- upload_url_response = BuildOrchestratorClient().get_build_versioning_upload_url(
44
+ upload_url_response: (
45
+ GetBuildVersioningUploadURLResponse
46
+ ) = BuildOrchestratorClient().get_build_versioning_upload_url(
42
47
  build_id=build_id,
43
48
  model_id=model_id,
44
49
  tag=tag,
@@ -53,7 +58,7 @@ def log_file(
53
58
  upload_data(
54
59
  upload_url_response.upload_url,
55
60
  f.read(),
56
- upload_url_response.authentication_detail,
61
+ upload_url_response.headers,
57
62
  )
58
63
 
59
64
 
@@ -12,6 +12,9 @@ from frogml_proto.qwak.builds.build_pb2 import (
12
12
  DataTableDefinition,
13
13
  )
14
14
  from frogml_proto.qwak.builds.build_url_pb2 import BuildVersioningTagsType
15
+ from frogml_proto.qwak.builds.builds_orchestrator_service_pb2 import (
16
+ GetBuildVersioningUploadURLResponse,
17
+ )
15
18
  from frogml_core.clients.build_orchestrator.client import BuildOrchestratorClient
16
19
  from frogml_core.clients.data_versioning.client import DataVersioningManagementClient
17
20
  from frogml_core.exceptions import FrogmlException
@@ -63,11 +66,13 @@ def log_data(
63
66
  build_id = fetch_build_id()
64
67
 
65
68
  client = BuildOrchestratorClient()
66
- upload_url_response = client.get_build_versioning_upload_url(
67
- build_id=build_id,
68
- model_id=model_id,
69
- tag=str(data_tag),
70
- tag_type=BuildVersioningTagsType.DATA_TAG_TYPE,
69
+ upload_url_response: GetBuildVersioningUploadURLResponse = (
70
+ client.get_build_versioning_upload_url(
71
+ build_id=build_id,
72
+ model_id=model_id,
73
+ tag=str(data_tag),
74
+ tag_type=BuildVersioningTagsType.DATA_TAG_TYPE,
75
+ )
71
76
  )
72
77
 
73
78
  string_buffer = StringIO()
@@ -76,7 +81,7 @@ def log_data(
76
81
  upload_url=upload_url_response.upload_url,
77
82
  data=gzip.compress(bytes(string_buffer.getvalue(), "utf-8")),
78
83
  content_type="text/plain",
79
- authentication_details=upload_url_response.authentication_detail,
84
+ headers=upload_url_response.headers,
80
85
  )
81
86
 
82
87
  dataframe_definition = DataTableDefinition(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: frogml-core
3
- Version: 0.0.72
3
+ Version: 0.0.74
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=3K96265rqyrsUYDxxsCrsjPeUs7MIy5XlgMXY9_BO5A,777
1
+ frogml_core/__init__.py,sha256=y9MsA0PqQlAWmz9MxiMFu0w_prsUtWeqpuP2Ng_J62Q,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
@@ -277,7 +275,7 @@ frogml_core/inner/di_configuration/config.yml,sha256=GUvaZMWIDIR_d7hFcPVG_kHdCwp
277
275
  frogml_core/inner/di_configuration/containers.py,sha256=epzNvWcHcfO07EV6aQxEaGIehqgKBUK2CGzKgk1HeEA,1148
278
276
  frogml_core/inner/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
279
277
  frogml_core/inner/instance_template/verify_template_id.py,sha256=3rmVpZyqDs7wUyXSmfJ8YjUK15Q4_H95J8Ba5E6KuA8,1951
280
- frogml_core/inner/model_loggers_utils.py,sha256=pGZ8Eh6PsoQTmDMKnI3ZVckl9n6ZVBslbuZdUnZFGbA,2967
278
+ frogml_core/inner/model_loggers_utils.py,sha256=NOSLcdKEoLIcK9Hx19KP1iGgzJu2NjWOGUh4yAuycTI,2465
281
279
  frogml_core/inner/provider.py,sha256=3evQnyp0v0enpvGGDyaZziusO4BGi-U9j1sno8DAHo4,70
282
280
  frogml_core/inner/runtime_di/__init__.py,sha256=HXqtejgH3J9TXjnEBT6cNwnTDPq6v3sTifcmfWiwyFA,312
283
281
  frogml_core/inner/runtime_di/containers.py,sha256=LbapepWFjBjkELEOTK7m7AJEfj4KENVDlpD7lv7zw6o,577
@@ -407,8 +405,8 @@ frogml_core/model/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
407
405
  frogml_core/model/utils/extract_wrapped_function.py,sha256=uIle1zL8vbmeS3PGAuaNFLIUQAsvpuzk3LlH-Teba94,320
408
406
  frogml_core/model/utils/feature_utils.py,sha256=ObIU4jLKOMEa3DWEyrXm1m3wC2wseAVwr-zxlSiojYk,2525
409
407
  frogml_core/model_loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
410
- frogml_core/model_loggers/artifact_logger.py,sha256=xD3XVN8_qHP40q1ZbZS28vgEQUMljwAQINTonzXN-VU,2975
411
- frogml_core/model_loggers/data_logger.py,sha256=DhFA43cbJJJc7J4xGx1lUF0MhC8do7TN8RxcOdzTFgk,5520
408
+ frogml_core/model_loggers/artifact_logger.py,sha256=7T06QL1keo6BTpIh76JtXRcNlZuIbqECz343kEw0Hfc,3128
409
+ frogml_core/model_loggers/data_logger.py,sha256=I3o2TkAGAnKuVWccPMlGL5-rg1e2UDHRc9cRSS8kqmc,5678
412
410
  frogml_core/model_loggers/model_logger.py,sha256=xDUIwRzeFAorzzR47ovyag5ohwuYZWp9fRWpLpMzcg4,863
413
411
  frogml_core/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
414
412
  frogml_core/testing/fixtures.py,sha256=tjWIvdZ2nIfNPs6VtUeGx5coJepQVMUWemKGtqUYPzM,318
@@ -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.72.dist-info/METADATA,sha256=F0pOBIedX8mbtzKDvMg0xLciGRTXE-mjzhMMrQAjb3I,2004
1086
- frogml_core-0.0.72.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1087
- frogml_core-0.0.72.dist-info/RECORD,,
1090
+ frogml_core-0.0.74.dist-info/METADATA,sha256=mJKWzqEde9DndjFpgBpUBWhwkkwZqlOWV6ecRV82UFo,2004
1091
+ frogml_core-0.0.74.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
1092
+ frogml_core-0.0.74.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)