skypilot-nightly 1.0.0.dev20250916__py3-none-any.whl → 1.0.0.dev20250919__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (81) hide show
  1. sky/__init__.py +4 -2
  2. sky/adaptors/primeintellect.py +1 -0
  3. sky/adaptors/seeweb.py +68 -4
  4. sky/authentication.py +25 -0
  5. sky/backends/__init__.py +3 -2
  6. sky/backends/backend_utils.py +16 -12
  7. sky/backends/cloud_vm_ray_backend.py +57 -0
  8. sky/catalog/primeintellect_catalog.py +95 -0
  9. sky/clouds/__init__.py +2 -0
  10. sky/clouds/primeintellect.py +314 -0
  11. sky/core.py +77 -48
  12. sky/dashboard/out/404.html +1 -1
  13. sky/dashboard/out/_next/static/{y8s7LlyyfhMzpzCkxuD2r → VvaUqYDvHOcHZRnvMBmax}/_buildManifest.js +1 -1
  14. sky/dashboard/out/_next/static/chunks/1121-4ff1ec0dbc5792ab.js +1 -0
  15. sky/dashboard/out/_next/static/chunks/3015-88c7c8d69b0b6dba.js +1 -0
  16. sky/dashboard/out/_next/static/chunks/{6856-e0754534b3015377.js → 6856-9a2538f38c004652.js} +1 -1
  17. sky/dashboard/out/_next/static/chunks/8969-a39efbadcd9fde80.js +1 -0
  18. sky/dashboard/out/_next/static/chunks/9037-472ee1222cb1e158.js +6 -0
  19. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-1e9248ddbddcd122.js +16 -0
  20. sky/dashboard/out/_next/static/chunks/pages/clusters/{[cluster]-0b4b35dc1dfe046c.js → [cluster]-9525660179df3605.js} +1 -1
  21. sky/dashboard/out/_next/static/chunks/{webpack-05f82d90d6fd7f82.js → webpack-b2a3938c22b6647b.js} +1 -1
  22. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  23. sky/dashboard/out/clusters/[cluster].html +1 -1
  24. sky/dashboard/out/clusters.html +1 -1
  25. sky/dashboard/out/config.html +1 -1
  26. sky/dashboard/out/index.html +1 -1
  27. sky/dashboard/out/infra/[context].html +1 -1
  28. sky/dashboard/out/infra.html +1 -1
  29. sky/dashboard/out/jobs/[job].html +1 -1
  30. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  31. sky/dashboard/out/jobs.html +1 -1
  32. sky/dashboard/out/users.html +1 -1
  33. sky/dashboard/out/volumes.html +1 -1
  34. sky/dashboard/out/workspace/new.html +1 -1
  35. sky/dashboard/out/workspaces/[name].html +1 -1
  36. sky/dashboard/out/workspaces.html +1 -1
  37. sky/global_user_state.py +99 -62
  38. sky/jobs/server/server.py +14 -1
  39. sky/jobs/state.py +26 -1
  40. sky/metrics/utils.py +174 -8
  41. sky/provision/__init__.py +1 -0
  42. sky/provision/docker_utils.py +6 -2
  43. sky/provision/primeintellect/__init__.py +10 -0
  44. sky/provision/primeintellect/config.py +11 -0
  45. sky/provision/primeintellect/instance.py +454 -0
  46. sky/provision/primeintellect/utils.py +398 -0
  47. sky/resources.py +9 -1
  48. sky/schemas/generated/jobsv1_pb2.py +40 -40
  49. sky/schemas/generated/servev1_pb2.py +58 -0
  50. sky/schemas/generated/servev1_pb2.pyi +115 -0
  51. sky/schemas/generated/servev1_pb2_grpc.py +322 -0
  52. sky/serve/serve_rpc_utils.py +179 -0
  53. sky/serve/serve_utils.py +29 -12
  54. sky/serve/server/core.py +37 -19
  55. sky/serve/server/impl.py +221 -129
  56. sky/server/metrics.py +52 -158
  57. sky/server/requests/executor.py +12 -8
  58. sky/server/requests/payloads.py +6 -0
  59. sky/server/requests/requests.py +1 -1
  60. sky/server/requests/serializers/encoders.py +3 -2
  61. sky/server/server.py +5 -41
  62. sky/setup_files/dependencies.py +1 -0
  63. sky/skylet/constants.py +10 -5
  64. sky/skylet/job_lib.py +14 -15
  65. sky/skylet/services.py +98 -0
  66. sky/skylet/skylet.py +3 -1
  67. sky/templates/kubernetes-ray.yml.j2 +22 -12
  68. sky/templates/primeintellect-ray.yml.j2 +71 -0
  69. sky/utils/locks.py +41 -10
  70. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/METADATA +36 -35
  71. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/RECORD +76 -64
  72. sky/dashboard/out/_next/static/chunks/1121-408ed10b2f9fce17.js +0 -1
  73. sky/dashboard/out/_next/static/chunks/3015-2ea98b57e318bd6e.js +0 -1
  74. sky/dashboard/out/_next/static/chunks/8969-0487dfbf149d9e53.js +0 -1
  75. sky/dashboard/out/_next/static/chunks/9037-f9800e64eb05dd1c.js +0 -6
  76. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-1cbba24bd1bd35f8.js +0 -16
  77. /sky/dashboard/out/_next/static/{y8s7LlyyfhMzpzCkxuD2r → VvaUqYDvHOcHZRnvMBmax}/_ssgManifest.js +0 -0
  78. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/WHEEL +0 -0
  79. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/entry_points.txt +0 -0
  80. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/licenses/LICENSE +0 -0
  81. {skypilot_nightly-1.0.0.dev20250916.dist-info → skypilot_nightly-1.0.0.dev20250919.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,398 @@
1
+ """Prime Intellect library wrapper for SkyPilot."""
2
+
3
+ import json
4
+ import os
5
+ import shlex
6
+ import time
7
+ from typing import Any, Dict, List, Optional, Tuple, Union
8
+ import uuid
9
+
10
+ import requests
11
+
12
+ from sky.catalog import common as catalog_common
13
+ from sky.utils import common_utils
14
+
15
+ _df = None
16
+ _lookup_dict = None
17
+
18
+ # Base URL for Prime Intellect API (used as default if not configured).
19
+ DEFAULT_BASE_URL = 'https://api.primeintellect.ai'
20
+ CREDENTIALS_PATH = '~/.prime/config.json'
21
+ INITIAL_BACKOFF_SECONDS = 10
22
+ MAX_BACKOFF_FACTOR = 10
23
+ MAX_ATTEMPTS = 6
24
+
25
+
26
+ class PrimeintellectAPIError(Exception):
27
+ """Base exception for Prime Intellect API errors."""
28
+
29
+ def __init__(self,
30
+ message: str,
31
+ status_code: Optional[int] = None,
32
+ response_data: Optional[Dict[str, Any]] = None):
33
+ super().__init__(message)
34
+ self.status_code = status_code
35
+ self.response_data = response_data
36
+
37
+
38
+ class PrimeintellectResourcesUnavailableError(PrimeintellectAPIError):
39
+ """Exception for when resources are unavailable on Prime Intellect."""
40
+ pass
41
+
42
+
43
+ def _parse_api_error(response: Any) -> Tuple[str, bool]:
44
+ """Parse API error response to extract meaningful error messages.
45
+
46
+ Returns:
47
+ Tuple[str, bool]:
48
+ - str: A human-readable error message parsed from the API response.
49
+ - bool: True if the error indicates resource unavailability (e.g.,
50
+ capacity issues or quota/limit exceeded), otherwise False.
51
+ """
52
+ try:
53
+ if hasattr(response, 'json'):
54
+ error_data = response.json()
55
+ else:
56
+ error_data = response
57
+
58
+ if isinstance(error_data, dict):
59
+ # Try to extract error message from common error response fields
60
+ error_message = error_data.get('message', '')
61
+ if not error_message:
62
+ error_message = error_data.get('error', '')
63
+ if not error_message:
64
+ error_message = error_data.get('detail', '')
65
+
66
+ # Check if it's a resource unavailability error
67
+ if any(keyword in error_message.lower() for keyword in [
68
+ 'no capacity', 'capacity', 'unavailable', 'out of stock',
69
+ 'insufficient', 'not available', 'quota exceeded',
70
+ 'limit exceeded'
71
+ ]):
72
+ return error_message, True
73
+
74
+ return error_message, False
75
+
76
+ return str(error_data), False
77
+ except Exception: # pylint: disable=broad-except
78
+ return f'HTTP {response.status_code} {response.reason}', False
79
+
80
+
81
+ def _try_request_with_backoff(
82
+ method: str,
83
+ url: str,
84
+ headers: Dict[str, str],
85
+ data: Optional[Union[str, Dict[str, Any]]] = None) -> Dict[str, Any]:
86
+ backoff = common_utils.Backoff(initial_backoff=INITIAL_BACKOFF_SECONDS,
87
+ max_backoff_factor=MAX_BACKOFF_FACTOR)
88
+ for i in range(MAX_ATTEMPTS):
89
+ timeout = 30
90
+ if method == 'get':
91
+ response = requests.get(url,
92
+ headers=headers,
93
+ params=data,
94
+ timeout=timeout)
95
+ elif method == 'post':
96
+ response = requests.post(url,
97
+ headers=headers,
98
+ json=data,
99
+ timeout=timeout)
100
+ elif method == 'put':
101
+ response = requests.put(url,
102
+ headers=headers,
103
+ json=data,
104
+ timeout=timeout)
105
+ elif method == 'patch':
106
+ response = requests.patch(url,
107
+ headers=headers,
108
+ json=data,
109
+ timeout=timeout)
110
+ elif method == 'delete':
111
+ response = requests.delete(url, headers=headers, timeout=timeout)
112
+ else:
113
+ raise ValueError(f'Unsupported requests method: {method}')
114
+ # If rate limited, wait and try again
115
+ if response.status_code == 429 and i != MAX_ATTEMPTS - 1:
116
+ time.sleep(backoff.current_backoff())
117
+ continue
118
+ if response.ok:
119
+ return response.json()
120
+ else:
121
+ # Parse the error response for meaningful messages
122
+ err, is_resource_unavailable = _parse_api_error(response)
123
+
124
+ # Create a more informative error message
125
+ if not err:
126
+ err = (f'API request failed: {method} {url}: '
127
+ f'{response.status_code} {response.reason}')
128
+ else:
129
+ err = f'API request failed: {err}'
130
+
131
+ # Raise appropriate exception based on error type
132
+ if is_resource_unavailable:
133
+ raise PrimeintellectResourcesUnavailableError(
134
+ err,
135
+ status_code=response.status_code,
136
+ response_data=response.json()
137
+ if hasattr(response, 'json') else None)
138
+ else:
139
+ raise PrimeintellectAPIError(
140
+ err,
141
+ status_code=response.status_code,
142
+ response_data=response.json()
143
+ if hasattr(response, 'json') else None)
144
+ return {}
145
+
146
+
147
+ def get_upstream_cloud_id(instance_type: str) -> Optional[str]:
148
+ global _df, _lookup_dict
149
+ if _df is None:
150
+ _df = catalog_common.read_catalog('primeintellect/vms.csv')
151
+ _lookup_dict = (
152
+ _df.set_index('InstanceType')['UpstreamCloudId'].to_dict())
153
+ return _lookup_dict.get(instance_type)
154
+
155
+
156
+ class PrimeIntellectAPIClient:
157
+ """Client for interacting with Prime Intellect API."""
158
+
159
+ def __init__(self) -> None:
160
+ self.credentials = os.path.expanduser(CREDENTIALS_PATH)
161
+ assert os.path.exists(self.credentials), 'Credentials not found'
162
+ with open(self.credentials, 'r', encoding='utf-8') as f:
163
+ self._credentials = json.load(f)
164
+ self.api_key = self._credentials.get('api_key')
165
+ self.team_id = self._credentials.get('team_id')
166
+ self.base_url = self._credentials.get('base_url', DEFAULT_BASE_URL)
167
+ self.headers = {
168
+ 'Authorization': f'Bearer {self.api_key}',
169
+ 'Content-Type': 'application/json'
170
+ }
171
+
172
+ def list_instances(self, **search_kwargs) -> List[Dict[str, Any]]:
173
+ response = _try_request_with_backoff('get',
174
+ f'{self.base_url}/api/v1/pods',
175
+ headers=self.headers,
176
+ data=search_kwargs)
177
+ return response['data']
178
+
179
+ def get_instance_details(self, instance_id: str) -> Dict[str, Any]:
180
+ return _try_request_with_backoff(
181
+ 'get',
182
+ f'{self.base_url}/api/v1/pods/{instance_id}',
183
+ headers=self.headers)
184
+
185
+ def launch(self,
186
+ name: str,
187
+ instance_type: str,
188
+ region: str,
189
+ availability_zone: str,
190
+ disk_size: int,
191
+ vcpus: int = 0,
192
+ memory: int = 0) -> Dict[str, Any]:
193
+ """Create a pod/instance via Prime Intellect API.
194
+
195
+ Args:
196
+ name: User-visible name of the pod.
197
+ instance_type: A catalog instance type string. The expected format
198
+ is:
199
+ "<provider>__<accelerator>__<vcpus>__<memory>[_SPOT]".
200
+
201
+ - <provider>: Upstream provider tag (e.g., "primecompute").
202
+ - <accelerator>:
203
+ * GPU nodes: "<N>x<GPU_MODEL>", e.g., "8xH100_80GB".
204
+ * CPU-only nodes: the literal "CPU_NODE".
205
+ - <vcpus>: Integer string for vCPU count (e.g., "104").
206
+ - <memory>: Integer string for memory in GB (e.g., "752").
207
+ - Optional suffix "_SPOT" may be present in the full string
208
+ (ignored here; pricing/spot behavior is not controlled by
209
+ this method).
210
+
211
+ Notes:
212
+ - Parsing: only the first two components (provider,
213
+ accelerator) are needed to build the payload. The vCPU
214
+ and memory values are provided via the ``vcpus`` and
215
+ ``memory`` arguments.
216
+ - Catalog lookup: the full instance_type string is used to
217
+ map to the catalog's UpstreamCloudId.
218
+ - CPU-only: accelerator "CPU_NODE" is a sentinel for
219
+ "no GPU". We set gpuType='CPU_NODE' and gpuCount=1 to
220
+ represent CPU-only pods.
221
+ - Spot: the optional "__SPOT" suffix (if present) is ignored
222
+ here; pricing/spot behavior is handled elsewhere.
223
+
224
+ region: Country/region code used by Prime Intellect.
225
+ availability_zone: Data center ID (zone) within the region.
226
+ disk_size: Boot disk size in GB.
227
+ vcpus: Optional explicit vCPU override; if >0 it will be sent.
228
+ memory: Optional explicit memory override in GB; if >0 it will be
229
+ sent.
230
+
231
+ Returns:
232
+ The API response JSON as a dict.
233
+ """
234
+ cloud_id = get_upstream_cloud_id(instance_type)
235
+ assert cloud_id, 'cloudId cannot be None'
236
+ assert availability_zone, 'availability_zone cannot be None'
237
+
238
+ # Parse the instance_type. We only need the first two components:
239
+ # provider and accelerator info (see docstring above).
240
+ provider, gpu_parts, _, _ = instance_type.split('__', 3)
241
+ if 'CPU_NODE' in gpu_parts:
242
+ # Prime Intellect API uses the same schema for CPU-only and GPU
243
+ # pods. For CPU-only instances, we set gpuType='CPU_NODE' and
244
+ # gpuCount=1 as a sentinel to indicate "no GPU". This is how CPU
245
+ # instances are represented internally on our platform; the
246
+ # backend does not interpret this as having a physical GPU.
247
+ gpu_type = 'CPU_NODE'
248
+ gpu_count = 1
249
+ else:
250
+ parts = gpu_parts.split('x', 1)
251
+ gpu_count = int(parts[0])
252
+ gpu_type = parts[1]
253
+
254
+ payload: Dict[str, Any] = {
255
+ 'pod': {
256
+ 'name': name,
257
+ 'cloudId': cloud_id,
258
+ 'socket': 'PCIe',
259
+ 'gpuType': gpu_type,
260
+ 'gpuCount': int(gpu_count),
261
+ 'diskSize': disk_size,
262
+ # Prime Intellect API historically required maxPrice.
263
+ # Set to 0 to indicate on-demand/non-spot pricing.
264
+ 'maxPrice': 0,
265
+ },
266
+ 'provider': {
267
+ 'type': provider,
268
+ }
269
+ }
270
+
271
+ if vcpus > 0:
272
+ payload['pod']['vcpus'] = vcpus
273
+ if memory > 0:
274
+ payload['pod']['memory'] = memory
275
+
276
+ if region != 'UNSPECIFIED':
277
+ payload['pod']['country'] = region
278
+ if availability_zone != 'UNSPECIFIED':
279
+ payload['pod']['dataCenterId'] = availability_zone
280
+
281
+ if self.team_id is not None and self.team_id != '':
282
+ payload['team'] = {'teamId': self.team_id}
283
+
284
+ response = _try_request_with_backoff(
285
+ 'post',
286
+ f'{self.base_url}/api/v1/pods',
287
+ headers=self.headers,
288
+ data=payload,
289
+ )
290
+ return response
291
+
292
+ def remove(self, instance_id: str) -> Dict[str, Any]:
293
+ return _try_request_with_backoff(
294
+ 'delete',
295
+ f'{self.base_url}/api/v1/pods/{instance_id}',
296
+ headers=self.headers,
297
+ )
298
+
299
+ def list_ssh_keys(self) -> List[Dict[str, Any]]:
300
+ response = _try_request_with_backoff('get',
301
+ f'{self.base_url}/api/v1/ssh_keys',
302
+ headers=self.headers)
303
+ return response['data']
304
+
305
+ def get_or_add_ssh_key(self, ssh_pub_key: str = '') -> Dict[str, str]:
306
+ """Add ssh key if not already added."""
307
+ # Check if the public key is already added
308
+ ssh_keys = self.list_ssh_keys()
309
+ for key in ssh_keys:
310
+ if key['publicKey'].strip().split()[:2] == ssh_pub_key.strip(
311
+ ).split()[:2]:
312
+ return {'name': key['name'], 'ssh_key': ssh_pub_key}
313
+
314
+ # Add the public key to Prime Intellect account if not already added
315
+ ssh_key_name = 'skypilot-' + str(uuid.uuid4()).replace('-', '')[:8]
316
+ _try_request_with_backoff(
317
+ 'post',
318
+ f'{self.base_url}/api/v1/ssh_keys',
319
+ headers=self.headers,
320
+ data={
321
+ 'name': ssh_key_name,
322
+ 'publicKey': ssh_pub_key
323
+ },
324
+ )
325
+ return {'name': ssh_key_name, 'ssh_key': ssh_pub_key}
326
+
327
+
328
+ def parse_ssh_connection(ssh_connection: Any) -> Tuple[Optional[str], int]:
329
+ """Parse and extract SSH username and port from a connection field.
330
+
331
+ The provider may return the SSH connection in multiple shapes. This helper
332
+ robustly extracts the SSH username and port while tolerating extra flags or
333
+ various tokenizations.
334
+
335
+ Accepted formats (examples):
336
+ - String with port flag:
337
+ "ubuntu@1.2.3.4 -p 2222 [-o <flag> ...]"
338
+ - String without explicit port (defaults to 22):
339
+ "ubuntu@1.2.3.4"
340
+ - String with host:port:
341
+ "ubuntu@1.2.3.4:2222"
342
+ - List with a single target:
343
+ ["ubuntu@1.2.3.4"]
344
+ - List of tokens (e.g., split form):
345
+ ["ubuntu@1.2.3.4", "-p", "2222"]
346
+
347
+ Args:
348
+ ssh_connection: The raw field from the API; can be a string or a list
349
+ of strings.
350
+
351
+ Returns:
352
+ (ssh_user, ssh_port): username if found, else None; port if found,
353
+ else 22.
354
+ """
355
+ ssh_user: Optional[str] = None
356
+ ssh_port: int = 22
357
+
358
+ # Normalize into a list of tokens for easier processing.
359
+ tokens: List[str] = []
360
+ if isinstance(ssh_connection, str):
361
+ try:
362
+ tokens = shlex.split(ssh_connection)
363
+ except Exception: # pylint: disable=broad-except
364
+ tokens = [ssh_connection]
365
+ elif isinstance(ssh_connection, list):
366
+ for elem in ssh_connection:
367
+ if isinstance(elem, str):
368
+ try:
369
+ tokens.extend(shlex.split(elem))
370
+ except Exception: # pylint: disable=broad-except
371
+ tokens.append(elem)
372
+ else:
373
+ # Unknown type; return defaults.
374
+ return ssh_user, ssh_port
375
+
376
+ # Find the first token containing '@' as the user@host candidate.
377
+ user_host: Optional[str] = next((t for t in tokens if '@' in t), None)
378
+ if user_host:
379
+ ssh_user = user_host.split('@', 1)[0].strip()
380
+ # Try host:port format (after '@').
381
+ host_part = user_host.split('@', 1)[1]
382
+ if ':' in host_part:
383
+ _, maybe_port = host_part.rsplit(':', 1)
384
+ try:
385
+ ssh_port = int(maybe_port)
386
+ except ValueError:
387
+ pass
388
+
389
+ # Check for '-p <port>' pair anywhere in the tokens. This takes priority.
390
+ if '-p' in tokens:
391
+ idx = tokens.index('-p')
392
+ if idx + 1 < len(tokens):
393
+ try:
394
+ ssh_port = int(tokens[idx + 1])
395
+ except ValueError:
396
+ pass
397
+
398
+ return ssh_user, ssh_port
sky/resources.py CHANGED
@@ -1331,10 +1331,18 @@ class Resources:
1331
1331
  clouds.CloudImplementationFeatures.IMAGE_ID
1332
1332
  })
