luminarycloud 0.18.1__py3-none-any.whl → 0.19.1__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.
- luminarycloud/_client/client.py +21 -5
- luminarycloud/_client/http_client.py +168 -0
- luminarycloud/_client/rpc_error.py +1 -0
- luminarycloud/_client/tracing.py +72 -22
- luminarycloud/_helpers/_wait_for_mesh.py +5 -7
- luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.py +8 -8
- luminarycloud/_proto/api/v0/luminarycloud/inference/inference_pb2.pyi +9 -8
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.py +83 -25
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2.pyi +214 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.py +34 -0
- luminarycloud/_proto/api/v0/luminarycloud/physics_ai/physics_ai_pb2_grpc.pyi +12 -0
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.py +60 -60
- luminarycloud/_proto/api/v0/luminarycloud/simulation/simulation_pb2.pyi +5 -1
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.py +70 -40
- luminarycloud/_proto/api/v0/luminarycloud/thirdpartyintegration/onshape/onshape_pb2.pyi +64 -3
- luminarycloud/_proto/client/simulation_pb2.py +347 -332
- luminarycloud/_proto/client/simulation_pb2.pyi +55 -9
- luminarycloud/_proto/inferenceservice/inferenceservice_pb2.py +10 -10
- luminarycloud/_proto/inferenceservice/inferenceservice_pb2.pyi +9 -8
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.py +29 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2.pyi +7 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.py +70 -0
- luminarycloud/_proto/physicsaitrainingservice/physicsaitrainingservice_pb2_grpc.pyi +30 -0
- luminarycloud/enum/quantity_type.py +13 -0
- luminarycloud/exceptions.py +6 -0
- luminarycloud/params/enum/_enum_wrappers.py +28 -2
- luminarycloud/params/simulation/material/material_solid_.py +15 -1
- luminarycloud/params/simulation/sliding_interfaces_.py +8 -0
- luminarycloud/physics_ai/architectures.py +58 -0
- luminarycloud/physics_ai/inference.py +30 -25
- luminarycloud/physics_ai/training_jobs.py +37 -0
- luminarycloud/pipelines/api.py +50 -102
- luminarycloud/project.py +15 -43
- luminarycloud/simulation.py +2 -0
- luminarycloud/simulation_template.py +2 -1
- luminarycloud/tables.py +14 -15
- luminarycloud/vis/visualization.py +2 -2
- {luminarycloud-0.18.1.dist-info → luminarycloud-0.19.1.dist-info}/METADATA +1 -1
- {luminarycloud-0.18.1.dist-info → luminarycloud-0.19.1.dist-info}/RECORD +40 -39
- luminarycloud/_proto/api/v0/luminarycloud/pipelines/pipelines_pb2.py +0 -246
- luminarycloud/_proto/api/v0/luminarycloud/pipelines/pipelines_pb2.pyi +0 -420
- luminarycloud/_proto/api/v0/luminarycloud/pipelines/pipelines_pb2_grpc.py +0 -240
- luminarycloud/_proto/api/v0/luminarycloud/pipelines/pipelines_pb2_grpc.pyi +0 -90
- luminarycloud/enum/pipeline_job_status.py +0 -23
- {luminarycloud-0.18.1.dist-info → luminarycloud-0.19.1.dist-info}/WHEEL +0 -0
luminarycloud/_client/client.py
CHANGED
|
@@ -7,8 +7,11 @@ from collections.abc import Iterable
|
|
|
7
7
|
from typing import Any, Optional, Union
|
|
8
8
|
|
|
9
9
|
import grpc
|
|
10
|
+
import requests
|
|
11
|
+
from .http_client import HttpClient
|
|
10
12
|
|
|
11
13
|
from .._auth import Auth0Client
|
|
14
|
+
from .. import __version__
|
|
12
15
|
from .._proto.api.v0.luminarycloud.geometry.geometry_pb2_grpc import GeometryServiceStub
|
|
13
16
|
from .._proto.api.v0.luminarycloud.mesh.mesh_pb2_grpc import MeshServiceStub
|
|
14
17
|
from .._proto.api.v0.luminarycloud.output_node.output_node_pb2_grpc import OutputNodeServiceStub
|
|
@@ -28,7 +31,6 @@ from .._proto.api.v0.luminarycloud.simulation_template.simulation_template_pb2_g
|
|
|
28
31
|
from .._proto.api.v0.luminarycloud.named_variable_set.named_variable_set_pb2_grpc import (
|
|
29
32
|
NamedVariableSetServiceStub,
|
|
30
33
|
)
|
|
31
|
-
from .._proto.api.v0.luminarycloud.pipelines.pipelines_pb2_grpc import PipelineServiceStub
|
|
32
34
|
from .._proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2_grpc import (
|
|
33
35
|
PhysicsAiServiceStub,
|
|
34
36
|
)
|
|
@@ -47,7 +49,7 @@ from .config import LC_DOMAIN, LC_API_KEY
|
|
|
47
49
|
from .logging_interceptor import LoggingInterceptor
|
|
48
50
|
from .retry_interceptor import RetryInterceptor
|
|
49
51
|
from .rpc_error import rpc_error
|
|
50
|
-
from .tracing import add_instrumentation
|
|
52
|
+
from .tracing import add_http_instrumentation, add_instrumentation
|
|
51
53
|
|
|
52
54
|
logger = logging.getLogger(__name__)
|
|
53
55
|
|
|
@@ -65,7 +67,6 @@ class Client(
|
|
|
65
67
|
OutputDefinitionServiceStub,
|
|
66
68
|
StoppingConditionServiceStub,
|
|
67
69
|
NamedVariableSetServiceStub,
|
|
68
|
-
PipelineServiceStub,
|
|
69
70
|
PhysicsAiServiceStub,
|
|
70
71
|
InferenceServiceStub,
|
|
71
72
|
OnshapeServiceStub,
|
|
@@ -84,6 +85,8 @@ class Client(
|
|
|
84
85
|
----------
|
|
85
86
|
target : str
|
|
86
87
|
The URL of the API server.
|
|
88
|
+
http_target : str
|
|
89
|
+
The URL of the HTTP REST server. If not provided, it will default to the `target`.
|
|
87
90
|
localhost : bool
|
|
88
91
|
True if the API server is running locally.
|
|
89
92
|
grpc_channel_options : Optional[Iterable[tuple[str, str]]]
|
|
@@ -107,6 +110,7 @@ class Client(
|
|
|
107
110
|
def __init__(
|
|
108
111
|
self,
|
|
109
112
|
target: str = LC_DOMAIN,
|
|
113
|
+
http_target: str | None = None,
|
|
110
114
|
localhost: bool = False,
|
|
111
115
|
grpc_channel_options: Optional[Iterable[tuple[str, Union[str, int]]]] = None,
|
|
112
116
|
channel_credentials: Optional[grpc.ChannelCredentials] = None,
|
|
@@ -133,6 +137,15 @@ class Client(
|
|
|
133
137
|
)
|
|
134
138
|
self._context_tokens: list[Token] = []
|
|
135
139
|
self.__register_rpcs()
|
|
140
|
+
http_target = http_target or target
|
|
141
|
+
self.http = HttpClient(http_target, api_key, self._auth0_client)
|
|
142
|
+
add_http_instrumentation(
|
|
143
|
+
self.http.session,
|
|
144
|
+
self._apiserver_domain,
|
|
145
|
+
self.primary_domain,
|
|
146
|
+
self._auth0_client,
|
|
147
|
+
api_key,
|
|
148
|
+
)
|
|
136
149
|
|
|
137
150
|
# This cleanup handler is helpful for clean exiting e.g. if the authentication fails
|
|
138
151
|
def cleanup(self: "Client", *args: Any) -> None:
|
|
@@ -209,7 +222,11 @@ class Client(
|
|
|
209
222
|
RetryInterceptor(),
|
|
210
223
|
)
|
|
211
224
|
return add_instrumentation(
|
|
212
|
-
intercepted_channel,
|
|
225
|
+
intercepted_channel,
|
|
226
|
+
self._apiserver_domain,
|
|
227
|
+
self.primary_domain,
|
|
228
|
+
self._auth0_client,
|
|
229
|
+
api_key,
|
|
213
230
|
)
|
|
214
231
|
|
|
215
232
|
def __register_rpcs(self) -> None:
|
|
@@ -224,7 +241,6 @@ class Client(
|
|
|
224
241
|
OutputNodeServiceStub.__init__(self, self._channel)
|
|
225
242
|
OutputDefinitionServiceStub.__init__(self, self._channel)
|
|
226
243
|
StoppingConditionServiceStub.__init__(self, self._channel)
|
|
227
|
-
PipelineServiceStub.__init__(self, self._channel)
|
|
228
244
|
PhysicsAiServiceStub.__init__(self, self._channel)
|
|
229
245
|
InferenceServiceStub.__init__(self, self._channel)
|
|
230
246
|
NamedVariableSetServiceStub.__init__(self, self._channel)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import MutableMapping
|
|
3
|
+
import requests
|
|
4
|
+
from requests.adapters import HTTPAdapter
|
|
5
|
+
from urllib3.util.retry import Retry
|
|
6
|
+
|
|
7
|
+
from .._auth import Auth0Client
|
|
8
|
+
from .. import __version__
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
MAX_ERROR_BODY_LENGTH = 1000
|
|
12
|
+
REDACTED_HEADERS = ["Authorization", "x-api-key"]
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class HTTPErrorWithBody(requests.HTTPError):
|
|
18
|
+
"""Custom HTTPError that includes response body text."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, response: requests.Response, *args, **kwargs):
|
|
21
|
+
body_preview = response.text[:MAX_ERROR_BODY_LENGTH] + (
|
|
22
|
+
"... [truncated]" if len(response.text) > MAX_ERROR_BODY_LENGTH else ""
|
|
23
|
+
)
|
|
24
|
+
message = f"{response.status_code} Error for {response.url}\nBody: {body_preview}"
|
|
25
|
+
super().__init__(message, response=response, *args, **kwargs)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class HttpClient:
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
base_url: str,
|
|
32
|
+
api_key: str | None = None,
|
|
33
|
+
auth0_client: Auth0Client | None = None,
|
|
34
|
+
*,
|
|
35
|
+
timeout: int = 10,
|
|
36
|
+
retries: int = 3,
|
|
37
|
+
backoff_factor: float = 0.3,
|
|
38
|
+
retriable_status_codes: tuple = (500, 502, 503, 504, 429),
|
|
39
|
+
log_body: bool = True,
|
|
40
|
+
max_body_log_length: int = 500,
|
|
41
|
+
):
|
|
42
|
+
if not base_url.startswith("http"):
|
|
43
|
+
base_url = f"https://{base_url}"
|
|
44
|
+
self.base_url = base_url.rstrip("/")
|
|
45
|
+
self.session = requests.Session()
|
|
46
|
+
self.session.headers["x-client-version"] = f"python-sdk-v{__version__}"
|
|
47
|
+
if api_key:
|
|
48
|
+
self.session.headers["x-api-key"] = api_key
|
|
49
|
+
self.auth0_client = None
|
|
50
|
+
elif auth0_client:
|
|
51
|
+
self.auth0_client = auth0_client
|
|
52
|
+
else:
|
|
53
|
+
raise ValueError("Either api_key or auth0_client must be provided")
|
|
54
|
+
self.timeout = timeout
|
|
55
|
+
self.log_body = log_body
|
|
56
|
+
self.max_body_log_length = max_body_log_length
|
|
57
|
+
|
|
58
|
+
# Retry config
|
|
59
|
+
retry = Retry(
|
|
60
|
+
total=retries,
|
|
61
|
+
read=retries,
|
|
62
|
+
connect=retries,
|
|
63
|
+
backoff_factor=backoff_factor,
|
|
64
|
+
status_forcelist=retriable_status_codes,
|
|
65
|
+
allowed_methods=frozenset(["HEAD", "GET", "POST", "PUT", "PATCH", "DELETE"]),
|
|
66
|
+
raise_on_status=False,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
adapter = HTTPAdapter(max_retries=retry)
|
|
70
|
+
self.session.mount("http://", adapter)
|
|
71
|
+
self.session.mount("https://", adapter)
|
|
72
|
+
|
|
73
|
+
def _url(self, path: str) -> str:
|
|
74
|
+
return f"{self.base_url}/{path.lstrip('/')}"
|
|
75
|
+
|
|
76
|
+
def _sanitize_headers(
|
|
77
|
+
self, headers: MutableMapping[str, str | bytes]
|
|
78
|
+
) -> MutableMapping[str, str | bytes]:
|
|
79
|
+
clean: MutableMapping[str, str | bytes] = {}
|
|
80
|
+
for k, v in headers.items():
|
|
81
|
+
if k in REDACTED_HEADERS:
|
|
82
|
+
clean[k] = "[REDACTED]"
|
|
83
|
+
else:
|
|
84
|
+
clean[k] = v
|
|
85
|
+
return clean
|
|
86
|
+
|
|
87
|
+
def _log_request(self, method: str, url: str, kwargs: dict):
|
|
88
|
+
if not logger.isEnabledFor(logging.DEBUG):
|
|
89
|
+
return
|
|
90
|
+
line = f"REQUEST {method} {url}\nHeaders: {self._sanitize_headers(self.session.headers)}"
|
|
91
|
+
if self.log_body:
|
|
92
|
+
body = kwargs.get("json") or kwargs.get("data")
|
|
93
|
+
body_str = str(body)
|
|
94
|
+
if body_str and len(body_str) > self.max_body_log_length:
|
|
95
|
+
body_str = body_str[: self.max_body_log_length] + "... [truncated]"
|
|
96
|
+
line += f"\nBody: {body_str}"
|
|
97
|
+
logger.debug(line)
|
|
98
|
+
|
|
99
|
+
def _log_response(self, resp: requests.Response):
|
|
100
|
+
if not logger.isEnabledFor(logging.DEBUG):
|
|
101
|
+
return
|
|
102
|
+
line = f"RESPONSE {resp.status_code} {resp.url}\nHeaders: {resp.headers}"
|
|
103
|
+
if self.log_body:
|
|
104
|
+
body_str = resp.text
|
|
105
|
+
if body_str and len(body_str) > self.max_body_log_length:
|
|
106
|
+
body_str = body_str[: self.max_body_log_length] + "... [truncated]"
|
|
107
|
+
line += f"\nBody: {body_str}"
|
|
108
|
+
logger.debug(line)
|
|
109
|
+
|
|
110
|
+
def _authenticate_session(self) -> None:
|
|
111
|
+
if self.auth0_client:
|
|
112
|
+
self.session.headers["Authorization"] = (
|
|
113
|
+
f"Bearer {self.auth0_client.fetch_access_token()}"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def _request(self, method: str, path: str, **kwargs) -> requests.Response:
|
|
117
|
+
self._authenticate_session()
|
|
118
|
+
url = self._url(path)
|
|
119
|
+
self._log_request(method, url, kwargs)
|
|
120
|
+
resp = self.session.request(method, url, timeout=self.timeout, **kwargs)
|
|
121
|
+
self._log_response(resp)
|
|
122
|
+
return resp
|
|
123
|
+
|
|
124
|
+
def _json_or_error(self, resp: requests.Response) -> dict:
|
|
125
|
+
if resp.status_code >= 400:
|
|
126
|
+
raise HTTPErrorWithBody(resp)
|
|
127
|
+
return resp.json() if resp.text else {}
|
|
128
|
+
|
|
129
|
+
# ---- Raw methods ----
|
|
130
|
+
def raw_get(self, path: str, **kwargs) -> requests.Response:
|
|
131
|
+
return self._request("GET", path, **kwargs)
|
|
132
|
+
|
|
133
|
+
def raw_post(self, path: str, body: dict | None = None, **kwargs) -> requests.Response:
|
|
134
|
+
return self._request("POST", path, json=body, **kwargs)
|
|
135
|
+
|
|
136
|
+
def raw_put(self, path: str, body: dict | None = None, **kwargs) -> requests.Response:
|
|
137
|
+
return self._request("PUT", path, json=body, **kwargs)
|
|
138
|
+
|
|
139
|
+
def raw_patch(self, path: str, body: dict | None = None, **kwargs) -> requests.Response:
|
|
140
|
+
return self._request("PATCH", path, json=body, **kwargs)
|
|
141
|
+
|
|
142
|
+
def raw_delete(self, path: str, **kwargs) -> requests.Response:
|
|
143
|
+
return self._request("DELETE", path, **kwargs)
|
|
144
|
+
|
|
145
|
+
def raw_head(self, path: str, **kwargs) -> requests.Response:
|
|
146
|
+
return self._request("HEAD", path, **kwargs)
|
|
147
|
+
|
|
148
|
+
# ---- JSON convenience methods ----
|
|
149
|
+
def get(self, path: str, **kwargs) -> dict:
|
|
150
|
+
return self._json_or_error(self.raw_get(path, **kwargs))
|
|
151
|
+
|
|
152
|
+
def post(self, path: str, body: dict | None = None, **kwargs) -> dict:
|
|
153
|
+
return self._json_or_error(self.raw_post(path, body, **kwargs))
|
|
154
|
+
|
|
155
|
+
def put(self, path: str, body: dict | None = None, **kwargs) -> dict:
|
|
156
|
+
return self._json_or_error(self.raw_put(path, body, **kwargs))
|
|
157
|
+
|
|
158
|
+
def patch(self, path: str, body: dict | None = None, **kwargs) -> dict:
|
|
159
|
+
return self._json_or_error(self.raw_patch(path, body, **kwargs))
|
|
160
|
+
|
|
161
|
+
def delete(self, path: str, **kwargs) -> dict:
|
|
162
|
+
return self._json_or_error(self.raw_delete(path, **kwargs))
|
|
163
|
+
|
|
164
|
+
def head(self, path: str, **kwargs) -> dict:
|
|
165
|
+
resp = self.raw_head(path, **kwargs)
|
|
166
|
+
if resp.status_code >= 400:
|
|
167
|
+
raise HTTPErrorWithBody(resp)
|
|
168
|
+
return dict(resp.headers)
|
|
@@ -15,6 +15,7 @@ _CODE_TO_EXCEPTION: dict[grpc.StatusCode, type[exceptions.RpcError]] = {
|
|
|
15
15
|
grpc.StatusCode.NOT_FOUND: exceptions.NotFoundError,
|
|
16
16
|
grpc.StatusCode.ALREADY_EXISTS: exceptions.AlreadyExistsError,
|
|
17
17
|
grpc.StatusCode.FAILED_PRECONDITION: exceptions.FailedPreconditionError,
|
|
18
|
+
grpc.StatusCode.DEADLINE_EXCEEDED: exceptions.DeadlineExceededError,
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
|
luminarycloud/_client/tracing.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# Copyright 2023-2025 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
2
|
import logging
|
|
3
|
-
import re
|
|
4
3
|
from typing import Optional, Any
|
|
5
4
|
|
|
6
5
|
import requests
|
|
@@ -13,6 +12,13 @@ from opentelemetry.sdk.trace.export import (
|
|
|
13
12
|
BatchSpanProcessor,
|
|
14
13
|
SpanExportResult,
|
|
15
14
|
)
|
|
15
|
+
from opentelemetry.trace.status import Status, StatusCode
|
|
16
|
+
from opentelemetry.propagate import inject
|
|
17
|
+
from opentelemetry.semconv.attributes.http_attributes import (
|
|
18
|
+
HTTP_REQUEST_METHOD,
|
|
19
|
+
HTTP_RESPONSE_STATUS_CODE,
|
|
20
|
+
)
|
|
21
|
+
from opentelemetry.semconv.attributes.url_attributes import URL_FULL
|
|
16
22
|
|
|
17
23
|
from .logging_interceptor import _get_ai_notebook_id
|
|
18
24
|
from .. import __version__
|
|
@@ -109,13 +115,19 @@ def _get_trace_resource() -> Resource:
|
|
|
109
115
|
return resource
|
|
110
116
|
|
|
111
117
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
def _create_tracer_provider(
|
|
119
|
+
apiserver_domain: str,
|
|
120
|
+
primary_domain: str,
|
|
115
121
|
auth0_client: Optional[Auth0Client],
|
|
116
122
|
api_key: Optional[str],
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
) -> TracerProvider:
|
|
124
|
+
endpoint = _get_collector_endpoint(primary_domain)
|
|
125
|
+
|
|
126
|
+
# skip SSL verification for internal domains
|
|
127
|
+
verify_ssl = ".int." not in apiserver_domain
|
|
128
|
+
if not verify_ssl:
|
|
129
|
+
logger.debug("SSL verification will be skipped when exporting traces.")
|
|
130
|
+
|
|
119
131
|
provider = TracerProvider(resource=_get_trace_resource())
|
|
120
132
|
if api_key:
|
|
121
133
|
processor = BatchSpanProcessor(
|
|
@@ -136,10 +148,7 @@ def _add_instrumentation(
|
|
|
136
148
|
)
|
|
137
149
|
)
|
|
138
150
|
provider.add_span_processor(processor)
|
|
139
|
-
return
|
|
140
|
-
channel,
|
|
141
|
-
client_interceptor(tracer_provider=provider), # type: ignore[no-untyped-call]
|
|
142
|
-
)
|
|
151
|
+
return provider
|
|
143
152
|
|
|
144
153
|
|
|
145
154
|
def add_instrumentation(
|
|
@@ -165,18 +174,59 @@ def add_instrumentation(
|
|
|
165
174
|
logger.debug("Tracing is disabled for this gRPC client.")
|
|
166
175
|
return channel
|
|
167
176
|
|
|
168
|
-
endpoint = _get_collector_endpoint(primary_domain)
|
|
169
|
-
|
|
170
|
-
# skip SSL verification for internal domains
|
|
171
|
-
verify_ssl = ".int." not in apiserver_domain
|
|
172
|
-
if not verify_ssl:
|
|
173
|
-
logger.debug("SSL verification will be skipped when exporting traces.")
|
|
174
|
-
|
|
175
177
|
logger.debug("Adding tracing instrumentation to gRPC client.")
|
|
176
|
-
|
|
178
|
+
provider = _create_tracer_provider(apiserver_domain, primary_domain, auth0_client, api_key)
|
|
179
|
+
return intercept_channel(
|
|
177
180
|
channel,
|
|
178
|
-
|
|
179
|
-
auth0_client,
|
|
180
|
-
api_key,
|
|
181
|
-
verify_ssl,
|
|
181
|
+
client_interceptor(tracer_provider=provider),
|
|
182
182
|
)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def add_http_instrumentation(
|
|
186
|
+
session: requests.Session,
|
|
187
|
+
apiserver_domain: str,
|
|
188
|
+
primary_domain: Optional[str],
|
|
189
|
+
auth0_client: Optional[Auth0Client],
|
|
190
|
+
api_key: Optional[str] = None,
|
|
191
|
+
) -> None:
|
|
192
|
+
"""Add tracing instrumentation to a requests.Session.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
session: The requests.Session to instrument.
|
|
196
|
+
apiserver_domain: The domain of the API server.
|
|
197
|
+
primary_domain: The primary domain to use for tracing.
|
|
198
|
+
auth0_client: The Auth0 client to use for authentication.
|
|
199
|
+
api_key: Optional API key to use for authentication instead of Auth0.
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
None. The session is modified in place.
|
|
203
|
+
"""
|
|
204
|
+
if primary_domain is None or "itar" in primary_domain:
|
|
205
|
+
logger.debug("Tracing is disabled for this HTTP client.")
|
|
206
|
+
return
|
|
207
|
+
|
|
208
|
+
logger.debug("Adding tracing instrumentation to HTTP client.")
|
|
209
|
+
provider = _create_tracer_provider(apiserver_domain, primary_domain, auth0_client, api_key)
|
|
210
|
+
tracer = provider.get_tracer(__name__)
|
|
211
|
+
|
|
212
|
+
original_send = session.send
|
|
213
|
+
|
|
214
|
+
def traced_send(request, **kwargs):
|
|
215
|
+
with tracer.start_as_current_span(f"HTTP {request.method}") as span:
|
|
216
|
+
span.set_attribute(HTTP_REQUEST_METHOD, request.method)
|
|
217
|
+
span.set_attribute(URL_FULL, request.url)
|
|
218
|
+
|
|
219
|
+
inject(request.headers)
|
|
220
|
+
|
|
221
|
+
try:
|
|
222
|
+
response = original_send(request, **kwargs)
|
|
223
|
+
span.set_attribute(HTTP_RESPONSE_STATUS_CODE, response.status_code)
|
|
224
|
+
if response.status_code >= 400:
|
|
225
|
+
span.set_status(Status(StatusCode.ERROR))
|
|
226
|
+
return response
|
|
227
|
+
except Exception as exc:
|
|
228
|
+
span.set_status(Status(StatusCode.ERROR))
|
|
229
|
+
span.record_exception(exc)
|
|
230
|
+
raise
|
|
231
|
+
|
|
232
|
+
session.send = traced_send
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright 2023-2024 Luminary Cloud, Inc. All Rights Reserved.
|
|
2
2
|
import logging
|
|
3
3
|
from time import time, sleep
|
|
4
|
-
import
|
|
4
|
+
from luminarycloud.exceptions import DeadlineExceededError
|
|
5
5
|
|
|
6
6
|
from .._proto.api.v0.luminarycloud.mesh.mesh_pb2 import Mesh, GetMeshRequest
|
|
7
7
|
from .._client import Client
|
|
@@ -43,12 +43,10 @@ def wait_for_mesh(
|
|
|
43
43
|
# in some cases, so we'll add a deadline and catch deadline exceeded errors to retry.
|
|
44
44
|
try:
|
|
45
45
|
response = client.GetMesh(GetMeshRequest(id=mesh.id), timeout=15)
|
|
46
|
-
except
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
continue
|
|
51
|
-
raise e
|
|
46
|
+
except DeadlineExceededError:
|
|
47
|
+
logger.error("Deadline exceeded while waiting for mesh.")
|
|
48
|
+
sleep(max(0, min(interval_seconds, deadline - time())))
|
|
49
|
+
continue
|
|
52
50
|
status = response.mesh.status
|
|
53
51
|
if status in [Mesh.MESH_STATUS_COMPLETED, Mesh.MESH_STATUS_FAILED]:
|
|
54
52
|
return status
|
|
@@ -18,7 +18,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
|
|
18
18
|
from luminarycloud._proto.inferenceservice import inferenceservice_pb2 as proto_dot_inferenceservice_dot_inferenceservice__pb2
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n4proto/api/v0/luminarycloud/inference/inference.proto\x12-luminary.proto.api.v0.luminarycloud.inference\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a-proto/inferenceservice/inferenceservice.proto\"\
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n4proto/api/v0/luminarycloud/inference/inference.proto\x12-luminary.proto.api.v0.luminarycloud.inference\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a-proto/inferenceservice/inferenceservice.proto\"\xab\x01\n CreateInferenceServiceJobRequest\x12\x14\n\x0c\x61rtifact_url\x18\x01 \x01(\t\x12\x0f\n\x07stl_url\x18\x02 \x01(\t\x12\x10\n\x08settings\x18\x07 \x01(\x0c\x12\x12\n\nconditions\x18\x03 \x01(\x0c\x12\x12\n\nproject_id\x18\x05 \x01(\t\x12 \n\x18write_visualization_data\x18\x06 \x01(\x08J\x04\x08\x04\x10\x05\"\x8e\x01\n!CreateInferenceServiceJobResponse\x12\x45\n\x06status\x18\x01 \x01(\x0e\x32\x35.luminary.proto.api.v0.luminarycloud.inference.Status\x12\x15\n\x08response\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_response*D\n\x06Status\x12\x12\n\x0eSTATUS_PENDING\x10\x00\x12\x12\n\x0eSTATUS_SUCCESS\x10\x01\x12\x12\n\x0eSTATUS_FAILURE\x10\x02\x32\xea\x01\n\x10InferenceService\x12\xd5\x01\n\x19\x43reateInferenceServiceJob\x12O.luminary.proto.api.v0.luminarycloud.inference.CreateInferenceServiceJobRequest\x1aP.luminary.proto.api.v0.luminarycloud.inference.CreateInferenceServiceJobResponse\"\x15\x82\xd3\xe4\x93\x02\x0f\"\r/v0/inferenceB=Z;luminarycloud.com/core/proto/api/v0/luminarycloud/inferenceb\x06proto3')
|
|
22
22
|
|
|
23
23
|
_STATUS = DESCRIPTOR.enum_types_by_name['Status']
|
|
24
24
|
Status = enum_type_wrapper.EnumTypeWrapper(_STATUS)
|
|
@@ -50,12 +50,12 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
50
50
|
DESCRIPTOR._serialized_options = b'Z;luminarycloud.com/core/proto/api/v0/luminarycloud/inference'
|
|
51
51
|
_INFERENCESERVICE.methods_by_name['CreateInferenceServiceJob']._options = None
|
|
52
52
|
_INFERENCESERVICE.methods_by_name['CreateInferenceServiceJob']._serialized_options = b'\202\323\344\223\002\017\"\r/v0/inference'
|
|
53
|
-
_STATUS._serialized_start=
|
|
54
|
-
_STATUS._serialized_end=
|
|
53
|
+
_STATUS._serialized_start=528
|
|
54
|
+
_STATUS._serialized_end=596
|
|
55
55
|
_CREATEINFERENCESERVICEJOBREQUEST._serialized_start=210
|
|
56
|
-
_CREATEINFERENCESERVICEJOBREQUEST._serialized_end=
|
|
57
|
-
_CREATEINFERENCESERVICEJOBRESPONSE._serialized_start=
|
|
58
|
-
_CREATEINFERENCESERVICEJOBRESPONSE._serialized_end=
|
|
59
|
-
_INFERENCESERVICE._serialized_start=
|
|
60
|
-
_INFERENCESERVICE._serialized_end=
|
|
56
|
+
_CREATEINFERENCESERVICEJOBREQUEST._serialized_end=381
|
|
57
|
+
_CREATEINFERENCESERVICEJOBRESPONSE._serialized_start=384
|
|
58
|
+
_CREATEINFERENCESERVICEJOBRESPONSE._serialized_end=526
|
|
59
|
+
_INFERENCESERVICE._serialized_start=599
|
|
60
|
+
_INFERENCESERVICE._serialized_end=833
|
|
61
61
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -38,16 +38,17 @@ class CreateInferenceServiceJobRequest(google.protobuf.message.Message):
|
|
|
38
38
|
|
|
39
39
|
ARTIFACT_URL_FIELD_NUMBER: builtins.int
|
|
40
40
|
STL_URL_FIELD_NUMBER: builtins.int
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
SETTINGS_FIELD_NUMBER: builtins.int
|
|
42
|
+
CONDITIONS_FIELD_NUMBER: builtins.int
|
|
43
43
|
PROJECT_ID_FIELD_NUMBER: builtins.int
|
|
44
44
|
WRITE_VISUALIZATION_DATA_FIELD_NUMBER: builtins.int
|
|
45
45
|
artifact_url: builtins.str
|
|
46
46
|
"""Eventually should be a model version id"""
|
|
47
47
|
stl_url: builtins.str
|
|
48
|
-
|
|
49
|
-
"""JSON encoded
|
|
50
|
-
|
|
48
|
+
settings: builtins.bytes
|
|
49
|
+
"""JSON encoded settings, like stencil_size."""
|
|
50
|
+
conditions: builtins.bytes
|
|
51
|
+
"""JSON encoded conditions, like alpha, beta, etc."""
|
|
51
52
|
project_id: builtins.str
|
|
52
53
|
write_visualization_data: builtins.bool
|
|
53
54
|
def __init__(
|
|
@@ -55,12 +56,12 @@ class CreateInferenceServiceJobRequest(google.protobuf.message.Message):
|
|
|
55
56
|
*,
|
|
56
57
|
artifact_url: builtins.str = ...,
|
|
57
58
|
stl_url: builtins.str = ...,
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
settings: builtins.bytes = ...,
|
|
60
|
+
conditions: builtins.bytes = ...,
|
|
60
61
|
project_id: builtins.str = ...,
|
|
61
62
|
write_visualization_data: builtins.bool = ...,
|
|
62
63
|
) -> None: ...
|
|
63
|
-
def ClearField(self, field_name: typing_extensions.Literal["artifact_url", b"artifact_url", "
|
|
64
|
+
def ClearField(self, field_name: typing_extensions.Literal["artifact_url", b"artifact_url", "conditions", b"conditions", "project_id", b"project_id", "settings", b"settings", "stl_url", b"stl_url", "write_visualization_data", b"write_visualization_data"]) -> None: ...
|
|
64
65
|
|
|
65
66
|
global___CreateInferenceServiceJobRequest = CreateInferenceServiceJobRequest
|
|
66
67
|
|
|
@@ -16,18 +16,30 @@ _sym_db = _symbol_database.Default()
|
|
|
16
16
|
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
|
|
17
17
|
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
|
18
18
|
from luminarycloud._proto.api.v0.luminarycloud.common import common_pb2 as proto_dot_api_dot_v0_dot_luminarycloud_dot_common_dot_common__pb2
|
|
19
|
+
from luminarycloud._proto.base import base_pb2 as proto_dot_base_dot_base__pb2
|
|
19
20
|
from luminarycloud._proto.quantity import quantity_pb2 as proto_dot_quantity_dot_quantity__pb2
|
|
20
21
|
|
|
21
22
|
|
|
22
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6proto/api/v0/luminarycloud/physics_ai/physics_ai.proto\x12.luminary.proto.api.v0.luminarycloud.physics_ai\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\x1a\x1dproto/quantity/quantity.proto\"\xad\x01\n\x1cPhysicsAiArchitectureVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tchangelog\x18\x03 \x01(\t\x12`\n\x0flifecycle_state\x18\x04 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\xa6\x01\n\x15PhysicsAiArchitecture\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12^\n\x08versions\x18\x04 \x03(\x0b\x32L.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitectureVersion\"\x1a\n\x18ListArchitecturesRequest\"y\n\x19ListArchitecturesResponse\x12\\\n\rarchitectures\x18\x01 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitecture\"\x93\x01\n\x15PhysicsAiModelVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12`\n\x0flifecycle_state\x18\x03 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\x98\x01\n\x0ePhysicsAiModel\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12W\n\x08versions\x18\x04 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModelVersion\"\x1d\n\x1bListPretrainedModelsRequest\"n\n\x1cListPretrainedModelsResponse\x12N\n\x06models\x18\x01 \x03(\x0b\x32>.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModel\"\xa3\x02\n\x1fGetSolutionDataPhysicsAIRequest\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x18\n\x10\x65xclude_surfaces\x18\x02 \x03(\t\x12\x12\n\nfill_holes\x18\x03 \x01(\x02\x12\x45\n\x16surface_fields_to_keep\x18\x04 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x44\n\x15volume_fields_to_keep\x18\x05 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x16\n\x0eprocess_volume\x18\x06 \x01(\x08\x12\x18\n\x10single_precision\x18\x07 \x01(\x08\"b\n GetSolutionDataPhysicsAIResponse\x12>\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File*\xb4\x01\n\x17PhysicsAiLifecycleState\x12\x1f\n\x1bLIFECYCLE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bLIFECYCLE_STATE_DEVELOPMENT\x10\x01\x12\x1a\n\x16LIFECYCLE_STATE_ACTIVE\x10\x02\x12\x1e\n\x1aLIFECYCLE_STATE_DEPRECATED\x10\x03\x12\x1b\n\x17LIFECYCLE_STATE_RETIRED\x10\x04\x32\
|
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6proto/api/v0/luminarycloud/physics_ai/physics_ai.proto\x12.luminary.proto.api.v0.luminarycloud.physics_ai\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a.proto/api/v0/luminarycloud/common/common.proto\x1a\x15proto/base/base.proto\x1a\x1dproto/quantity/quantity.proto\"\xad\x01\n\x1cPhysicsAiArchitectureVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tchangelog\x18\x03 \x01(\t\x12`\n\x0flifecycle_state\x18\x04 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\xa6\x01\n\x15PhysicsAiArchitecture\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12^\n\x08versions\x18\x04 \x03(\x0b\x32L.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitectureVersion\"\x1a\n\x18ListArchitecturesRequest\"y\n\x19ListArchitecturesResponse\x12\\\n\rarchitectures\x18\x01 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiArchitecture\"\x93\x01\n\x15PhysicsAiModelVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12`\n\x0flifecycle_state\x18\x03 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiLifecycleState\"\x98\x01\n\x0ePhysicsAiModel\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12W\n\x08versions\x18\x04 \x03(\x0b\x32\x45.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModelVersion\"\x1d\n\x1bListPretrainedModelsRequest\"n\n\x1cListPretrainedModelsResponse\x12N\n\x06models\x18\x01 \x03(\x0b\x32>.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiModel\"\xa3\x02\n\x1fGetSolutionDataPhysicsAIRequest\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x18\n\x10\x65xclude_surfaces\x18\x02 \x03(\t\x12\x12\n\nfill_holes\x18\x03 \x01(\x02\x12\x45\n\x16surface_fields_to_keep\x18\x04 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x44\n\x15volume_fields_to_keep\x18\x05 \x03(\x0e\x32%.luminary.proto.quantity.QuantityType\x12\x16\n\x0eprocess_volume\x18\x06 \x01(\x08\x12\x18\n\x10single_precision\x18\x07 \x01(\x08\"b\n GetSolutionDataPhysicsAIResponse\x12>\n\x04\x66ile\x18\x01 \x01(\x0b\x32\x30.luminary.proto.api.v0.luminarycloud.common.File\";\n\x10TrainingSolution\x12\x13\n\x0bsolution_id\x18\x01 \x01(\t\x12\x12\n\ndata_split\x18\x02 \x01(\t\"\x9a\x05\n\x14PhysicsAiTrainingJob\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1f\n\x17\x61rchitecture_version_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x17\n\x0ftraining_config\x18\x04 \x01(\t\x12i\n\x19training_data_source_type\x18\x05 \x01(\x0e\x32\x46.luminary.proto.api.v0.luminarycloud.physics_ai.TrainingDataSourceType\x12\x1c\n\x14training_description\x18\x06 \x01(\t\x12\x1c\n\x14\x65xternal_dataset_uri\x18\x07 \x01(\t\x12\x64\n\x13initialization_type\x18\x08 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.ModelInitializationType\x12\x1d\n\x15\x62\x61se_model_version_id\x18\t \x01(\t\x12.\n\x06status\x18\n \x01(\x0b\x32\x1e.luminary.proto.base.JobStatus\x12\x15\n\rerror_message\x18\x0b \x01(\t\x12\x1f\n\x17output_model_version_id\x18\x0c \x01(\t\x12\x31\n\rcreation_time\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x33\n\x0f\x63ompletion_time\x18\x0f \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xf3\x02\n\x18SubmitTrainingJobRequest\x12\x1f\n\x17\x61rchitecture_version_id\x18\x01 \x01(\t\x12\x1c\n\x14training_description\x18\x02 \x01(\t\x12\x1c\n\x14\x65xternal_dataset_uri\x18\x03 \x01(\t\x12\\\n\x12training_solutions\x18\x04 \x03(\x0b\x32@.luminary.proto.api.v0.luminarycloud.physics_ai.TrainingSolution\x12\x17\n\x0ftraining_config\x18\x05 \x01(\t\x12\x64\n\x13initialization_type\x18\x06 \x01(\x0e\x32G.luminary.proto.api.v0.luminarycloud.physics_ai.ModelInitializationType\x12\x1d\n\x15\x62\x61se_model_version_id\x18\x07 \x01(\t\"w\n\x19SubmitTrainingJobResponse\x12Z\n\x0ctraining_job\x18\x01 \x01(\x0b\x32\x44.luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiTrainingJob*\xb4\x01\n\x17PhysicsAiLifecycleState\x12\x1f\n\x1bLIFECYCLE_STATE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bLIFECYCLE_STATE_DEVELOPMENT\x10\x01\x12\x1a\n\x16LIFECYCLE_STATE_ACTIVE\x10\x02\x12\x1e\n\x1aLIFECYCLE_STATE_DEPRECATED\x10\x03\x12\x1b\n\x17LIFECYCLE_STATE_RETIRED\x10\x04*\xa7\x01\n\x16TrainingDataSourceType\x12)\n%TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED\x10\x00\x12\x32\n.TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS\x10\x01\x12.\n*TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET\x10\x02*\xc1\x01\n\x17ModelInitializationType\x12)\n%MODEL_INITIALIZATION_TYPE_UNSPECIFIED\x10\x00\x12$\n MODEL_INITIALIZATION_TYPE_RANDOM\x10\x01\x12+\n\'MODEL_INITIALIZATION_TYPE_MODEL_VERSION\x10\x02\x12(\n$MODEL_INITIALIZATION_TYPE_CHECKPOINT\x10\x03\x32\x8d\x07\n\x10PhysicsAiService\x12\xce\x01\n\x11ListArchitectures\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.ListArchitecturesResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v0/physics_ai/architectures\x12\xdb\x01\n\x14ListPretrainedModels\x12K.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsRequest\x1aL.luminary.proto.api.v0.luminarycloud.physics_ai.ListPretrainedModelsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v0/physics_ai/pretrained_models\x12\xf5\x01\n\x18GetSolutionDataPhysicsAI\x12O.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIRequest\x1aP.luminary.proto.api.v0.luminarycloud.physics_ai.GetSolutionDataPhysicsAIResponse\"6\x82\xd3\xe4\x93\x02\x30\"+/v0/physics_ai/solutions/{solution_id}/data:\x01*\x12\xd1\x01\n\x11SubmitTrainingJob\x12H.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobRequest\x1aI.luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobResponse\"\'\x82\xd3\xe4\x93\x02!\"\x1c/v0/physics_ai/training/jobs:\x01*B>Z<luminarycloud.com/core/proto/api/v0/luminarycloud/physics_aib\x06proto3')
|
|
23
24
|
|
|
24
25
|
_PHYSICSAILIFECYCLESTATE = DESCRIPTOR.enum_types_by_name['PhysicsAiLifecycleState']
|
|
25
26
|
PhysicsAiLifecycleState = enum_type_wrapper.EnumTypeWrapper(_PHYSICSAILIFECYCLESTATE)
|
|
27
|
+
_TRAININGDATASOURCETYPE = DESCRIPTOR.enum_types_by_name['TrainingDataSourceType']
|
|
28
|
+
TrainingDataSourceType = enum_type_wrapper.EnumTypeWrapper(_TRAININGDATASOURCETYPE)
|
|
29
|
+
_MODELINITIALIZATIONTYPE = DESCRIPTOR.enum_types_by_name['ModelInitializationType']
|
|
30
|
+
ModelInitializationType = enum_type_wrapper.EnumTypeWrapper(_MODELINITIALIZATIONTYPE)
|
|
26
31
|
LIFECYCLE_STATE_UNSPECIFIED = 0
|
|
27
32
|
LIFECYCLE_STATE_DEVELOPMENT = 1
|
|
28
33
|
LIFECYCLE_STATE_ACTIVE = 2
|
|
29
34
|
LIFECYCLE_STATE_DEPRECATED = 3
|
|
30
35
|
LIFECYCLE_STATE_RETIRED = 4
|
|
36
|
+
TRAINING_DATA_SOURCE_TYPE_UNSPECIFIED = 0
|
|
37
|
+
TRAINING_DATA_SOURCE_TYPE_SIMULATION_SOLUTIONS = 1
|
|
38
|
+
TRAINING_DATA_SOURCE_TYPE_EXTERNAL_DATASET = 2
|
|
39
|
+
MODEL_INITIALIZATION_TYPE_UNSPECIFIED = 0
|
|
40
|
+
MODEL_INITIALIZATION_TYPE_RANDOM = 1
|
|
41
|
+
MODEL_INITIALIZATION_TYPE_MODEL_VERSION = 2
|
|
42
|
+
MODEL_INITIALIZATION_TYPE_CHECKPOINT = 3
|
|
31
43
|
|
|
32
44
|
|
|
33
45
|
_PHYSICSAIARCHITECTUREVERSION = DESCRIPTOR.message_types_by_name['PhysicsAiArchitectureVersion']
|
|
@@ -40,6 +52,10 @@ _LISTPRETRAINEDMODELSREQUEST = DESCRIPTOR.message_types_by_name['ListPretrainedM
|
|
|
40
52
|
_LISTPRETRAINEDMODELSRESPONSE = DESCRIPTOR.message_types_by_name['ListPretrainedModelsResponse']
|
|
41
53
|
_GETSOLUTIONDATAPHYSICSAIREQUEST = DESCRIPTOR.message_types_by_name['GetSolutionDataPhysicsAIRequest']
|
|
42
54
|
_GETSOLUTIONDATAPHYSICSAIRESPONSE = DESCRIPTOR.message_types_by_name['GetSolutionDataPhysicsAIResponse']
|
|
55
|
+
_TRAININGSOLUTION = DESCRIPTOR.message_types_by_name['TrainingSolution']
|
|
56
|
+
_PHYSICSAITRAININGJOB = DESCRIPTOR.message_types_by_name['PhysicsAiTrainingJob']
|
|
57
|
+
_SUBMITTRAININGJOBREQUEST = DESCRIPTOR.message_types_by_name['SubmitTrainingJobRequest']
|
|
58
|
+
_SUBMITTRAININGJOBRESPONSE = DESCRIPTOR.message_types_by_name['SubmitTrainingJobResponse']
|
|
43
59
|
PhysicsAiArchitectureVersion = _reflection.GeneratedProtocolMessageType('PhysicsAiArchitectureVersion', (_message.Message,), {
|
|
44
60
|
'DESCRIPTOR' : _PHYSICSAIARCHITECTUREVERSION,
|
|
45
61
|
'__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
|
|
@@ -110,6 +126,34 @@ GetSolutionDataPhysicsAIResponse = _reflection.GeneratedProtocolMessageType('Get
|
|
|
110
126
|
})
|
|
111
127
|
_sym_db.RegisterMessage(GetSolutionDataPhysicsAIResponse)
|
|
112
128
|
|
|
129
|
+
TrainingSolution = _reflection.GeneratedProtocolMessageType('TrainingSolution', (_message.Message,), {
|
|
130
|
+
'DESCRIPTOR' : _TRAININGSOLUTION,
|
|
131
|
+
'__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
|
|
132
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.TrainingSolution)
|
|
133
|
+
})
|
|
134
|
+
_sym_db.RegisterMessage(TrainingSolution)
|
|
135
|
+
|
|
136
|
+
PhysicsAiTrainingJob = _reflection.GeneratedProtocolMessageType('PhysicsAiTrainingJob', (_message.Message,), {
|
|
137
|
+
'DESCRIPTOR' : _PHYSICSAITRAININGJOB,
|
|
138
|
+
'__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
|
|
139
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.PhysicsAiTrainingJob)
|
|
140
|
+
})
|
|
141
|
+
_sym_db.RegisterMessage(PhysicsAiTrainingJob)
|
|
142
|
+
|
|
143
|
+
SubmitTrainingJobRequest = _reflection.GeneratedProtocolMessageType('SubmitTrainingJobRequest', (_message.Message,), {
|
|
144
|
+
'DESCRIPTOR' : _SUBMITTRAININGJOBREQUEST,
|
|
145
|
+
'__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
|
|
146
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobRequest)
|
|
147
|
+
})
|
|
148
|
+
_sym_db.RegisterMessage(SubmitTrainingJobRequest)
|
|
149
|
+
|
|
150
|
+
SubmitTrainingJobResponse = _reflection.GeneratedProtocolMessageType('SubmitTrainingJobResponse', (_message.Message,), {
|
|
151
|
+
'DESCRIPTOR' : _SUBMITTRAININGJOBRESPONSE,
|
|
152
|
+
'__module__' : 'proto.api.v0.luminarycloud.physics_ai.physics_ai_pb2'
|
|
153
|
+
# @@protoc_insertion_point(class_scope:luminary.proto.api.v0.luminarycloud.physics_ai.SubmitTrainingJobResponse)
|
|
154
|
+
})
|
|
155
|
+
_sym_db.RegisterMessage(SubmitTrainingJobResponse)
|
|
156
|
+
|
|
113
157
|
_PHYSICSAISERVICE = DESCRIPTOR.services_by_name['PhysicsAiService']
|
|
114
158
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
115
159
|
|
|
@@ -121,28 +165,42 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
121
165
|
_PHYSICSAISERVICE.methods_by_name['ListPretrainedModels']._serialized_options = b'\202\323\344\223\002\"\022 /v0/physics_ai/pretrained_models'
|
|
122
166
|
_PHYSICSAISERVICE.methods_by_name['GetSolutionDataPhysicsAI']._options = None
|
|
123
167
|
_PHYSICSAISERVICE.methods_by_name['GetSolutionDataPhysicsAI']._serialized_options = b'\202\323\344\223\0020\"+/v0/physics_ai/solutions/{solution_id}/data:\001*'
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
168
|
+
_PHYSICSAISERVICE.methods_by_name['SubmitTrainingJob']._options = None
|
|
169
|
+
_PHYSICSAISERVICE.methods_by_name['SubmitTrainingJob']._serialized_options = b'\202\323\344\223\002!\"\034/v0/physics_ai/training/jobs:\001*'
|
|
170
|
+
_PHYSICSAILIFECYCLESTATE._serialized_start=2835
|
|
171
|
+
_PHYSICSAILIFECYCLESTATE._serialized_end=3015
|
|
172
|
+
_TRAININGDATASOURCETYPE._serialized_start=3018
|
|
173
|
+
_TRAININGDATASOURCETYPE._serialized_end=3185
|
|
174
|
+
_MODELINITIALIZATIONTYPE._serialized_start=3188
|
|
175
|
+
_MODELINITIALIZATIONTYPE._serialized_end=3381
|
|
176
|
+
_PHYSICSAIARCHITECTUREVERSION._serialized_start=272
|
|
177
|
+
_PHYSICSAIARCHITECTUREVERSION._serialized_end=445
|
|
178
|
+
_PHYSICSAIARCHITECTURE._serialized_start=448
|
|
179
|
+
_PHYSICSAIARCHITECTURE._serialized_end=614
|
|
180
|
+
_LISTARCHITECTURESREQUEST._serialized_start=616
|
|
181
|
+
_LISTARCHITECTURESREQUEST._serialized_end=642
|
|
182
|
+
_LISTARCHITECTURESRESPONSE._serialized_start=644
|
|
183
|
+
_LISTARCHITECTURESRESPONSE._serialized_end=765
|
|
184
|
+
_PHYSICSAIMODELVERSION._serialized_start=768
|
|
185
|
+
_PHYSICSAIMODELVERSION._serialized_end=915
|
|
186
|
+
_PHYSICSAIMODEL._serialized_start=918
|
|
187
|
+
_PHYSICSAIMODEL._serialized_end=1070
|
|
188
|
+
_LISTPRETRAINEDMODELSREQUEST._serialized_start=1072
|
|
189
|
+
_LISTPRETRAINEDMODELSREQUEST._serialized_end=1101
|
|
190
|
+
_LISTPRETRAINEDMODELSRESPONSE._serialized_start=1103
|
|
191
|
+
_LISTPRETRAINEDMODELSRESPONSE._serialized_end=1213
|
|
192
|
+
_GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_start=1216
|
|
193
|
+
_GETSOLUTIONDATAPHYSICSAIREQUEST._serialized_end=1507
|
|
194
|
+
_GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_start=1509
|
|
195
|
+
_GETSOLUTIONDATAPHYSICSAIRESPONSE._serialized_end=1607
|
|
196
|
+
_TRAININGSOLUTION._serialized_start=1609
|
|
197
|
+
_TRAININGSOLUTION._serialized_end=1668
|
|
198
|
+
_PHYSICSAITRAININGJOB._serialized_start=1671
|
|
199
|
+
_PHYSICSAITRAININGJOB._serialized_end=2337
|
|
200
|
+
_SUBMITTRAININGJOBREQUEST._serialized_start=2340
|
|
201
|
+
_SUBMITTRAININGJOBREQUEST._serialized_end=2711
|
|
202
|
+
_SUBMITTRAININGJOBRESPONSE._serialized_start=2713
|
|
203
|
+
_SUBMITTRAININGJOBRESPONSE._serialized_end=2832
|
|
204
|
+
_PHYSICSAISERVICE._serialized_start=3384
|
|
205
|
+
_PHYSICSAISERVICE._serialized_end=4293
|
|
148
206
|
# @@protoc_insertion_point(module_scope)
|