1333
1333
  except exceptions.NotSupportedError as e:
1334
+ # Provide a more helpful error message for Lambda cloud
1335
+ if self.cloud.is_same_cloud(clouds.Lambda()):
1336
+ with ux_utils.print_exception_no_traceback():
1337
+ raise ValueError(
1338
+ 'Lambda cloud only supports Docker images. '
1339
+ 'Please prefix your image with "docker:" '
1340
+ '(e.g., image_id: docker:your-image-name).') from e
1334
1341
  with ux_utils.print_exception_no_traceback():
1335
1342
  raise ValueError(
1336
1343
  'image_id is only supported for AWS/GCP/Azure/IBM/OCI/'
1337
- 'Kubernetes, please explicitly specify the cloud.') from e
1344
+ 'Kubernetes. For Lambda cloud, use "docker:" prefix for '
1345
+ 'Docker images.') from e
1338
1346
 
1339
1347
  if self._region is not None:
1340
1348
  # If the image_id has None as key (region-agnostic),
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"sky/schemas/generated/jobsv1.proto\x12\x07jobs.v1\"\x85\x01\n\rAddJobRequest\x12\x15\n\x08job_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rrun_timestamp\x18\x03 \x01(\t\x12\x15\n\rresources_str\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\tB\x0b\n\t_job_name\"1\n\x0e\x41\x64\x64JobResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x0f\n\x07log_dir\x18\x02 \x01(\t\"\xb3\x01\n\x0fQueueJobRequest\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x14\n\x07\x63odegen\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bscript_path\x18\x03 \x01(\t\x12\x16\n\x0eremote_log_dir\x18\x04 \x01(\t\x12\x31\n\x0bmanaged_job\x18\x05 \x01(\x0b\x32\x17.jobs.v1.ManagedJobInfoH\x01\x88\x01\x01\x42\n\n\x08_codegenB\x0e\n\x0c_managed_job\"\x89\x01\n\x0eManagedJobInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\x04pool\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tworkspace\x18\x03 \x01(\t\x12\x12\n\nentrypoint\x18\x04 \x01(\t\x12&\n\x05tasks\x18\x05 \x03(\x0b\x32\x17.jobs.v1.ManagedJobTaskB\x07\n\x05_pool\"]\n\x0eManagedJobTask\x12\x0f\n\x07task_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rresources_str\x18\x03 \x01(\t\x12\x15\n\rmetadata_json\x18\x04 \x01(\t\"\x12\n\x10QueueJobResponse\"\x15\n\x13UpdateStatusRequest\"\x16\n\x14UpdateStatusResponse\"L\n\x12GetJobQueueRequest\x12\x16\n\tuser_hash\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08\x61ll_jobs\x18\x02 \x01(\x08\x42\x0c\n\n_user_hash\"\xf4\x01\n\x07JobInfo\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x10\n\x08job_name\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x14\n\x0csubmitted_at\x18\x04 \x01(\x01\x12\"\n\x06status\x18\x05 \x01(\x0e\x32\x12.jobs.v1.JobStatus\x12\x15\n\rrun_timestamp\x18\x06 \x01(\t\x12\x10\n\x08start_at\x18\x07 \x01(\x01\x12\x0e\n\x06\x65nd_at\x18\x08 \x01(\x01\x12\x11\n\tresources\x18\t \x01(\t\x12\x0b\n\x03pid\x18\n \x01(\x03\x12\x10\n\x08log_path\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\t\"5\n\x13GetJobQueueResponse\x12\x1e\n\x04jobs\x18\x01 \x03(\x0b\x32\x10.jobs.v1.JobInfo\"^\n\x11\x43\x61ncelJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\x12\x12\n\ncancel_all\x18\x02 \x01(\x08\x12\x16\n\tuser_hash\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_user_hash\"/\n\x12\x43\x61ncelJobsResponse\x12\x19\n\x11\x63\x61ncelled_job_ids\x18\x01 \x03(\x03\"\x1e\n\x1c\x46\x61ilAllInProgressJobsRequest\"\x1f\n\x1d\x46\x61ilAllInProgressJobsResponse\"\x7f\n\x0fTailLogsRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1b\n\x0emanaged_job_id\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x0e\n\x06\x66ollow\x18\x03 \x01(\x08\x12\x0c\n\x04tail\x18\x04 \x01(\x05\x42\t\n\x07_job_idB\x11\n\x0f_managed_job_id\"7\n\x10TailLogsResponse\x12\x10\n\x08log_line\x18\x01 \x01(\t\x12\x11\n\texit_code\x18\x02 \x01(\x05\"&\n\x13GetJobStatusRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\xa4\x01\n\x14GetJobStatusResponse\x12\x44\n\x0cjob_statuses\x18\x01 \x03(\x0b\x32..jobs.v1.GetJobStatusResponse.JobStatusesEntry\x1a\x46\n\x10JobStatusesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12!\n\x05value\x18\x02 \x01(\x0e\x32\x12.jobs.v1.JobStatus:\x02\x38\x01\"A\n\x1fGetJobSubmittedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"5\n GetJobSubmittedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"=\n\x1bGetJobEndedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"1\n\x1cGetJobEndedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"+\n\x18GetLogDirsForJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\x98\x01\n\x19GetLogDirsForJobsResponse\x12H\n\x0cjob_log_dirs\x18\x01 \x03(\x0b\x32\x32.jobs.v1.GetLogDirsForJobsResponse.JobLogDirsEntry\x1a\x31\n\x0fJobLogDirsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x8d\x02\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fJOB_STATUS_INIT\x10\x01\x12\x16\n\x12JOB_STATUS_PENDING\x10\x02\x12\x19\n\x15JOB_STATUS_SETTING_UP\x10\x03\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x04\x12\x1c\n\x18JOB_STATUS_FAILED_DRIVER\x10\x05\x12\x18\n\x14JOB_STATUS_SUCCEEDED\x10\x06\x12\x15\n\x11JOB_STATUS_FAILED\x10\x07\x12\x1b\n\x17JOB_STATUS_FAILED_SETUP\x10\x08\x12\x18\n\x14JOB_STATUS_CANCELLED\x10\t2\x91\x07\n\x0bJobsService\x12\x39\n\x06\x41\x64\x64Job\x12\x16.jobs.v1.AddJobRequest\x1a\x17.jobs.v1.AddJobResponse\x12?\n\x08QueueJob\x12\x18.jobs.v1.QueueJobRequest\x1a\x19.jobs.v1.QueueJobResponse\x12K\n\x0cUpdateStatus\x12\x1c.jobs.v1.UpdateStatusRequest\x1a\x1d.jobs.v1.UpdateStatusResponse\x12H\n\x0bGetJobQueue\x12\x1b.jobs.v1.GetJobQueueRequest\x1a\x1c.jobs.v1.GetJobQueueResponse\x12\x45\n\nCancelJobs\x12\x1a.jobs.v1.CancelJobsRequest\x1a\x1b.jobs.v1.CancelJobsResponse\x12\x66\n\x15\x46\x61ilAllInProgressJobs\x12%.jobs.v1.FailAllInProgressJobsRequest\x1a&.jobs.v1.FailAllInProgressJobsResponse\x12\x41\n\x08TailLogs\x12\x18.jobs.v1.TailLogsRequest\x1a\x19.jobs.v1.TailLogsResponse0\x01\x12K\n\x0cGetJobStatus\x12\x1c.jobs.v1.GetJobStatusRequest\x1a\x1d.jobs.v1.GetJobStatusResponse\x12o\n\x18GetJobSubmittedTimestamp\x12(.jobs.v1.GetJobSubmittedTimestampRequest\x1a).jobs.v1.GetJobSubmittedTimestampResponse\x12\x63\n\x14GetJobEndedTimestamp\x12$.jobs.v1.GetJobEndedTimestampRequest\x1a%.jobs.v1.GetJobEndedTimestampResponse\x12Z\n\x11GetLogDirsForJobs\x12!.jobs.v1.GetLogDirsForJobsRequest\x1a\".jobs.v1.GetLogDirsForJobsResponseb\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"sky/schemas/generated/jobsv1.proto\x12\x07jobs.v1\"\x85\x01\n\rAddJobRequest\x12\x15\n\x08job_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x15\n\rrun_timestamp\x18\x03 \x01(\t\x12\x15\n\rresources_str\x18\x04 \x01(\t\x12\x10\n\x08metadata\x18\x05 \x01(\tB\x0b\n\t_job_name\"1\n\x0e\x41\x64\x64JobResponse\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x0f\n\x07log_dir\x18\x02 \x01(\t\"\xb3\x01\n\x0fQueueJobRequest\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x14\n\x07\x63odegen\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bscript_path\x18\x03 \x01(\t\x12\x16\n\x0eremote_log_dir\x18\x04 \x01(\t\x12\x31\n\x0bmanaged_job\x18\x05 \x01(\x0b\x32\x17.jobs.v1.ManagedJobInfoH\x01\x88\x01\x01\x42\n\n\x08_codegenB\x0e\n\x0c_managed_job\"\x89\x01\n\x0eManagedJobInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\x04pool\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tworkspace\x18\x03 \x01(\t\x12\x12\n\nentrypoint\x18\x04 \x01(\t\x12&\n\x05tasks\x18\x05 \x03(\x0b\x32\x17.jobs.v1.ManagedJobTaskB\x07\n\x05_pool\"]\n\x0eManagedJobTask\x12\x0f\n\x07task_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x15\n\rresources_str\x18\x03 \x01(\t\x12\x15\n\rmetadata_json\x18\x04 \x01(\t\"\x12\n\x10QueueJobResponse\"\x15\n\x13UpdateStatusRequest\"\x16\n\x14UpdateStatusResponse\"L\n\x12GetJobQueueRequest\x12\x16\n\tuser_hash\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08\x61ll_jobs\x18\x02 \x01(\x08\x42\x0c\n\n_user_hash\"\xa3\x02\n\x07JobInfo\x12\x0e\n\x06job_id\x18\x01 \x01(\x03\x12\x10\n\x08job_name\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x14\n\x0csubmitted_at\x18\x04 \x01(\x01\x12\"\n\x06status\x18\x05 \x01(\x0e\x32\x12.jobs.v1.JobStatus\x12\x15\n\rrun_timestamp\x18\x06 \x01(\t\x12\x15\n\x08start_at\x18\x07 \x01(\x01H\x00\x88\x01\x01\x12\x13\n\x06\x65nd_at\x18\x08 \x01(\x01H\x01\x88\x01\x01\x12\x11\n\tresources\x18\t \x01(\t\x12\x10\n\x03pid\x18\n \x01(\x03H\x02\x88\x01\x01\x12\x10\n\x08log_path\x18\x0b \x01(\t\x12\x10\n\x08metadata\x18\x0c \x01(\tB\x0b\n\t_start_atB\t\n\x07_end_atB\x06\n\x04_pid\"5\n\x13GetJobQueueResponse\x12\x1e\n\x04jobs\x18\x01 \x03(\x0b\x32\x10.jobs.v1.JobInfo\"^\n\x11\x43\x61ncelJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\x12\x12\n\ncancel_all\x18\x02 \x01(\x08\x12\x16\n\tuser_hash\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_user_hash\"/\n\x12\x43\x61ncelJobsResponse\x12\x19\n\x11\x63\x61ncelled_job_ids\x18\x01 \x03(\x03\"\x1e\n\x1c\x46\x61ilAllInProgressJobsRequest\"\x1f\n\x1d\x46\x61ilAllInProgressJobsResponse\"\x7f\n\x0fTailLogsRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1b\n\x0emanaged_job_id\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x0e\n\x06\x66ollow\x18\x03 \x01(\x08\x12\x0c\n\x04tail\x18\x04 \x01(\x05\x42\t\n\x07_job_idB\x11\n\x0f_managed_job_id\"7\n\x10TailLogsResponse\x12\x10\n\x08log_line\x18\x01 \x01(\t\x12\x11\n\texit_code\x18\x02 \x01(\x05\"&\n\x13GetJobStatusRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\xa4\x01\n\x14GetJobStatusResponse\x12\x44\n\x0cjob_statuses\x18\x01 \x03(\x0b\x32..jobs.v1.GetJobStatusResponse.JobStatusesEntry\x1a\x46\n\x10JobStatusesEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12!\n\x05value\x18\x02 \x01(\x0e\x32\x12.jobs.v1.JobStatus:\x02\x38\x01\"A\n\x1fGetJobSubmittedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"5\n GetJobSubmittedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"=\n\x1bGetJobEndedTimestampRequest\x12\x13\n\x06job_id\x18\x01 \x01(\x03H\x00\x88\x01\x01\x42\t\n\x07_job_id\"1\n\x1cGetJobEndedTimestampResponse\x12\x11\n\ttimestamp\x18\x01 \x01(\x02\"+\n\x18GetLogDirsForJobsRequest\x12\x0f\n\x07job_ids\x18\x01 \x03(\x03\"\x98\x01\n\x19GetLogDirsForJobsResponse\x12H\n\x0cjob_log_dirs\x18\x01 \x03(\x0b\x32\x32.jobs.v1.GetLogDirsForJobsResponse.JobLogDirsEntry\x1a\x31\n\x0fJobLogDirsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*\x8d\x02\n\tJobStatus\x12\x1a\n\x16JOB_STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fJOB_STATUS_INIT\x10\x01\x12\x16\n\x12JOB_STATUS_PENDING\x10\x02\x12\x19\n\x15JOB_STATUS_SETTING_UP\x10\x03\x12\x16\n\x12JOB_STATUS_RUNNING\x10\x04\x12\x1c\n\x18JOB_STATUS_FAILED_DRIVER\x10\x05\x12\x18\n\x14JOB_STATUS_SUCCEEDED\x10\x06\x12\x15\n\x11JOB_STATUS_FAILED\x10\x07\x12\x1b\n\x17JOB_STATUS_FAILED_SETUP\x10\x08\x12\x18\n\x14JOB_STATUS_CANCELLED\x10\t2\x91\x07\n\x0bJobsService\x12\x39\n\x06\x41\x64\x64Job\x12\x16.jobs.v1.AddJobRequest\x1a\x17.jobs.v1.AddJobResponse\x12?\n\x08QueueJob\x12\x18.jobs.v1.QueueJobRequest\x1a\x19.jobs.v1.QueueJobResponse\x12K\n\x0cUpdateStatus\x12\x1c.jobs.v1.UpdateStatusRequest\x1a\x1d.jobs.v1.UpdateStatusResponse\x12H\n\x0bGetJobQueue\x12\x1b.jobs.v1.GetJobQueueRequest\x1a\x1c.jobs.v1.GetJobQueueResponse\x12\x45\n\nCancelJobs\x12\x1a.jobs.v1.CancelJobsRequest\x1a\x1b.jobs.v1.CancelJobsResponse\x12\x66\n\x15\x46\x61ilAllInProgressJobs\x12%.jobs.v1.FailAllInProgressJobsRequest\x1a&.jobs.v1.FailAllInProgressJobsResponse\x12\x41\n\x08TailLogs\x12\x18.jobs.v1.TailLogsRequest\x1a\x19.jobs.v1.TailLogsResponse0\x01\x12K\n\x0cGetJobStatus\x12\x1c.jobs.v1.GetJobStatusRequest\x1a\x1d.jobs.v1.GetJobStatusResponse\x12o\n\x18GetJobSubmittedTimestamp\x12(.jobs.v1.GetJobSubmittedTimestampRequest\x1a).jobs.v1.GetJobSubmittedTimestampResponse\x12\x63\n\x14GetJobEndedTimestamp\x12$.jobs.v1.GetJobEndedTimestampRequest\x1a%.jobs.v1.GetJobEndedTimestampResponse\x12Z\n\x11GetLogDirsForJobs\x12!.jobs.v1.GetLogDirsForJobsRequest\x1a\".jobs.v1.GetLogDirsForJobsResponseb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -25,8 +25,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
25
25
  _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_options = b'8\001'
26
26
  _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._loaded_options = None
27
27
  _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_options = b'8\001'
28
- _globals['_JOBSTATUS']._serialized_start=2138
29
- _globals['_JOBSTATUS']._serialized_end=2407
28
+ _globals['_JOBSTATUS']._serialized_start=2185
29
+ _globals['_JOBSTATUS']._serialized_end=2454
30
30
  _globals['_ADDJOBREQUEST']._serialized_start=48
31
31
  _globals['_ADDJOBREQUEST']._serialized_end=181
32
32
  _globals['_ADDJOBRESPONSE']._serialized_start=183
@@ -46,41 +46,41 @@ if not _descriptor._USE_C_DESCRIPTORS:
46
46
  _globals['_GETJOBQUEUEREQUEST']._serialized_start=718
47
47
  _globals['_GETJOBQUEUEREQUEST']._serialized_end=794
48
48
  _globals['_JOBINFO']._serialized_start=797
49
- _globals['_JOBINFO']._serialized_end=1041
50
- _globals['_GETJOBQUEUERESPONSE']._serialized_start=1043
51
- _globals['_GETJOBQUEUERESPONSE']._serialized_end=1096
52
- _globals['_CANCELJOBSREQUEST']._serialized_start=1098
53
- _globals['_CANCELJOBSREQUEST']._serialized_end=1192
54
- _globals['_CANCELJOBSRESPONSE']._serialized_start=1194
55
- _globals['_CANCELJOBSRESPONSE']._serialized_end=1241
56
- _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_start=1243
57
- _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_end=1273
58
- _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_start=1275
59
- _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_end=1306
60
- _globals['_TAILLOGSREQUEST']._serialized_start=1308
61
- _globals['_TAILLOGSREQUEST']._serialized_end=1435
62
- _globals['_TAILLOGSRESPONSE']._serialized_start=1437
63
- _globals['_TAILLOGSRESPONSE']._serialized_end=1492
64
- _globals['_GETJOBSTATUSREQUEST']._serialized_start=1494
65
- _globals['_GETJOBSTATUSREQUEST']._serialized_end=1532
66
- _globals['_GETJOBSTATUSRESPONSE']._serialized_start=1535
67
- _globals['_GETJOBSTATUSRESPONSE']._serialized_end=1699
68
- _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_start=1629
69
- _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_end=1699
70
- _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_start=1701
71
- _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_end=1766
72
- _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_start=1768
73
- _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_end=1821
74
- _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_start=1823
75
- _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_end=1884
76
- _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_start=1886
77
- _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_end=1935
78
- _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_start=1937
79
- _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_end=1980
80
- _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_start=1983
81
- _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_end=2135
82
- _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_start=2086
83
- _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_end=2135
84
- _globals['_JOBSSERVICE']._serialized_start=2410
85
- _globals['_JOBSSERVICE']._serialized_end=3323
49
+ _globals['_JOBINFO']._serialized_end=1088
50
+ _globals['_GETJOBQUEUERESPONSE']._serialized_start=1090
51
+ _globals['_GETJOBQUEUERESPONSE']._serialized_end=1143
52
+ _globals['_CANCELJOBSREQUEST']._serialized_start=1145
53
+ _globals['_CANCELJOBSREQUEST']._serialized_end=1239
54
+ _globals['_CANCELJOBSRESPONSE']._serialized_start=1241
55
+ _globals['_CANCELJOBSRESPONSE']._serialized_end=1288
56
+ _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_start=1290
57
+ _globals['_FAILALLINPROGRESSJOBSREQUEST']._serialized_end=1320
58
+ _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_start=1322
59
+ _globals['_FAILALLINPROGRESSJOBSRESPONSE']._serialized_end=1353
60
+ _globals['_TAILLOGSREQUEST']._serialized_start=1355
61
+ _globals['_TAILLOGSREQUEST']._serialized_end=1482
62
+ _globals['_TAILLOGSRESPONSE']._serialized_start=1484
63
+ _globals['_TAILLOGSRESPONSE']._serialized_end=1539
64
+ _globals['_GETJOBSTATUSREQUEST']._serialized_start=1541
65
+ _globals['_GETJOBSTATUSREQUEST']._serialized_end=1579
66
+ _globals['_GETJOBSTATUSRESPONSE']._serialized_start=1582
67
+ _globals['_GETJOBSTATUSRESPONSE']._serialized_end=1746
68
+ _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_start=1676
69
+ _globals['_GETJOBSTATUSRESPONSE_JOBSTATUSESENTRY']._serialized_end=1746
70
+ _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_start=1748
71
+ _globals['_GETJOBSUBMITTEDTIMESTAMPREQUEST']._serialized_end=1813
72
+ _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_start=1815
73
+ _globals['_GETJOBSUBMITTEDTIMESTAMPRESPONSE']._serialized_end=1868
74
+ _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_start=1870
75
+ _globals['_GETJOBENDEDTIMESTAMPREQUEST']._serialized_end=1931
76
+ _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_start=1933
77
+ _globals['_GETJOBENDEDTIMESTAMPRESPONSE']._serialized_end=1982
78
+ _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_start=1984
79
+ _globals['_GETLOGDIRSFORJOBSREQUEST']._serialized_end=2027
80
+ _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_start=2030
81
+ _globals['_GETLOGDIRSFORJOBSRESPONSE']._serialized_end=2182
82
+ _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_start=2133
83
+ _globals['_GETLOGDIRSFORJOBSRESPONSE_JOBLOGDIRSENTRY']._serialized_end=2182
84
+ _globals['_JOBSSERVICE']._serialized_start=2457
85
+ _globals['_JOBSSERVICE']._serialized_end=3370
86
86
  # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: sky/schemas/generated/servev1.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#sky/schemas/generated/servev1.proto\x12\x08serve.v1\"\x1d\n\x0cServiceNames\x12\r\n\x05names\x18\x01 \x03(\t\"s\n\rServiceStatus\x12\x33\n\x06status\x18\x01 \x03(\x0b\x32#.serve.v1.ServiceStatus.StatusEntry\x1a-\n\x0bStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"m\n\x17GetServiceStatusRequest\x12\x32\n\rservice_names\x18\x01 \x01(\x0b\x32\x16.serve.v1.ServiceNamesH\x00\x88\x01\x01\x12\x0c\n\x04pool\x18\x02 \x01(\x08\x42\x10\n\x0e_service_names\"E\n\x18GetServiceStatusResponse\x12)\n\x08statuses\x18\x01 \x03(\x0b\x32\x17.serve.v1.ServiceStatus\")\n\x11\x41\x64\x64VersionRequest\x12\x14\n\x0cservice_name\x18\x01 \x01(\t\"%\n\x12\x41\x64\x64VersionResponse\x12\x0f\n\x07version\x18\x01 \x01(\x03\"}\n\x18TerminateServicesRequest\x12\x32\n\rservice_names\x18\x01 \x01(\x0b\x32\x16.serve.v1.ServiceNamesH\x00\x88\x01\x01\x12\r\n\x05purge\x18\x02 \x01(\x08\x12\x0c\n\x04pool\x18\x03 \x01(\x08\x42\x10\n\x0e_service_names\",\n\x19TerminateServicesResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"R\n\x17TerminateReplicaRequest\x12\x14\n\x0cservice_name\x18\x01 \x01(\t\x12\x12\n\nreplica_id\x18\x02 \x01(\x03\x12\r\n\x05purge\x18\x03 \x01(\x08\"+\n\x18TerminateReplicaResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"T\n\x1eWaitServiceRegistrationRequest\x12\x14\n\x0cservice_name\x18\x01 \x01(\t\x12\x0e\n\x06job_id\x18\x02 \x01(\x03\x12\x0c\n\x04pool\x18\x03 \x01(\x08\"2\n\x1fWaitServiceRegistrationResponse\x12\x0f\n\x07lb_port\x18\x01 \x01(\x03\"Y\n\x14UpdateServiceRequest\x12\x14\n\x0cservice_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x03\x12\x0c\n\x04mode\x18\x03 \x01(\t\x12\x0c\n\x04pool\x18\x04 \x01(\x08\"\x17\n\x15UpdateServiceResponse2\xad\x04\n\x0cServeService\x12Y\n\x10GetServiceStatus\x12!.serve.v1.GetServiceStatusRequest\x1a\".serve.v1.GetServiceStatusResponse\x12G\n\nAddVersion\x12\x1b.serve.v1.AddVersionRequest\x1a\x1c.serve.v1.AddVersionResponse\x12\\\n\x11TerminateServices\x12\".serve.v1.TerminateServicesRequest\x1a#.serve.v1.TerminateServicesResponse\x12Y\n\x10TerminateReplica\x12!.serve.v1.TerminateReplicaRequest\x1a\".serve.v1.TerminateReplicaResponse\x12n\n\x17WaitServiceRegistration\x12(.serve.v1.WaitServiceRegistrationRequest\x1a).serve.v1.WaitServiceRegistrationResponse\x12P\n\rUpdateService\x12\x1e.serve.v1.UpdateServiceRequest\x1a\x1f.serve.v1.UpdateServiceResponseb\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sky.schemas.generated.servev1_pb2', _globals)
22
+ if not _descriptor._USE_C_DESCRIPTORS:
23
+ DESCRIPTOR._loaded_options = None
24
+ _globals['_SERVICESTATUS_STATUSENTRY']._loaded_options = None
25
+ _globals['_SERVICESTATUS_STATUSENTRY']._serialized_options = b'8\001'
26
+ _globals['_SERVICENAMES']._serialized_start=49
27
+ _globals['_SERVICENAMES']._serialized_end=78
28
+ _globals['_SERVICESTATUS']._serialized_start=80
29
+ _globals['_SERVICESTATUS']._serialized_end=195
30
+ _globals['_SERVICESTATUS_STATUSENTRY']._serialized_start=150
31
+ _globals['_SERVICESTATUS_STATUSENTRY']._serialized_end=195
32
+ _globals['_GETSERVICESTATUSREQUEST']._serialized_start=197
33
+ _globals['_GETSERVICESTATUSREQUEST']._serialized_end=306
34
+ _globals['_GETSERVICESTATUSRESPONSE']._serialized_start=308
35
+ _globals['_GETSERVICESTATUSRESPONSE']._serialized_end=377
36
+ _globals['_ADDVERSIONREQUEST']._serialized_start=379
37
+ _globals['_ADDVERSIONREQUEST']._serialized_end=420
38
+ _globals['_ADDVERSIONRESPONSE']._serialized_start=422
39
+ _globals['_ADDVERSIONRESPONSE']._serialized_end=459
40
+ _globals['_TERMINATESERVICESREQUEST']._serialized_start=461
41
+ _globals['_TERMINATESERVICESREQUEST']._serialized_end=586
42
+ _globals['_TERMINATESERVICESRESPONSE']._serialized_start=588
43
+ _globals['_TERMINATESERVICESRESPONSE']._serialized_end=632
44
+ _globals['_TERMINATEREPLICAREQUEST']._serialized_start=634
45
+ _globals['_TERMINATEREPLICAREQUEST']._serialized_end=716
46
+ _globals['_TERMINATEREPLICARESPONSE']._serialized_start=718
47
+ _globals['_TERMINATEREPLICARESPONSE']._serialized_end=761
48
+ _globals['_WAITSERVICEREGISTRATIONREQUEST']._serialized_start=763
49
+ _globals['_WAITSERVICEREGISTRATIONREQUEST']._serialized_end=847
50
+ _globals['_WAITSERVICEREGISTRATIONRESPONSE']._serialized_start=849
51
+ _globals['_WAITSERVICEREGISTRATIONRESPONSE']._serialized_end=899
52
+ _globals['_UPDATESERVICEREQUEST']._serialized_start=901
53
+ _globals['_UPDATESERVICEREQUEST']._serialized_end=990
54
+ _globals['_UPDATESERVICERESPONSE']._serialized_start=992
55
+ _globals['_UPDATESERVICERESPONSE']._serialized_end=1015
56
+ _globals['_SERVESERVICE']._serialized_start=1018
57
+ _globals['_SERVESERVICE']._serialized_end=1575
58
+ # @@protoc_insertion_point(module_scope)