modal 0.62.16__py3-none-any.whl → 0.72.11__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.
- modal/__init__.py +17 -13
- modal/__main__.py +41 -3
- modal/_clustered_functions.py +80 -0
- modal/_clustered_functions.pyi +22 -0
- modal/_container_entrypoint.py +420 -937
- modal/_ipython.py +3 -13
- modal/_location.py +17 -10
- modal/_output.py +243 -99
- modal/_pty.py +2 -2
- modal/_resolver.py +55 -59
- modal/_resources.py +51 -0
- modal/_runtime/__init__.py +1 -0
- modal/_runtime/asgi.py +519 -0
- modal/_runtime/container_io_manager.py +1036 -0
- modal/_runtime/execution_context.py +89 -0
- modal/_runtime/telemetry.py +169 -0
- modal/_runtime/user_code_imports.py +356 -0
- modal/_serialization.py +134 -9
- modal/_traceback.py +47 -187
- modal/_tunnel.py +52 -16
- modal/_tunnel.pyi +19 -36
- modal/_utils/app_utils.py +3 -17
- modal/_utils/async_utils.py +479 -100
- modal/_utils/blob_utils.py +157 -186
- modal/_utils/bytes_io_segment_payload.py +97 -0
- modal/_utils/deprecation.py +89 -0
- modal/_utils/docker_utils.py +98 -0
- modal/_utils/function_utils.py +460 -171
- modal/_utils/grpc_testing.py +47 -31
- modal/_utils/grpc_utils.py +62 -109
- modal/_utils/hash_utils.py +61 -19
- modal/_utils/http_utils.py +39 -9
- modal/_utils/logger.py +2 -1
- modal/_utils/mount_utils.py +34 -16
- modal/_utils/name_utils.py +58 -0
- modal/_utils/package_utils.py +14 -1
- modal/_utils/pattern_utils.py +205 -0
- modal/_utils/rand_pb_testing.py +5 -7
- modal/_utils/shell_utils.py +15 -49
- modal/_vendor/a2wsgi_wsgi.py +62 -72
- modal/_vendor/cloudpickle.py +1 -1
- modal/_watcher.py +14 -12
- modal/app.py +1003 -314
- modal/app.pyi +540 -264
- modal/call_graph.py +7 -6
- modal/cli/_download.py +63 -53
- modal/cli/_traceback.py +200 -0
- modal/cli/app.py +205 -45
- modal/cli/config.py +12 -5
- modal/cli/container.py +62 -14
- modal/cli/dict.py +128 -0
- modal/cli/entry_point.py +26 -13
- modal/cli/environment.py +40 -9
- modal/cli/import_refs.py +64 -58
- modal/cli/launch.py +32 -18
- modal/cli/network_file_system.py +64 -83
- modal/cli/profile.py +1 -1
- modal/cli/programs/run_jupyter.py +35 -10
- modal/cli/programs/vscode.py +60 -10
- modal/cli/queues.py +131 -0
- modal/cli/run.py +234 -131
- modal/cli/secret.py +8 -7
- modal/cli/token.py +7 -2
- modal/cli/utils.py +79 -10
- modal/cli/volume.py +110 -109
- modal/client.py +250 -144
- modal/client.pyi +157 -118
- modal/cloud_bucket_mount.py +108 -34
- modal/cloud_bucket_mount.pyi +32 -38
- modal/cls.py +535 -148
- modal/cls.pyi +190 -146
- modal/config.py +41 -19
- modal/container_process.py +177 -0
- modal/container_process.pyi +82 -0
- modal/dict.py +111 -65
- modal/dict.pyi +136 -131
- modal/environments.py +106 -5
- modal/environments.pyi +77 -25
- modal/exception.py +34 -43
- modal/experimental.py +61 -2
- modal/extensions/ipython.py +5 -5
- modal/file_io.py +537 -0
- modal/file_io.pyi +235 -0
- modal/file_pattern_matcher.py +197 -0
- modal/functions.py +906 -911
- modal/functions.pyi +466 -430
- modal/gpu.py +57 -44
- modal/image.py +1089 -479
- modal/image.pyi +584 -228
- modal/io_streams.py +434 -0
- modal/io_streams.pyi +122 -0
- modal/mount.py +314 -101
- modal/mount.pyi +241 -235
- modal/network_file_system.py +92 -92
- modal/network_file_system.pyi +152 -110
- modal/object.py +67 -36
- modal/object.pyi +166 -143
- modal/output.py +63 -0
- modal/parallel_map.py +434 -0
- modal/parallel_map.pyi +75 -0
- modal/partial_function.py +282 -117
- modal/partial_function.pyi +222 -129
- modal/proxy.py +15 -12
- modal/proxy.pyi +3 -8
- modal/queue.py +182 -65
- modal/queue.pyi +218 -118
- modal/requirements/2024.04.txt +29 -0
- modal/requirements/2024.10.txt +16 -0
- modal/requirements/README.md +21 -0
- modal/requirements/base-images.json +22 -0
- modal/retries.py +48 -7
- modal/runner.py +459 -156
- modal/runner.pyi +135 -71
- modal/running_app.py +38 -0
- modal/sandbox.py +514 -236
- modal/sandbox.pyi +397 -169
- modal/schedule.py +4 -4
- modal/scheduler_placement.py +20 -3
- modal/secret.py +56 -31
- modal/secret.pyi +62 -42
- modal/serving.py +51 -56
- modal/serving.pyi +44 -36
- modal/stream_type.py +15 -0
- modal/token_flow.py +5 -3
- modal/token_flow.pyi +37 -32
- modal/volume.py +285 -157
- modal/volume.pyi +249 -184
- {modal-0.62.16.dist-info → modal-0.72.11.dist-info}/METADATA +7 -7
- modal-0.72.11.dist-info/RECORD +174 -0
- {modal-0.62.16.dist-info → modal-0.72.11.dist-info}/top_level.txt +0 -1
- modal_docs/gen_reference_docs.py +3 -1
- modal_docs/mdmd/mdmd.py +0 -1
- modal_docs/mdmd/signatures.py +5 -2
- modal_global_objects/images/base_images.py +28 -0
- modal_global_objects/mounts/python_standalone.py +2 -2
- modal_proto/__init__.py +1 -1
- modal_proto/api.proto +1288 -533
- modal_proto/api_grpc.py +856 -456
- modal_proto/api_pb2.py +2165 -1157
- modal_proto/api_pb2.pyi +8859 -0
- modal_proto/api_pb2_grpc.py +1674 -855
- modal_proto/api_pb2_grpc.pyi +1416 -0
- modal_proto/modal_api_grpc.py +149 -0
- modal_proto/modal_options_grpc.py +3 -0
- modal_proto/options_pb2.pyi +20 -0
- modal_proto/options_pb2_grpc.pyi +7 -0
- modal_proto/py.typed +0 -0
- modal_version/__init__.py +1 -1
- modal_version/_version_generated.py +2 -2
- modal/_asgi.py +0 -370
- modal/_container_entrypoint.pyi +0 -378
- modal/_container_exec.py +0 -128
- modal/_sandbox_shell.py +0 -49
- modal/shared_volume.py +0 -23
- modal/shared_volume.pyi +0 -24
- modal/stub.py +0 -783
- modal/stub.pyi +0 -332
- modal-0.62.16.dist-info/RECORD +0 -198
- modal_global_objects/images/conda.py +0 -15
- modal_global_objects/images/debian_slim.py +0 -15
- modal_global_objects/images/micromamba.py +0 -15
- test/__init__.py +0 -1
- test/aio_test.py +0 -12
- test/async_utils_test.py +0 -262
- test/blob_test.py +0 -67
- test/cli_imports_test.py +0 -149
- test/cli_test.py +0 -659
- test/client_test.py +0 -194
- test/cls_test.py +0 -630
- test/config_test.py +0 -137
- test/conftest.py +0 -1420
- test/container_app_test.py +0 -32
- test/container_test.py +0 -1389
- test/cpu_test.py +0 -23
- test/decorator_test.py +0 -85
- test/deprecation_test.py +0 -34
- test/dict_test.py +0 -33
- test/e2e_test.py +0 -68
- test/error_test.py +0 -7
- test/function_serialization_test.py +0 -32
- test/function_test.py +0 -653
- test/function_utils_test.py +0 -101
- test/gpu_test.py +0 -159
- test/grpc_utils_test.py +0 -141
- test/helpers.py +0 -42
- test/image_test.py +0 -669
- test/live_reload_test.py +0 -80
- test/lookup_test.py +0 -70
- test/mdmd_test.py +0 -329
- test/mount_test.py +0 -162
- test/mounted_files_test.py +0 -329
- test/network_file_system_test.py +0 -181
- test/notebook_test.py +0 -66
- test/object_test.py +0 -41
- test/package_utils_test.py +0 -25
- test/queue_test.py +0 -97
- test/resolver_test.py +0 -58
- test/retries_test.py +0 -67
- test/runner_test.py +0 -85
- test/sandbox_test.py +0 -191
- test/schedule_test.py +0 -15
- test/scheduler_placement_test.py +0 -29
- test/secret_test.py +0 -78
- test/serialization_test.py +0 -42
- test/stub_composition_test.py +0 -10
- test/stub_test.py +0 -360
- test/test_asgi_wrapper.py +0 -234
- test/token_flow_test.py +0 -18
- test/traceback_test.py +0 -135
- test/tunnel_test.py +0 -29
- test/utils_test.py +0 -88
- test/version_test.py +0 -14
- test/volume_test.py +0 -341
- test/watcher_test.py +0 -30
- test/webhook_test.py +0 -146
- /modal/{requirements.312.txt → requirements/2023.12.312.txt} +0 -0
- /modal/{requirements.txt → requirements/2023.12.txt} +0 -0
- {modal-0.62.16.dist-info → modal-0.72.11.dist-info}/LICENSE +0 -0
- {modal-0.62.16.dist-info → modal-0.72.11.dist-info}/WHEEL +0 -0
- {modal-0.62.16.dist-info → modal-0.72.11.dist-info}/entry_points.txt +0 -0
modal_proto/api.proto
CHANGED
@@ -18,6 +18,7 @@ enum AppDisconnectReason {
|
|
18
18
|
APP_DISCONNECT_REASON_KEYBOARD_INTERRUPT = 2;
|
19
19
|
APP_DISCONNECT_REASON_ENTRYPOINT_COMPLETED = 3;
|
20
20
|
APP_DISCONNECT_REASON_DEPLOYMENT_EXCEPTION = 4;
|
21
|
+
APP_DISCONNECT_REASON_REMOTE_EXCEPTION = 5;
|
21
22
|
}
|
22
23
|
|
23
24
|
// NOTE: make sure to update the frontend if we add a new state here
|
@@ -49,7 +50,7 @@ enum AppState {
|
|
49
50
|
APP_STATE_DETACHED_DISCONNECTED = 8;
|
50
51
|
|
51
52
|
// App is derived from another workspace. Acts as a static, immutable group of functions.
|
52
|
-
APP_STATE_DERIVED = 9;
|
53
|
+
APP_STATE_DERIVED = 9 [deprecated=true];
|
53
54
|
}
|
54
55
|
|
55
56
|
enum AppStopSource {
|
@@ -77,37 +78,29 @@ enum CheckpointStatus {
|
|
77
78
|
enum ClientType {
|
78
79
|
CLIENT_TYPE_UNSPECIFIED = 0;
|
79
80
|
CLIENT_TYPE_CLIENT = 1;
|
80
|
-
CLIENT_TYPE_WORKER = 2
|
81
|
+
CLIENT_TYPE_WORKER = 2;
|
81
82
|
CLIENT_TYPE_CONTAINER = 3;
|
82
|
-
CLIENT_TYPE_SERVER = 4 [deprecated=true];
|
83
83
|
CLIENT_TYPE_WEB_SERVER = 5;
|
84
84
|
}
|
85
85
|
|
86
|
-
message CloudBucketMount {
|
87
|
-
string bucket_name = 1;
|
88
|
-
string mount_path = 2;
|
89
|
-
string credentials_secret_id = 3;
|
90
|
-
bool read_only = 4;
|
91
|
-
bool requester_pays = 6;
|
92
|
-
|
93
|
-
enum BucketType {
|
94
|
-
UNSPECIFIED = 0;
|
95
|
-
S3 = 1;
|
96
|
-
}
|
97
|
-
BucketType bucket_type = 5;
|
98
|
-
}
|
99
|
-
|
100
86
|
enum CloudProvider {
|
101
87
|
CLOUD_PROVIDER_UNSPECIFIED = 0;
|
102
88
|
CLOUD_PROVIDER_AWS = 1;
|
103
89
|
CLOUD_PROVIDER_GCP = 2;
|
104
90
|
CLOUD_PROVIDER_AUTO = 3;
|
105
91
|
CLOUD_PROVIDER_OCI = 4;
|
92
|
+
reserved 5, 6, 7, 8; // now unused internal experimental values
|
93
|
+
}
|
94
|
+
|
95
|
+
enum DNSRecordType {
|
96
|
+
DNS_RECORD_TYPE_A = 0;
|
97
|
+
DNS_RECORD_TYPE_TXT = 1;
|
98
|
+
DNS_RECORD_TYPE_CNAME = 2;
|
106
99
|
}
|
107
100
|
|
108
101
|
// Which data format a binary message is encoded with.
|
109
102
|
enum DataFormat {
|
110
|
-
DATA_FORMAT_UNSPECIFIED = 0;
|
103
|
+
DATA_FORMAT_UNSPECIFIED = 0;
|
111
104
|
DATA_FORMAT_PICKLE = 1; // Cloudpickle
|
112
105
|
DATA_FORMAT_ASGI = 2; // "Asgi" protobuf message
|
113
106
|
DATA_FORMAT_GENERATOR_DONE = 3; // "GeneratorDone" protobuf message
|
@@ -119,10 +112,11 @@ enum DeploymentNamespace {
|
|
119
112
|
DEPLOYMENT_NAMESPACE_GLOBAL = 3;
|
120
113
|
}
|
121
114
|
|
122
|
-
enum
|
123
|
-
|
124
|
-
|
125
|
-
|
115
|
+
enum ExecOutputOption {
|
116
|
+
EXEC_OUTPUT_OPTION_UNSPECIFIED = 0;
|
117
|
+
EXEC_OUTPUT_OPTION_DEVNULL = 1;
|
118
|
+
EXEC_OUTPUT_OPTION_PIPE = 2;
|
119
|
+
EXEC_OUTPUT_OPTION_STDOUT = 3;
|
126
120
|
}
|
127
121
|
|
128
122
|
enum FileDescriptor {
|
@@ -132,6 +126,14 @@ enum FileDescriptor {
|
|
132
126
|
FILE_DESCRIPTOR_INFO = 3;
|
133
127
|
}
|
134
128
|
|
129
|
+
enum FunctionCallInvocationType {
|
130
|
+
FUNCTION_CALL_INVOCATION_TYPE_UNSPECIFIED = 0;
|
131
|
+
FUNCTION_CALL_INVOCATION_TYPE_SYNC_LEGACY = 1;
|
132
|
+
FUNCTION_CALL_INVOCATION_TYPE_ASYNC_LEGACY = 2;
|
133
|
+
FUNCTION_CALL_INVOCATION_TYPE_ASYNC = 3;
|
134
|
+
FUNCTION_CALL_INVOCATION_TYPE_SYNC = 4;
|
135
|
+
}
|
136
|
+
|
135
137
|
enum FunctionCallType {
|
136
138
|
FUNCTION_CALL_TYPE_UNSPECIFIED = 0;
|
137
139
|
FUNCTION_CALL_TYPE_UNARY = 1;
|
@@ -144,12 +146,11 @@ enum GPUType {
|
|
144
146
|
GPU_TYPE_A100 = 2;
|
145
147
|
GPU_TYPE_A10G = 3;
|
146
148
|
GPU_TYPE_ANY = 4;
|
147
|
-
GPU_TYPE_A100_20G = 5 [deprecated=true];
|
148
|
-
GPU_TYPE_A100_40GB_MANY = 6 [deprecated=true];
|
149
|
-
GPU_TYPE_INFERENTIA2 = 7 [deprecated=true];
|
150
149
|
GPU_TYPE_A100_80GB = 8;
|
151
150
|
GPU_TYPE_L4 = 9;
|
152
151
|
GPU_TYPE_H100 = 10;
|
152
|
+
GPU_TYPE_L40S = 11;
|
153
|
+
GPU_TYPE_H200 = 12;
|
153
154
|
}
|
154
155
|
|
155
156
|
enum ObjectCreationType {
|
@@ -161,11 +162,31 @@ enum ObjectCreationType {
|
|
161
162
|
OBJECT_CREATION_TYPE_EPHEMERAL = 5;
|
162
163
|
}
|
163
164
|
|
165
|
+
enum ParameterType {
|
166
|
+
PARAM_TYPE_UNSPECIFIED = 0;
|
167
|
+
PARAM_TYPE_STRING = 1;
|
168
|
+
PARAM_TYPE_INT = 2;
|
169
|
+
}
|
170
|
+
|
164
171
|
enum ProgressType {
|
165
172
|
IMAGE_SNAPSHOT_UPLOAD = 0; // TODO(erikbern): shouldn't be zero, and needs prefix
|
166
173
|
FUNCTION_QUEUED = 1; // TODO(erikbern): needs_prefix
|
167
174
|
}
|
168
175
|
|
176
|
+
enum ProxyIpStatus {
|
177
|
+
PROXY_IP_STATUS_UNSPECIFIED = 0;
|
178
|
+
PROXY_IP_STATUS_CREATING = 1;
|
179
|
+
PROXY_IP_STATUS_ONLINE = 2;
|
180
|
+
PROXY_IP_STATUS_TERMINATED = 3;
|
181
|
+
PROXY_IP_STATUS_UNHEALTHY = 4;
|
182
|
+
}
|
183
|
+
|
184
|
+
enum ProxyType {
|
185
|
+
PROXY_TYPE_UNSPECIFIED = 0;
|
186
|
+
PROXY_TYPE_LEGACY = 1;
|
187
|
+
PROXY_TYPE_VPROX = 2;
|
188
|
+
}
|
189
|
+
|
169
190
|
enum RateLimitInterval {
|
170
191
|
RATE_LIMIT_INTERVAL_UNSPECIFIED = 0;
|
171
192
|
RATE_LIMIT_INTERVAL_SECOND = 1;
|
@@ -180,6 +201,29 @@ enum RegistryAuthType {
|
|
180
201
|
REGISTRY_AUTH_TYPE_STATIC_CREDS = 4;
|
181
202
|
}
|
182
203
|
|
204
|
+
enum SeekWhence {
|
205
|
+
SEEK_SET = 0;
|
206
|
+
SEEK_CUR = 1;
|
207
|
+
SEEK_END = 2;
|
208
|
+
}
|
209
|
+
|
210
|
+
enum SystemErrorCode {
|
211
|
+
SYSTEM_ERROR_CODE_UNSPECIFIED = 0;
|
212
|
+
SYSTEM_ERROR_CODE_PERM = 1; // EPERM: Operation not permitted
|
213
|
+
SYSTEM_ERROR_CODE_NOENT = 2; // ENOENT: No such file or directory
|
214
|
+
SYSTEM_ERROR_CODE_IO = 5; // EIO: Input/output error
|
215
|
+
SYSTEM_ERROR_CODE_NXIO = 6; // ENXIO: No such device or address
|
216
|
+
SYSTEM_ERROR_CODE_NOMEM = 12; // ENOMEM: Out of memory
|
217
|
+
SYSTEM_ERROR_CODE_ACCES = 13; // EACCES: Permission denied
|
218
|
+
SYSTEM_ERROR_CODE_EXIST = 17; // EEXIST: File exists
|
219
|
+
SYSTEM_ERROR_CODE_NOTDIR = 20; // ENOTDIR: Not a directory
|
220
|
+
SYSTEM_ERROR_CODE_ISDIR = 21; // EISDIR: Is a directory
|
221
|
+
SYSTEM_ERROR_CODE_INVAL = 22; // EINVAL: Invalid argument
|
222
|
+
SYSTEM_ERROR_CODE_MFILE = 24; // EMFILE: Too many open files
|
223
|
+
SYSTEM_ERROR_CODE_FBIG = 27; // EFBIG: File too large
|
224
|
+
SYSTEM_ERROR_CODE_NOSPC = 28; // ENOSPC: No space left on device
|
225
|
+
}
|
226
|
+
|
183
227
|
enum TaskState {
|
184
228
|
TASK_STATE_UNSPECIFIED = 0;
|
185
229
|
TASK_STATE_CREATED = 6;
|
@@ -195,6 +239,20 @@ enum TaskState {
|
|
195
239
|
TASK_STATE_LOADING_CHECKPOINT_IMAGE = 11;
|
196
240
|
}
|
197
241
|
|
242
|
+
enum VolumeFsVersion {
|
243
|
+
VOLUME_FS_VERSION_UNSPECIFIED = 0;
|
244
|
+
VOLUME_FS_VERSION_V1 = 1;
|
245
|
+
VOLUME_FS_VERSION_V2 = 2;
|
246
|
+
}
|
247
|
+
|
248
|
+
enum WebhookAsyncMode {
|
249
|
+
WEBHOOK_ASYNC_MODE_UNSPECIFIED = 0;
|
250
|
+
reserved 1; // unused REDIRECT mode
|
251
|
+
WEBHOOK_ASYNC_MODE_DISABLED = 2; // No longer used by client
|
252
|
+
WEBHOOK_ASYNC_MODE_TRIGGER = 3; // No longer used by client (previously used when wait_for_response=False)
|
253
|
+
WEBHOOK_ASYNC_MODE_AUTO = 4; // The default
|
254
|
+
}
|
255
|
+
|
198
256
|
enum WebhookType {
|
199
257
|
WEBHOOK_TYPE_UNSPECIFIED = 0;
|
200
258
|
WEBHOOK_TYPE_ASGI_APP = 1;
|
@@ -203,14 +261,6 @@ enum WebhookType {
|
|
203
261
|
WEBHOOK_TYPE_WEB_SERVER = 4;
|
204
262
|
}
|
205
263
|
|
206
|
-
enum WebhookAsyncMode {
|
207
|
-
WEBHOOK_ASYNC_MODE_UNSPECIFIED = 0;
|
208
|
-
reserved 1; // unused REDIRECT mode
|
209
|
-
WEBHOOK_ASYNC_MODE_DISABLED = 2; // no redirect, fail after timeout
|
210
|
-
WEBHOOK_ASYNC_MODE_TRIGGER = 3; // return immediately, roughly same as old wait_for_response=False
|
211
|
-
WEBHOOK_ASYNC_MODE_AUTO = 4; // redirect to polling endpoint if execution time nears the http timeout
|
212
|
-
}
|
213
|
-
|
214
264
|
message AppClientDisconnectRequest {
|
215
265
|
string app_id = 1;
|
216
266
|
AppDisconnectReason reason = 2;
|
@@ -220,46 +270,49 @@ message AppClientDisconnectRequest {
|
|
220
270
|
message AppCreateRequest {
|
221
271
|
string client_id = 1 [ (modal.options.audit_target_attr) = true ];
|
222
272
|
string description = 2; // Human readable label for the app
|
223
|
-
bool detach = 3 [deprecated=true]; // replaced by app_state in 0.55.3904
|
224
|
-
bool initializing = 4 [deprecated=true]; // replaced by app_state in 0.55.3904
|
225
273
|
string environment_name = 5;
|
226
274
|
AppState app_state = 6;
|
227
275
|
}
|
228
276
|
|
229
277
|
message AppCreateResponse {
|
230
278
|
string app_id = 1;
|
231
|
-
string
|
279
|
+
string app_page_url = 2;
|
280
|
+
string app_logs_url = 3;
|
232
281
|
}
|
233
282
|
|
234
|
-
message AppStopRequest {
|
235
|
-
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
236
|
-
AppStopSource source = 2;
|
237
|
-
}
|
238
|
-
|
239
|
-
|
240
283
|
message AppDeployRequest {
|
241
284
|
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
242
285
|
DeploymentNamespace namespace = 2;
|
243
286
|
string name = 3;
|
244
287
|
string object_entity = 4;
|
245
288
|
AppDeployVisibility visibility = 5;
|
289
|
+
string tag = 6;
|
246
290
|
}
|
247
291
|
|
248
292
|
message AppDeployResponse {
|
249
293
|
string url = 1;
|
250
294
|
}
|
251
295
|
|
252
|
-
message
|
253
|
-
string
|
254
|
-
|
255
|
-
string
|
256
|
-
|
296
|
+
message AppDeploymentHistory {
|
297
|
+
string app_id = 1;
|
298
|
+
uint32 version = 2;
|
299
|
+
string client_version = 3;
|
300
|
+
double deployed_at = 4;
|
301
|
+
string deployed_by = 5;
|
302
|
+
string deployed_by_avatar_url = 9;
|
303
|
+
string tag = 6;
|
304
|
+
uint32 rollback_version = 7;
|
305
|
+
bool rollback_allowed = 8;
|
257
306
|
}
|
258
307
|
|
259
|
-
message
|
308
|
+
message AppDeploymentHistoryRequest {
|
260
309
|
string app_id = 1;
|
261
310
|
}
|
262
311
|
|
312
|
+
message AppDeploymentHistoryResponse {
|
313
|
+
repeated AppDeploymentHistory app_deployment_histories = 1;
|
314
|
+
}
|
315
|
+
|
263
316
|
message AppGetByDeploymentNameRequest {
|
264
317
|
DeploymentNamespace namespace = 1;
|
265
318
|
string name = 2;
|
@@ -270,6 +323,14 @@ message AppGetByDeploymentNameResponse {
|
|
270
323
|
string app_id = 1;
|
271
324
|
}
|
272
325
|
|
326
|
+
message AppGetLayoutRequest {
|
327
|
+
string app_id = 1;
|
328
|
+
}
|
329
|
+
|
330
|
+
message AppGetLayoutResponse {
|
331
|
+
AppLayout app_layout = 1;
|
332
|
+
}
|
333
|
+
|
273
334
|
message AppGetLogsRequest {
|
274
335
|
string app_id = 1;
|
275
336
|
float timeout = 2;
|
@@ -280,44 +341,87 @@ message AppGetLogsRequest {
|
|
280
341
|
FileDescriptor file_descriptor = 8;
|
281
342
|
}
|
282
343
|
|
283
|
-
message AppGetObjectsRequest {
|
284
|
-
string app_id = 1;
|
285
|
-
bool include_unindexed = 2;
|
286
|
-
}
|
287
|
-
|
288
344
|
message AppGetObjectsItem {
|
289
345
|
string tag = 1;
|
290
346
|
Object object = 6;
|
291
347
|
}
|
292
348
|
|
349
|
+
message AppGetObjectsRequest {
|
350
|
+
string app_id = 1;
|
351
|
+
bool include_unindexed = 2;
|
352
|
+
bool only_class_function = 3; // True starting with 0.67.x clients, which don't create method placeholder functions
|
353
|
+
}
|
354
|
+
|
293
355
|
message AppGetObjectsResponse {
|
294
356
|
repeated AppGetObjectsItem items = 2;
|
295
357
|
}
|
296
358
|
|
359
|
+
message AppGetOrCreateRequest {
|
360
|
+
string app_name = 1;
|
361
|
+
string environment_name = 2;
|
362
|
+
ObjectCreationType object_creation_type = 3;
|
363
|
+
}
|
364
|
+
|
365
|
+
message AppGetOrCreateResponse {
|
366
|
+
string app_id = 1;
|
367
|
+
}
|
368
|
+
|
297
369
|
message AppHeartbeatRequest {
|
298
370
|
string app_id = 1;
|
299
371
|
}
|
300
372
|
|
373
|
+
message AppLayout {
|
374
|
+
repeated Object objects = 1;
|
375
|
+
map<string, string> function_ids = 2; // tag -> function id
|
376
|
+
map<string, string> class_ids = 3; // tag -> class id
|
377
|
+
}
|
378
|
+
|
301
379
|
message AppListRequest {
|
302
380
|
string environment_name = 1;
|
303
381
|
}
|
304
382
|
|
305
383
|
message AppListResponse {
|
306
|
-
|
384
|
+
message AppListItem {
|
385
|
+
string app_id = 1;
|
386
|
+
string description = 3;
|
387
|
+
AppState state = 4;
|
388
|
+
double created_at = 5;
|
389
|
+
double stopped_at = 6;
|
390
|
+
int32 n_running_tasks = 8;
|
391
|
+
string name = 10;
|
392
|
+
}
|
393
|
+
repeated AppListItem apps = 1;
|
307
394
|
}
|
308
395
|
|
309
|
-
message
|
310
|
-
|
311
|
-
string
|
312
|
-
string object_tag = 4;
|
313
|
-
string object_id = 5;
|
314
|
-
string object_entity = 6;
|
315
|
-
string environment_name = 7;
|
396
|
+
message AppLookupRequest {
|
397
|
+
string app_name = 2;
|
398
|
+
string environment_name = 3;
|
316
399
|
}
|
317
400
|
|
318
|
-
message
|
319
|
-
|
320
|
-
|
401
|
+
message AppLookupResponse {
|
402
|
+
string app_id = 1;
|
403
|
+
}
|
404
|
+
|
405
|
+
message AppPublishRequest {
|
406
|
+
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
407
|
+
string name = 2;
|
408
|
+
string deployment_tag = 3; // Additional metadata to identify a deployment
|
409
|
+
AppState app_state = 4; // Published app will be in this state
|
410
|
+
map<string, string> function_ids = 5; // function_name -> function_id
|
411
|
+
map<string, string> class_ids = 6; // class_name -> class_id
|
412
|
+
map<string, string> definition_ids = 7; // function_id -> definition_id
|
413
|
+
uint32 rollback_version = 8; // Unused by client, but used internally
|
414
|
+
string client_version = 9; // Unused by client, but used internally
|
415
|
+
}
|
416
|
+
|
417
|
+
message AppPublishResponse {
|
418
|
+
string url = 1;
|
419
|
+
repeated Warning server_warnings = 3;
|
420
|
+
}
|
421
|
+
|
422
|
+
message AppRollbackRequest {
|
423
|
+
string app_id = 1;
|
424
|
+
int32 version = 2; // signed as we support negative "roll back n versions" requests
|
321
425
|
}
|
322
426
|
|
323
427
|
message AppSetObjectsRequest {
|
@@ -326,19 +430,12 @@ message AppSetObjectsRequest {
|
|
326
430
|
string client_id = 3;
|
327
431
|
repeated string unindexed_object_ids = 4;
|
328
432
|
AppState new_app_state = 5; // promotes an app from initializing to this new state
|
329
|
-
|
433
|
+
reserved 6;
|
330
434
|
}
|
331
435
|
|
332
|
-
message
|
333
|
-
string app_id = 1;
|
334
|
-
|
335
|
-
AppState state = 4;
|
336
|
-
double created_at = 5;
|
337
|
-
double stopped_at = 6;
|
338
|
-
int32 n_running_tasks = 8;
|
339
|
-
string object_entity = 9;
|
340
|
-
string name = 10;
|
341
|
-
double deployed_at = 11;
|
436
|
+
message AppStopRequest {
|
437
|
+
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
438
|
+
AppStopSource source = 2;
|
342
439
|
}
|
343
440
|
|
344
441
|
// A web endpoint connection-related message.
|
@@ -490,16 +587,33 @@ message BlobGetResponse {
|
|
490
587
|
string download_url = 1;
|
491
588
|
}
|
492
589
|
|
590
|
+
message BuildFunction {
|
591
|
+
string definition = 1;
|
592
|
+
bytes globals = 2;
|
593
|
+
FunctionInput input = 3;
|
594
|
+
}
|
595
|
+
|
596
|
+
message CancelInputEvent {
|
597
|
+
repeated string input_ids = 1;
|
598
|
+
bool terminate_containers = 2;
|
599
|
+
}
|
600
|
+
|
493
601
|
message CheckpointInfo {
|
494
602
|
string checksum = 1;
|
495
603
|
CheckpointStatus status = 2;
|
496
604
|
string checkpoint_id = 3;
|
605
|
+
string runtime_fingerprint = 4;
|
606
|
+
int64 size = 5;
|
607
|
+
bool checksum_is_file_index = 6;
|
608
|
+
string original_task_id = 7;
|
497
609
|
}
|
498
610
|
|
499
611
|
message ClassCreateRequest {
|
500
612
|
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
501
613
|
string existing_class_id = 2;
|
502
614
|
repeated ClassMethod methods = 3;
|
615
|
+
reserved 4; // removed class_function_id
|
616
|
+
bool only_class_function = 5; // True starting with 0.67.x clients, which don't create method placeholder functions
|
503
617
|
}
|
504
618
|
|
505
619
|
message ClassCreateResponse {
|
@@ -515,15 +629,19 @@ message ClassGetRequest {
|
|
515
629
|
|
516
630
|
bool lookup_published = 8; // Lookup class on app published by another workspace
|
517
631
|
string workspace_name = 9;
|
632
|
+
bool only_class_function = 10; // True starting with 0.67.x clients, which don't create method placeholder functions
|
518
633
|
}
|
519
634
|
|
520
635
|
message ClassGetResponse {
|
521
636
|
string class_id = 1;
|
522
637
|
ClassHandleMetadata handle_metadata = 2;
|
638
|
+
repeated Warning server_warnings = 3;
|
523
639
|
}
|
524
640
|
|
525
641
|
message ClassHandleMetadata {
|
526
642
|
repeated ClassMethod methods = 1;
|
643
|
+
string class_function_id = 2;
|
644
|
+
FunctionHandleMetadata class_function_metadata = 3;
|
527
645
|
}
|
528
646
|
|
529
647
|
message ClassMethod {
|
@@ -534,26 +652,67 @@ message ClassMethod {
|
|
534
652
|
FunctionHandleMetadata function_handle_metadata = 3;
|
535
653
|
}
|
536
654
|
|
537
|
-
message
|
538
|
-
|
539
|
-
|
655
|
+
message ClassParameterInfo {
|
656
|
+
enum ParameterSerializationFormat {
|
657
|
+
PARAM_SERIALIZATION_FORMAT_UNSPECIFIED = 0;
|
658
|
+
PARAM_SERIALIZATION_FORMAT_PICKLE = 1; // legacy format - pickle of (args, kwargs) tuple
|
659
|
+
PARAM_SERIALIZATION_FORMAT_PROTO = 2; // new format using api.FunctionParameterSet
|
660
|
+
}
|
661
|
+
ParameterSerializationFormat format = 1;
|
662
|
+
repeated ClassParameterSpec schema = 2; // only set for PARAM_SERIALIZATION_FORMAT_PROTO
|
663
|
+
}
|
664
|
+
|
665
|
+
message ClassParameterSet {
|
666
|
+
// NOTE: adding additional *fields* here can invalidate function lookups
|
667
|
+
// since we use the serialized message as the bound function identifier
|
668
|
+
// for parameter-bound classes. Modify with *caution*
|
669
|
+
repeated ClassParameterValue parameters = 1;
|
670
|
+
}
|
671
|
+
|
672
|
+
message ClassParameterSpec {
|
673
|
+
string name = 1;
|
674
|
+
ParameterType type = 2;
|
675
|
+
bool has_default = 3;
|
676
|
+
oneof default_oneof {
|
677
|
+
string string_default = 4;
|
678
|
+
int64 int_default = 5;
|
679
|
+
}
|
540
680
|
}
|
541
681
|
|
542
|
-
message
|
543
|
-
|
544
|
-
|
545
|
-
|
682
|
+
message ClassParameterValue {
|
683
|
+
// NOTE: adding additional *fields* here can invalidate function lookups
|
684
|
+
// since we use the serialized message as the bound function identifier
|
685
|
+
// for parameter-bound classes. Modify with *caution*
|
686
|
+
string name = 1;
|
687
|
+
ParameterType type = 2;
|
688
|
+
oneof value_oneof {
|
689
|
+
string string_value = 3;
|
690
|
+
int64 int_value = 4;
|
691
|
+
}
|
546
692
|
}
|
547
693
|
|
548
694
|
message ClientHelloResponse {
|
549
695
|
string warning = 1;
|
550
|
-
string image_builder_version = 2;
|
696
|
+
string image_builder_version = 2; // Deprecated, no longer used in client
|
697
|
+
repeated Warning server_warnings = 4;
|
551
698
|
}
|
552
699
|
|
553
|
-
message
|
554
|
-
|
555
|
-
|
556
|
-
|
700
|
+
message CloudBucketMount {
|
701
|
+
enum BucketType {
|
702
|
+
UNSPECIFIED = 0;
|
703
|
+
S3 = 1;
|
704
|
+
R2 = 2;
|
705
|
+
GCP = 3;
|
706
|
+
}
|
707
|
+
|
708
|
+
string bucket_name = 1;
|
709
|
+
string mount_path = 2;
|
710
|
+
string credentials_secret_id = 3;
|
711
|
+
bool read_only = 4;
|
712
|
+
BucketType bucket_type = 5;
|
713
|
+
bool requester_pays = 6;
|
714
|
+
optional string bucket_endpoint_url = 7;
|
715
|
+
optional string key_prefix = 8;
|
557
716
|
}
|
558
717
|
|
559
718
|
message ContainerArguments { // This is used to pass data from the worker to the container
|
@@ -567,24 +726,25 @@ message ContainerArguments { // This is used to pass data from the worker to th
|
|
567
726
|
string runtime = 11;
|
568
727
|
string environment_name = 13;
|
569
728
|
optional string checkpoint_id = 14;
|
729
|
+
AppLayout app_layout = 15;
|
570
730
|
}
|
571
731
|
|
572
|
-
message
|
573
|
-
|
574
|
-
}
|
575
|
-
|
576
|
-
message ContainerHeartbeatResponse {
|
577
|
-
optional CancelInputEvent cancel_input_event = 1;
|
732
|
+
message ContainerCheckpointRequest {
|
733
|
+
string checkpoint_id = 1;
|
578
734
|
}
|
579
735
|
|
580
|
-
message
|
581
|
-
string
|
582
|
-
|
583
|
-
|
736
|
+
message ContainerExecGetOutputRequest {
|
737
|
+
string exec_id = 1;
|
738
|
+
float timeout = 2;
|
739
|
+
uint64 last_batch_index = 3;
|
740
|
+
FileDescriptor file_descriptor = 4;
|
741
|
+
// Old clients (up to 0.65.39) expect string output. Newer clients stream raw bytes
|
742
|
+
bool get_raw_bytes = 5;
|
584
743
|
}
|
585
744
|
|
586
|
-
message
|
587
|
-
string
|
745
|
+
message ContainerExecPutInputRequest {
|
746
|
+
string exec_id = 1;
|
747
|
+
RuntimeInputMessage input = 2;
|
588
748
|
}
|
589
749
|
|
590
750
|
message ContainerExecRequest {
|
@@ -594,21 +754,145 @@ message ContainerExecRequest {
|
|
594
754
|
// Send SIGTERM to running container on exit of exec command.
|
595
755
|
bool terminate_container_on_exit = 4;
|
596
756
|
bool runtime_debug = 5; // For internal debugging use only.
|
757
|
+
ExecOutputOption stdout_output = 6;
|
758
|
+
ExecOutputOption stderr_output = 7;
|
759
|
+
uint32 timeout_secs = 8;
|
760
|
+
optional string workdir = 9;
|
761
|
+
repeated string secret_ids = 10;
|
597
762
|
}
|
598
763
|
|
599
|
-
message
|
764
|
+
message ContainerExecResponse {
|
765
|
+
string exec_id = 1;
|
766
|
+
}
|
767
|
+
|
768
|
+
message ContainerExecWaitRequest {
|
600
769
|
string exec_id = 1;
|
601
770
|
float timeout = 2;
|
602
|
-
uint64 last_batch_index = 3;
|
603
771
|
}
|
604
772
|
|
605
|
-
message
|
773
|
+
message ContainerExecWaitResponse {
|
774
|
+
optional int32 exit_code = 1;
|
775
|
+
bool completed = 2;
|
776
|
+
}
|
777
|
+
|
778
|
+
message ContainerFileCloseRequest {
|
779
|
+
string file_descriptor = 1;
|
780
|
+
}
|
781
|
+
|
782
|
+
message ContainerFileDeleteBytesRequest {
|
783
|
+
string file_descriptor = 1;
|
784
|
+
optional uint32 start_inclusive = 2;
|
785
|
+
optional uint32 end_exclusive = 3;
|
786
|
+
}
|
787
|
+
|
788
|
+
message ContainerFileFlushRequest {
|
789
|
+
string file_descriptor = 1;
|
790
|
+
}
|
791
|
+
|
792
|
+
message ContainerFileLsRequest {
|
793
|
+
string path = 1;
|
794
|
+
}
|
795
|
+
|
796
|
+
message ContainerFileMkdirRequest {
|
797
|
+
string path = 1;
|
798
|
+
bool make_parents = 2;
|
799
|
+
}
|
800
|
+
|
801
|
+
message ContainerFileOpenRequest {
|
802
|
+
// file descriptor is hydrated when sent from server -> worker
|
803
|
+
optional string file_descriptor = 1;
|
804
|
+
string path = 2;
|
805
|
+
string mode = 3;
|
806
|
+
}
|
807
|
+
|
808
|
+
message ContainerFileReadLineRequest {
|
809
|
+
string file_descriptor = 1;
|
810
|
+
}
|
811
|
+
|
812
|
+
message ContainerFileReadRequest {
|
813
|
+
string file_descriptor = 1;
|
814
|
+
optional uint32 n = 2;
|
815
|
+
}
|
816
|
+
|
817
|
+
message ContainerFileRmRequest {
|
818
|
+
string path = 1;
|
819
|
+
bool recursive = 2;
|
820
|
+
}
|
821
|
+
|
822
|
+
message ContainerFileSeekRequest {
|
823
|
+
string file_descriptor = 1;
|
824
|
+
int32 offset = 2;
|
825
|
+
SeekWhence whence = 3;
|
826
|
+
}
|
827
|
+
|
828
|
+
message ContainerFileWatchRequest {
|
829
|
+
string path = 1;
|
830
|
+
bool recursive = 2;
|
831
|
+
optional uint64 timeout_secs = 3;
|
832
|
+
}
|
833
|
+
|
834
|
+
message ContainerFileWriteReplaceBytesRequest {
|
835
|
+
string file_descriptor = 1;
|
836
|
+
bytes data = 2;
|
837
|
+
optional uint32 start_inclusive = 3;
|
838
|
+
optional uint32 end_exclusive = 4;
|
839
|
+
}
|
840
|
+
|
841
|
+
message ContainerFileWriteRequest {
|
842
|
+
string file_descriptor = 1;
|
843
|
+
bytes data = 2;
|
844
|
+
}
|
845
|
+
|
846
|
+
message ContainerFilesystemExecGetOutputRequest {
|
606
847
|
string exec_id = 1;
|
607
|
-
|
848
|
+
float timeout = 2;
|
608
849
|
}
|
609
850
|
|
610
|
-
message
|
851
|
+
message ContainerFilesystemExecRequest {
|
852
|
+
oneof file_exec_request_oneof {
|
853
|
+
ContainerFileOpenRequest file_open_request = 1;
|
854
|
+
ContainerFileWriteRequest file_write_request = 2;
|
855
|
+
ContainerFileReadRequest file_read_request = 3;
|
856
|
+
ContainerFileFlushRequest file_flush_request = 4;
|
857
|
+
ContainerFileReadLineRequest file_read_line_request = 5;
|
858
|
+
ContainerFileSeekRequest file_seek_request = 6;
|
859
|
+
ContainerFileDeleteBytesRequest file_delete_bytes_request = 7;
|
860
|
+
ContainerFileWriteReplaceBytesRequest file_write_replace_bytes_request = 8;
|
861
|
+
ContainerFileCloseRequest file_close_request = 9;
|
862
|
+
ContainerFileLsRequest file_ls_request = 11;
|
863
|
+
ContainerFileMkdirRequest file_mkdir_request = 12;
|
864
|
+
ContainerFileRmRequest file_rm_request = 13;
|
865
|
+
ContainerFileWatchRequest file_watch_request = 14;
|
866
|
+
}
|
867
|
+
string task_id = 10;
|
868
|
+
}
|
869
|
+
|
870
|
+
message ContainerFilesystemExecResponse {
|
611
871
|
string exec_id = 1;
|
872
|
+
// only set when the request opens a new file, i.e., ContainerFileOpenRequest
|
873
|
+
optional string file_descriptor = 2;
|
874
|
+
}
|
875
|
+
|
876
|
+
message ContainerHeartbeatRequest {
|
877
|
+
bool canceled_inputs_return_outputs = 4; // Bad client version.
|
878
|
+
bool canceled_inputs_return_outputs_v2 = 5;
|
879
|
+
|
880
|
+
reserved 1, 2, 3;
|
881
|
+
}
|
882
|
+
|
883
|
+
message ContainerHeartbeatResponse {
|
884
|
+
optional CancelInputEvent cancel_input_event = 1;
|
885
|
+
}
|
886
|
+
|
887
|
+
message ContainerLogRequest {
|
888
|
+
repeated TaskLogs logs = 3;
|
889
|
+
}
|
890
|
+
|
891
|
+
message ContainerStopRequest {
|
892
|
+
string task_id = 1 [ (modal.options.audit_target_attr) = true ];
|
893
|
+
}
|
894
|
+
|
895
|
+
message ContainerStopResponse {
|
612
896
|
}
|
613
897
|
|
614
898
|
message CustomDomainConfig {
|
@@ -619,6 +903,12 @@ message CustomDomainInfo {
|
|
619
903
|
string url = 1;
|
620
904
|
}
|
621
905
|
|
906
|
+
message DNSRecord {
|
907
|
+
DNSRecordType type = 1;
|
908
|
+
string name = 2;
|
909
|
+
string value = 3;
|
910
|
+
}
|
911
|
+
|
622
912
|
// Chunks of data that can be streamed in and out of tasks.
|
623
913
|
message DataChunk {
|
624
914
|
DataFormat data_format = 1;
|
@@ -642,18 +932,25 @@ message DictContainsResponse {
|
|
642
932
|
bool found = 1;
|
643
933
|
}
|
644
934
|
|
645
|
-
message
|
646
|
-
|
647
|
-
|
648
|
-
|
935
|
+
message DictContentsRequest {
|
936
|
+
string dict_id = 1;
|
937
|
+
// Setting these to True will populate the corresponding field in the response, otherwise it will be null
|
938
|
+
// This lets us support the keys/values/items SDK API through one RPC without unnecessary data transfer
|
939
|
+
bool keys = 2;
|
940
|
+
bool values = 3;
|
649
941
|
}
|
650
942
|
|
651
|
-
message
|
943
|
+
message DictDeleteRequest {
|
652
944
|
string dict_id = 1;
|
653
945
|
}
|
654
946
|
|
947
|
+
message DictEntry {
|
948
|
+
bytes key = 1;
|
949
|
+
bytes value = 2;
|
950
|
+
}
|
951
|
+
|
655
952
|
message DictGetOrCreateRequest {
|
656
|
-
string deployment_name = 1;
|
953
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
657
954
|
DeploymentNamespace namespace = 2;
|
658
955
|
string environment_name = 3;
|
659
956
|
ObjectCreationType object_creation_type = 4;
|
@@ -664,11 +961,6 @@ message DictGetOrCreateResponse {
|
|
664
961
|
string dict_id = 1;
|
665
962
|
}
|
666
963
|
|
667
|
-
message DictEntry {
|
668
|
-
bytes key = 1;
|
669
|
-
bytes value = 2;
|
670
|
-
}
|
671
|
-
|
672
964
|
message DictGetRequest {
|
673
965
|
string dict_id = 1;
|
674
966
|
bytes key = 2;
|
@@ -691,6 +983,19 @@ message DictLenResponse {
|
|
691
983
|
int32 len = 1;
|
692
984
|
}
|
693
985
|
|
986
|
+
message DictListRequest {
|
987
|
+
string environment_name = 1;
|
988
|
+
}
|
989
|
+
|
990
|
+
message DictListResponse {
|
991
|
+
message DictInfo {
|
992
|
+
string name = 1;
|
993
|
+
double created_at = 2;
|
994
|
+
}
|
995
|
+
|
996
|
+
repeated DictInfo dicts = 1;
|
997
|
+
}
|
998
|
+
|
694
999
|
message DictPopRequest {
|
695
1000
|
string dict_id = 1;
|
696
1001
|
bytes key = 2;
|
@@ -702,17 +1007,27 @@ message DictPopResponse {
|
|
702
1007
|
}
|
703
1008
|
|
704
1009
|
message DictUpdateRequest {
|
705
|
-
string dict_id = 1;
|
1010
|
+
string dict_id = 1 [ (modal.options.audit_target_attr) = true ];
|
706
1011
|
repeated DictEntry updates = 2;
|
707
1012
|
}
|
708
1013
|
|
709
1014
|
message DictUpdateResponse {
|
710
1015
|
}
|
711
1016
|
|
712
|
-
message
|
713
|
-
|
714
|
-
string
|
715
|
-
|
1017
|
+
message Domain {
|
1018
|
+
string domain_id = 1;
|
1019
|
+
string domain_name = 2;
|
1020
|
+
double created_at = 3;
|
1021
|
+
CertificateStatus certificate_status = 4;
|
1022
|
+
repeated DNSRecord dns_records = 5;
|
1023
|
+
};
|
1024
|
+
|
1025
|
+
message DomainCertificateVerifyRequest {
|
1026
|
+
string domain_id = 1;
|
1027
|
+
}
|
1028
|
+
|
1029
|
+
message DomainCertificateVerifyResponse {
|
1030
|
+
Domain domain = 1;
|
716
1031
|
}
|
717
1032
|
|
718
1033
|
message DomainCreateRequest {
|
@@ -727,57 +1042,76 @@ message DomainCreateResponse {
|
|
727
1042
|
message DomainListRequest {
|
728
1043
|
}
|
729
1044
|
|
730
|
-
message Domain {
|
731
|
-
string domain_id = 1;
|
732
|
-
string domain_name = 2;
|
733
|
-
double created_at = 3;
|
734
|
-
CertificateStatus certificate_status = 4;
|
735
|
-
repeated DNSRecord dns_records = 5;
|
736
|
-
};
|
737
|
-
|
738
1045
|
message DomainListResponse {
|
739
1046
|
repeated Domain domains = 1;
|
740
1047
|
}
|
741
1048
|
|
742
|
-
message
|
743
|
-
string
|
1049
|
+
message EnvironmentCreateRequest {
|
1050
|
+
string name = 1 [ (modal.options.audit_target_attr) = true ];
|
744
1051
|
}
|
745
1052
|
|
746
|
-
message
|
747
|
-
|
1053
|
+
message EnvironmentDeleteRequest {
|
1054
|
+
string name = 1 [ (modal.options.audit_target_attr) = true ];
|
748
1055
|
}
|
749
|
-
|
750
|
-
|
751
|
-
|
1056
|
+
message EnvironmentGetOrCreateRequest {
|
1057
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
1058
|
+
ObjectCreationType object_creation_type = 2;
|
752
1059
|
}
|
753
1060
|
|
754
|
-
message
|
755
|
-
string
|
1061
|
+
message EnvironmentGetOrCreateResponse {
|
1062
|
+
string environment_id = 1;
|
1063
|
+
EnvironmentMetadata metadata = 2;
|
756
1064
|
}
|
757
1065
|
|
758
1066
|
message EnvironmentListItem {
|
759
1067
|
string name = 1;
|
760
1068
|
string webhook_suffix = 2;
|
1069
|
+
double created_at = 3;
|
1070
|
+
bool default = 4;
|
761
1071
|
}
|
762
1072
|
|
763
1073
|
message EnvironmentListResponse {
|
764
1074
|
repeated EnvironmentListItem items = 2;
|
765
1075
|
}
|
766
1076
|
|
1077
|
+
message EnvironmentMetadata{
|
1078
|
+
string name = 1;
|
1079
|
+
EnvironmentSettings settings = 2;
|
1080
|
+
}
|
1081
|
+
|
1082
|
+
// Environment-scoped settings, with workspace-level defaults.
|
1083
|
+
// Note that we use MergeFrom to combine workspace / environment settings,
|
1084
|
+
// which will *append* any `repeated` fields!
|
1085
|
+
message EnvironmentSettings {
|
1086
|
+
string image_builder_version = 1;
|
1087
|
+
string webhook_suffix = 2;
|
1088
|
+
}
|
1089
|
+
|
767
1090
|
message EnvironmentUpdateRequest {
|
768
|
-
string current_name = 1;
|
1091
|
+
string current_name = 1 [ (modal.options.audit_target_attr) = true ];
|
769
1092
|
google.protobuf.StringValue name = 2;
|
770
1093
|
google.protobuf.StringValue web_suffix = 3;
|
771
1094
|
}
|
772
1095
|
|
773
|
-
|
774
|
-
|
775
|
-
|
1096
|
+
// A file entry when listing files in a volume or network file system.
|
1097
|
+
message FileEntry {
|
1098
|
+
enum FileType {
|
1099
|
+
UNSPECIFIED = 0;
|
1100
|
+
FILE = 1;
|
1101
|
+
DIRECTORY = 2;
|
1102
|
+
SYMLINK = 3;
|
1103
|
+
}
|
1104
|
+
string path = 1;
|
1105
|
+
FileType type = 2;
|
1106
|
+
uint64 mtime = 3;
|
1107
|
+
uint64 size = 4;
|
776
1108
|
}
|
777
1109
|
|
778
|
-
message
|
779
|
-
|
780
|
-
|
1110
|
+
message FilesystemRuntimeOutputBatch {
|
1111
|
+
repeated bytes output = 1;
|
1112
|
+
optional SystemErrorMessage error = 2;
|
1113
|
+
uint64 batch_index = 3;
|
1114
|
+
bool eof = 4;
|
781
1115
|
}
|
782
1116
|
|
783
1117
|
message Function {
|
@@ -815,7 +1149,7 @@ message Function {
|
|
815
1149
|
|
816
1150
|
uint32 concurrency_limit = 19;
|
817
1151
|
|
818
|
-
|
1152
|
+
reserved 20; // old fields
|
819
1153
|
|
820
1154
|
uint32 timeout_secs = 21;
|
821
1155
|
|
@@ -834,11 +1168,11 @@ message Function {
|
|
834
1168
|
// If set, overrides the runtime used by the function, either "runc" or "gvisor".
|
835
1169
|
string runtime = 30;
|
836
1170
|
|
837
|
-
string
|
1171
|
+
string app_name = 31; // Formerly stub_name
|
838
1172
|
|
839
1173
|
repeated VolumeMount volume_mounts = 33;
|
840
1174
|
|
841
|
-
uint32
|
1175
|
+
uint32 target_concurrent_inputs = 34;
|
842
1176
|
|
843
1177
|
repeated CustomDomainInfo custom_domain_info = 35;
|
844
1178
|
|
@@ -866,69 +1200,69 @@ message Function {
|
|
866
1200
|
repeated S3Mount s3_mounts = 47;
|
867
1201
|
repeated CloudBucketMount cloud_bucket_mounts = 51;
|
868
1202
|
|
869
|
-
|
1203
|
+
reserved 48; // _experimental_boost
|
870
1204
|
|
871
1205
|
// If set, tasks will be scheduled using the new scheduler, which also knows
|
872
1206
|
// to look at fine-grained placement constraints.
|
873
|
-
|
874
|
-
optional SchedulerPlacement
|
875
|
-
|
1207
|
+
reserved 49; // _experimental_scheduler
|
1208
|
+
optional SchedulerPlacement scheduler_placement = 50;
|
1209
|
+
reserved 52; // _experimental_scheduler_placement
|
876
1210
|
|
877
|
-
|
878
|
-
// TODO(irfansharif):
|
879
|
-
// - Fold in cloud, resource needs here too.
|
880
|
-
// - Allow specifying list of regions, zones, cloud, fallback and alternative
|
881
|
-
// GPU types.
|
882
|
-
optional string _region = 1;
|
883
|
-
optional string _zone = 2;
|
884
|
-
optional string _lifecycle = 3; // "on-demand" or "spot", else ignored
|
885
|
-
}
|
1211
|
+
bool is_class = 53; // if "Function" is actually a class grouping multiple methods
|
886
1212
|
|
887
|
-
|
888
|
-
|
889
|
-
// behaviour when using a FunctionHandler. Notably excludes things purely
|
890
|
-
// used for *executing* the function in a container entrypoint
|
1213
|
+
string use_function_id = 54; // for class methods use this function id instead for invocations - the *referenced* function should have is_class=True
|
1214
|
+
string use_method_name = 55; // for class methods - this method name needs to be included in the FunctionInput
|
891
1215
|
|
892
|
-
|
893
|
-
string function_name = 2;
|
894
|
-
Function.FunctionType function_type = 8;
|
895
|
-
string web_url = 28;
|
896
|
-
bool is_method = 39;
|
897
|
-
}
|
1216
|
+
ClassParameterInfo class_parameter_info = 56;
|
898
1217
|
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
1218
|
+
reserved 57; // _experimental_resources
|
1219
|
+
reserved 58;
|
1220
|
+
reserved 59;
|
1221
|
+
uint32 batch_max_size = 60; // Maximum number of inputs to fetch at once
|
1222
|
+
uint64 batch_linger_ms = 61; // Miliseconds to block before a response is needed
|
1223
|
+
bool i6pn_enabled = 62;
|
1224
|
+
bool _experimental_concurrent_cancellations = 63;
|
1225
|
+
uint32 max_concurrent_inputs = 64;
|
905
1226
|
|
906
|
-
|
907
|
-
|
908
|
-
repeated
|
909
|
-
optional Resources resources = 3;
|
910
|
-
optional FunctionRetryPolicy retry_policy = 4;
|
911
|
-
optional uint32 concurrency_limit = 5;
|
912
|
-
optional uint32 timeout_secs = 6;
|
913
|
-
optional uint32 task_idle_timeout_secs = 7;
|
914
|
-
optional uint32 warm_pool_size = 8;
|
915
|
-
repeated VolumeMount volume_mounts = 9;
|
916
|
-
optional uint32 allow_concurrent_inputs = 10;
|
917
|
-
bool replace_volume_mounts = 11;
|
918
|
-
bool replace_secret_ids = 12;
|
919
|
-
}
|
1227
|
+
// TODO(irfansharif): Remove, once https://github.com/modal-labs/modal/pull/15645 lands.
|
1228
|
+
bool _experimental_task_templates_enabled = 65; // forces going through the new gpu-fallbacks integration path, even if no fallback options are specified
|
1229
|
+
repeated TaskTemplate _experimental_task_templates = 66; // for fallback options, where the first/most-preferred "template" is derived from fields above
|
920
1230
|
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
1231
|
+
// When the function is a "grouped" one, this records the # of tasks we want
|
1232
|
+
// to schedule in tandem.
|
1233
|
+
uint32 _experimental_group_size = 67;
|
1234
|
+
|
1235
|
+
// If set, the function will be run in an untrusted environment.
|
1236
|
+
bool untrusted = 68;
|
1237
|
+
|
1238
|
+
uint32 _experimental_buffer_containers = 69;
|
1239
|
+
|
1240
|
+
// _experimental_proxy_ip -> ProxyInfo
|
1241
|
+
// TODO: deprecate.
|
1242
|
+
optional string _experimental_proxy_ip = 70;
|
1243
|
+
|
1244
|
+
bool runtime_perf_record = 71; // For internal debugging use only.
|
1245
|
+
|
1246
|
+
Schedule schedule = 72;
|
1247
|
+
|
1248
|
+
bool snapshot_debug = 73; // For internal debugging use only.
|
1249
|
+
|
1250
|
+
// Mapping of method names to method definitions, only non-empty for class service functions
|
1251
|
+
map<string, MethodDefinition> method_definitions = 74;
|
1252
|
+
bool method_definitions_set = 75;
|
1253
|
+
|
1254
|
+
bool _experimental_custom_scaling = 76;
|
927
1255
|
}
|
928
1256
|
|
929
|
-
message
|
1257
|
+
message FunctionAsyncInvokeRequest {
|
930
1258
|
string function_id = 1;
|
931
|
-
|
1259
|
+
string parent_input_id = 2;
|
1260
|
+
FunctionInput input = 3;
|
1261
|
+
}
|
1262
|
+
|
1263
|
+
message FunctionAsyncInvokeResponse {
|
1264
|
+
bool retry_with_blob_upload = 1;
|
1265
|
+
string function_call_id = 2;
|
932
1266
|
}
|
933
1267
|
|
934
1268
|
message FunctionBindParamsRequest {
|
@@ -943,33 +1277,167 @@ message FunctionBindParamsResponse {
|
|
943
1277
|
FunctionHandleMetadata handle_metadata = 2;
|
944
1278
|
}
|
945
1279
|
|
1280
|
+
message FunctionCallCallGraphInfo {
|
1281
|
+
string function_call_id = 1;
|
1282
|
+
string parent_input_id = 2;
|
1283
|
+
string function_name = 3;
|
1284
|
+
string module_name = 4;
|
1285
|
+
}
|
1286
|
+
|
1287
|
+
message FunctionCallCancelRequest {
|
1288
|
+
string function_call_id = 1;
|
1289
|
+
bool terminate_containers = 2;
|
1290
|
+
}
|
1291
|
+
|
1292
|
+
message FunctionCallGetDataRequest {
|
1293
|
+
string function_call_id = 1;
|
1294
|
+
uint64 last_index = 2;
|
1295
|
+
}
|
1296
|
+
|
1297
|
+
message FunctionCallInfo {
|
1298
|
+
string function_call_id = 1;
|
1299
|
+
int32 idx = 2;
|
1300
|
+
reserved 3, 4, 5; // old fields
|
1301
|
+
double created_at = 6; // when the call was created
|
1302
|
+
double scheduled_at = 7; // if cron job, when run was scheduled
|
1303
|
+
reserved 8, 9, 10, 11; // old fields
|
1304
|
+
InputCategoryInfo pending_inputs = 12;
|
1305
|
+
InputCategoryInfo failed_inputs = 13;
|
1306
|
+
InputCategoryInfo succeeded_inputs = 14;
|
1307
|
+
InputCategoryInfo timeout_inputs = 15;
|
1308
|
+
InputCategoryInfo cancelled_inputs = 16;
|
1309
|
+
int32 total_inputs = 17;
|
1310
|
+
}
|
1311
|
+
|
1312
|
+
message FunctionCallListRequest {
|
1313
|
+
string function_id = 1;
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
message FunctionCallListResponse {
|
1317
|
+
repeated FunctionCallInfo function_calls = 1;
|
1318
|
+
}
|
1319
|
+
|
1320
|
+
message FunctionCallPutDataRequest {
|
1321
|
+
string function_call_id = 1;
|
1322
|
+
repeated DataChunk data_chunks = 2;
|
1323
|
+
}
|
1324
|
+
|
1325
|
+
message FunctionCreateRequest {
|
1326
|
+
Function function = 1;
|
1327
|
+
string app_id = 2 [ (modal.options.audit_target_attr) = true ];
|
1328
|
+
Schedule schedule = 6 [deprecated=true]; // Deprecated: now passed in the Function definition
|
1329
|
+
string existing_function_id = 7;
|
1330
|
+
// This flag tells the server to avoid doing updates in FunctionCreate that should now
|
1331
|
+
// be done in AppPublish. Provides a smoother migration onto atomic deployments with 0.64,
|
1332
|
+
// and can be deprecated once we no longer support ealier versions.
|
1333
|
+
bool defer_updates = 8;
|
1334
|
+
FunctionData function_data = 9; // supersedes 'function' field above
|
1335
|
+
}
|
1336
|
+
|
946
1337
|
message FunctionCreateResponse {
|
947
1338
|
string function_id = 1;
|
948
|
-
string
|
949
|
-
WebUrlInfo web_url_info = 3; // Deprecated - needed until 0.51 is the minimum version
|
1339
|
+
string __deprecated_web_url = 2 [ deprecated = true]; // Used up until 0.62.212
|
950
1340
|
Function function = 4;
|
951
1341
|
FunctionHandleMetadata handle_metadata = 5;
|
952
1342
|
}
|
953
1343
|
|
954
|
-
message
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
1344
|
+
message FunctionData {
|
1345
|
+
// Note: FunctionData pulls "up" a subset of fields from Function message that
|
1346
|
+
// will get deprecated there and made authoritative here, at the top-level.
|
1347
|
+
// All remaining fields will stay within the Function message itself and a
|
1348
|
+
// single FunctionData will contain a list of such (ranked) Functions. The
|
1349
|
+
// top-level fields capture data not specific to any particular underlying
|
1350
|
+
// task (like warm-pool-size, applicable across all tasks), while fields
|
1351
|
+
// specific to the task (like the resource request) will exist at the bottom
|
1352
|
+
// level.
|
1353
|
+
|
1354
|
+
string module_name = 1;
|
1355
|
+
string function_name = 2;
|
1356
|
+
|
1357
|
+
Function.FunctionType function_type = 3;
|
1358
|
+
|
1359
|
+
// Scheduling related fields.
|
1360
|
+
uint32 warm_pool_size = 4;
|
1361
|
+
uint32 concurrency_limit = 5;
|
1362
|
+
uint32 task_idle_timeout_secs = 6;
|
1363
|
+
// When the function is a "grouped" one, this records the # of tasks we want
|
1364
|
+
// to schedule in tandem.
|
1365
|
+
uint32 _experimental_group_size = 19;
|
1366
|
+
uint32 _experimental_buffer_containers = 22;
|
1367
|
+
bool _experimental_custom_scaling = 23;
|
1368
|
+
string worker_id = 7; // for internal debugging use only
|
1369
|
+
|
1370
|
+
uint32 timeout_secs = 8;
|
1371
|
+
|
1372
|
+
string web_url = 9;
|
1373
|
+
WebUrlInfo web_url_info = 10;
|
1374
|
+
WebhookConfig webhook_config = 11;
|
1375
|
+
repeated CustomDomainInfo custom_domain_info = 12;
|
1376
|
+
// _experimental_proxy_ip -> ProxyInfo
|
1377
|
+
// TODO: deprecate.
|
1378
|
+
optional string _experimental_proxy_ip = 24;
|
1379
|
+
// Mapping of method names to method definitions, only non-empty for class service functions
|
1380
|
+
map<string, MethodDefinition> method_definitions = 25;
|
1381
|
+
bool method_definitions_set = 26;
|
1382
|
+
|
1383
|
+
bool is_class = 13; // if "Function" is actually a class grouping multiple methods - applies across all underlying tasks
|
1384
|
+
ClassParameterInfo class_parameter_info = 14;
|
1385
|
+
|
1386
|
+
bool is_method = 15;
|
1387
|
+
string use_function_id = 16; // used for methods
|
1388
|
+
string use_method_name = 17; // used for methods
|
1389
|
+
|
1390
|
+
message RankedFunction {
|
1391
|
+
uint32 rank = 1;
|
1392
|
+
Function function = 2;
|
1393
|
+
}
|
1394
|
+
repeated RankedFunction ranked_functions = 18;
|
1395
|
+
|
1396
|
+
Schedule schedule = 20;
|
1397
|
+
|
1398
|
+
reserved 21;
|
1399
|
+
|
1400
|
+
bool untrusted = 27; // If set, the function will be run in an untrusted environment.
|
1401
|
+
bool snapshot_debug = 28; // For internal debugging use only.
|
1402
|
+
bool runtime_perf_record = 29; // For internal debugging use only.
|
959
1403
|
}
|
960
1404
|
|
961
|
-
message
|
1405
|
+
message FunctionExtended {
|
1406
|
+
uint32 type_identifier = 1;
|
1407
|
+
// FunctionExtended is a union type that exists while we migrate between
|
1408
|
+
// storage of FunctionData vs. Functions, internally. Once migrated at the
|
1409
|
+
// storage level, we can get rid of this union type and replace with access
|
1410
|
+
// that expects FunctionData only.
|
1411
|
+
oneof function_extended {
|
1412
|
+
Function function_singleton = 2;
|
1413
|
+
FunctionData function_data = 3;
|
1414
|
+
}
|
1415
|
+
}
|
1416
|
+
|
1417
|
+
|
1418
|
+
message FunctionGetCallGraphRequest {
|
1419
|
+
// TODO: use input_id once we switch client submit API to return those.
|
1420
|
+
string function_call_id = 2;
|
1421
|
+
}
|
1422
|
+
|
1423
|
+
message FunctionGetCallGraphResponse {
|
1424
|
+
repeated InputCallGraphInfo inputs = 1;
|
1425
|
+
repeated FunctionCallCallGraphInfo function_calls = 2;
|
1426
|
+
}
|
1427
|
+
|
1428
|
+
message FunctionGetCurrentStatsRequest {
|
962
1429
|
string function_id = 1;
|
963
|
-
FunctionHandleMetadata handle_metadata = 2;
|
964
1430
|
}
|
965
1431
|
|
966
|
-
|
967
|
-
message FunctionUpdateSchedulingParamsRequest {
|
1432
|
+
message FunctionGetDynamicConcurrencyRequest{
|
968
1433
|
string function_id = 1;
|
969
|
-
uint32
|
1434
|
+
uint32 target_concurrency = 2;
|
1435
|
+
uint32 max_concurrency = 3;
|
970
1436
|
}
|
971
1437
|
|
972
|
-
message
|
1438
|
+
message FunctionGetDynamicConcurrencyResponse {
|
1439
|
+
uint32 concurrency = 1;
|
1440
|
+
}
|
973
1441
|
|
974
1442
|
message FunctionGetInputsItem {
|
975
1443
|
string input_id = 1;
|
@@ -977,6 +1445,7 @@ message FunctionGetInputsItem {
|
|
977
1445
|
bool kill_switch = 3;
|
978
1446
|
reserved 4; // previously used
|
979
1447
|
string function_call_id = 5;
|
1448
|
+
FunctionCallInvocationType function_call_invocation_type = 6;
|
980
1449
|
}
|
981
1450
|
|
982
1451
|
message FunctionGetInputsRequest {
|
@@ -984,6 +1453,10 @@ message FunctionGetInputsRequest {
|
|
984
1453
|
int32 max_values = 3;
|
985
1454
|
float average_call_time = 5;
|
986
1455
|
int32 input_concurrency = 6; // Container aims to fetch multiple inputs at the same time
|
1456
|
+
reserved 9;
|
1457
|
+
reserved 10;
|
1458
|
+
uint32 batch_max_size = 11; // Maximum number of inputs to fetch at once
|
1459
|
+
uint64 batch_linger_ms = 12; // Miliseconds to block before a response is needed
|
987
1460
|
}
|
988
1461
|
|
989
1462
|
message FunctionGetInputsResponse {
|
@@ -995,8 +1468,10 @@ message FunctionGetOutputsItem {
|
|
995
1468
|
GenericResult result = 1;
|
996
1469
|
int32 idx = 2;
|
997
1470
|
string input_id = 3;
|
998
|
-
int32 gen_index = 4; // Deprecated, only used in client version <0.57
|
999
1471
|
DataFormat data_format = 5; // for result.data_oneof
|
1472
|
+
string task_id = 6;
|
1473
|
+
double input_started_at = 7;
|
1474
|
+
double output_created_at = 8;
|
1000
1475
|
}
|
1001
1476
|
|
1002
1477
|
message FunctionGetOutputsRequest {
|
@@ -1005,12 +1480,29 @@ message FunctionGetOutputsRequest {
|
|
1005
1480
|
float timeout = 3;
|
1006
1481
|
string last_entry_id = 6;
|
1007
1482
|
bool clear_on_success = 7; // expires *any* remaining outputs soon after this call, not just the returned ones
|
1483
|
+
double requested_at = 8; // Used for waypoints.
|
1484
|
+
// The jwts the client expects the server to be processing. This is optional and used for sync inputs only.
|
1485
|
+
repeated string input_jwts = 9;
|
1008
1486
|
}
|
1009
1487
|
|
1010
1488
|
message FunctionGetOutputsResponse {
|
1011
1489
|
repeated int32 idxs = 3;
|
1012
1490
|
repeated FunctionGetOutputsItem outputs = 4;
|
1013
1491
|
string last_entry_id = 5;
|
1492
|
+
int32 num_unfinished_inputs = 6;
|
1493
|
+
}
|
1494
|
+
|
1495
|
+
message FunctionGetRequest {
|
1496
|
+
string app_name = 1;
|
1497
|
+
string object_tag = 2;
|
1498
|
+
DeploymentNamespace namespace = 3;
|
1499
|
+
string environment_name = 4;
|
1500
|
+
}
|
1501
|
+
|
1502
|
+
message FunctionGetResponse {
|
1503
|
+
string function_id = 1;
|
1504
|
+
FunctionHandleMetadata handle_metadata = 2;
|
1505
|
+
repeated Warning server_warnings = 4;
|
1014
1506
|
}
|
1015
1507
|
|
1016
1508
|
message FunctionGetSerializedRequest {
|
@@ -1022,6 +1514,24 @@ message FunctionGetSerializedResponse {
|
|
1022
1514
|
bytes class_serialized = 2;
|
1023
1515
|
}
|
1024
1516
|
|
1517
|
+
message FunctionHandleMetadata {
|
1518
|
+
// contains all the info about a function that is needed to trigger the right
|
1519
|
+
// behaviour when using a FunctionHandler. Notably excludes things purely
|
1520
|
+
// used for *executing* the function in a container entrypoint
|
1521
|
+
|
1522
|
+
// Should be a subset and use IDs/types from `Function` above
|
1523
|
+
string function_name = 2;
|
1524
|
+
Function.FunctionType function_type = 8;
|
1525
|
+
string web_url = 28;
|
1526
|
+
bool is_method = 39;
|
1527
|
+
string use_function_id = 40; // used for methods
|
1528
|
+
string use_method_name = 41; // used for methods
|
1529
|
+
string definition_id = 42;
|
1530
|
+
ClassParameterInfo class_parameter_info = 43;
|
1531
|
+
// Mapping of method names to their metadata, only non-empty for class service functions
|
1532
|
+
map<string, FunctionHandleMetadata> method_handle_metadata = 44;
|
1533
|
+
}
|
1534
|
+
|
1025
1535
|
message FunctionInput {
|
1026
1536
|
// serialized (args, kwargs).
|
1027
1537
|
oneof args_oneof {
|
@@ -1030,6 +1540,7 @@ message FunctionInput {
|
|
1030
1540
|
}
|
1031
1541
|
bool final_input = 9;
|
1032
1542
|
DataFormat data_format = 10; // For args_oneof.
|
1543
|
+
optional string method_name = 11; // specifies which method to call when calling a class/object function
|
1033
1544
|
}
|
1034
1545
|
|
1035
1546
|
message FunctionMapRequest {
|
@@ -1038,11 +1549,46 @@ message FunctionMapRequest {
|
|
1038
1549
|
bool return_exceptions = 3;
|
1039
1550
|
FunctionCallType function_call_type = 4;
|
1040
1551
|
repeated FunctionPutInputsItem pipelined_inputs = 5;
|
1552
|
+
FunctionCallInvocationType function_call_invocation_type = 6;
|
1041
1553
|
}
|
1042
1554
|
|
1043
1555
|
message FunctionMapResponse {
|
1044
1556
|
string function_call_id = 1;
|
1045
1557
|
repeated FunctionPutInputsResponseItem pipelined_inputs = 2;
|
1558
|
+
FunctionRetryPolicy retry_policy = 3;
|
1559
|
+
string function_call_jwt = 4;
|
1560
|
+
}
|
1561
|
+
|
1562
|
+
message FunctionOptions {
|
1563
|
+
repeated string secret_ids = 1;
|
1564
|
+
repeated string mount_ids = 2; // Currently not supported
|
1565
|
+
optional Resources resources = 3;
|
1566
|
+
optional FunctionRetryPolicy retry_policy = 4;
|
1567
|
+
optional uint32 concurrency_limit = 5;
|
1568
|
+
optional uint32 timeout_secs = 6;
|
1569
|
+
optional uint32 task_idle_timeout_secs = 7;
|
1570
|
+
optional uint32 warm_pool_size = 8;
|
1571
|
+
repeated VolumeMount volume_mounts = 9;
|
1572
|
+
optional uint32 target_concurrent_inputs = 10;
|
1573
|
+
bool replace_volume_mounts = 11;
|
1574
|
+
bool replace_secret_ids = 12;
|
1575
|
+
}
|
1576
|
+
|
1577
|
+
message FunctionPrecreateRequest {
|
1578
|
+
string app_id = 1;
|
1579
|
+
string function_name = 2 [ (modal.options.audit_target_attr) = true ];
|
1580
|
+
string existing_function_id = 3;
|
1581
|
+
Function.FunctionType function_type = 4;
|
1582
|
+
WebhookConfig webhook_config = 5;
|
1583
|
+
string use_function_id = 6; // for class methods - use this function id instead for invocations - the *referenced* function should have is_class=True
|
1584
|
+
string use_method_name = 7; // for class methods - this method name needs to be included in the FunctionInput
|
1585
|
+
// Mapping of method names to method definitions, only non-empty for class service functions
|
1586
|
+
map<string, MethodDefinition> method_definitions = 8;
|
1587
|
+
}
|
1588
|
+
|
1589
|
+
message FunctionPrecreateResponse {
|
1590
|
+
string function_id = 1;
|
1591
|
+
FunctionHandleMetadata handle_metadata = 2;
|
1046
1592
|
}
|
1047
1593
|
|
1048
1594
|
message FunctionPutInputsItem {
|
@@ -1056,92 +1602,50 @@ message FunctionPutInputsRequest {
|
|
1056
1602
|
repeated FunctionPutInputsItem inputs = 4;
|
1057
1603
|
}
|
1058
1604
|
|
1059
|
-
message FunctionPutInputsResponseItem {
|
1060
|
-
int32 idx = 1;
|
1061
|
-
string input_id = 2;
|
1062
|
-
}
|
1063
|
-
|
1064
1605
|
message FunctionPutInputsResponse {
|
1065
1606
|
repeated FunctionPutInputsResponseItem inputs = 1;
|
1066
1607
|
}
|
1067
1608
|
|
1068
|
-
message
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
double output_created_at = 4;
|
1073
|
-
int32 gen_index = 6; // Deprecated, only used in client version <0.57
|
1074
|
-
DataFormat data_format = 7; // for result.data_oneof
|
1075
|
-
}
|
1076
|
-
|
1077
|
-
message FunctionPutOutputsRequest {
|
1078
|
-
repeated FunctionPutOutputsItem outputs = 4;
|
1079
|
-
}
|
1080
|
-
|
1081
|
-
message FunctionRetryPolicy {
|
1082
|
-
float backoff_coefficient = 1;
|
1083
|
-
uint32 initial_delay_ms = 2;
|
1084
|
-
uint32 max_delay_ms = 3;
|
1085
|
-
// NOTE: two-byte field number not used for special reason. copy-paste error. Ref: PR #2542
|
1086
|
-
uint32 retries = 18;
|
1087
|
-
}
|
1088
|
-
|
1089
|
-
message FunctionGetCallGraphRequest {
|
1090
|
-
// TODO: use input_id once we switch client submit API to return those.
|
1091
|
-
string function_call_id = 2;
|
1092
|
-
}
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
message InputCallGraphInfo {
|
1097
|
-
string input_id = 1;
|
1098
|
-
GenericResult.GenericStatus status = 2;
|
1099
|
-
string function_call_id = 3;
|
1100
|
-
string task_id = 4;
|
1101
|
-
}
|
1102
|
-
|
1103
|
-
message FunctionCallCallGraphInfo {
|
1104
|
-
string function_call_id = 1;
|
1105
|
-
string parent_input_id = 2;
|
1106
|
-
string function_name = 3;
|
1107
|
-
string module_name = 4;
|
1108
|
-
}
|
1109
|
-
|
1110
|
-
message FunctionGetCallGraphResponse {
|
1111
|
-
repeated InputCallGraphInfo inputs = 1;
|
1112
|
-
repeated FunctionCallCallGraphInfo function_calls = 2;
|
1113
|
-
}
|
1114
|
-
|
1115
|
-
message FunctionCallCancelRequest {
|
1116
|
-
string function_call_id = 1;
|
1117
|
-
}
|
1118
|
-
|
1119
|
-
message FunctionCallListRequest {
|
1120
|
-
string function_id = 1;
|
1609
|
+
message FunctionPutInputsResponseItem {
|
1610
|
+
int32 idx = 1;
|
1611
|
+
string input_id = 2;
|
1612
|
+
string input_jwt = 3;
|
1121
1613
|
}
|
1122
1614
|
|
1123
|
-
message
|
1124
|
-
string
|
1125
|
-
|
1126
|
-
|
1127
|
-
double
|
1128
|
-
|
1129
|
-
reserved 8, 9, 10, 11; // old fields
|
1130
|
-
InputCategoryInfo pending_inputs = 12;
|
1131
|
-
InputCategoryInfo failed_inputs = 13;
|
1132
|
-
InputCategoryInfo succeeded_inputs = 14;
|
1133
|
-
InputCategoryInfo timeout_inputs = 15;
|
1134
|
-
InputCategoryInfo cancelled_inputs = 16;
|
1135
|
-
int32 total_inputs = 17;
|
1615
|
+
message FunctionPutOutputsItem {
|
1616
|
+
string input_id = 1;
|
1617
|
+
GenericResult result = 2;
|
1618
|
+
double input_started_at = 3;
|
1619
|
+
double output_created_at = 4;
|
1620
|
+
DataFormat data_format = 7; // for result.data_oneof
|
1136
1621
|
}
|
1137
1622
|
|
1138
|
-
message
|
1139
|
-
repeated
|
1623
|
+
message FunctionPutOutputsRequest {
|
1624
|
+
repeated FunctionPutOutputsItem outputs = 4;
|
1625
|
+
double requested_at = 5; // Used for waypoints.
|
1140
1626
|
}
|
1141
1627
|
|
1628
|
+
message FunctionRetryInputsItem {
|
1629
|
+
string input_jwt = 1;
|
1630
|
+
FunctionInput input = 2;
|
1631
|
+
}
|
1142
1632
|
|
1143
|
-
message
|
1144
|
-
string
|
1633
|
+
message FunctionRetryInputsRequest {
|
1634
|
+
string function_call_jwt = 1;
|
1635
|
+
repeated FunctionRetryInputsItem inputs = 2;
|
1636
|
+
}
|
1637
|
+
|
1638
|
+
message FunctionRetryInputsResponse {
|
1639
|
+
// TODO(ryan): Eventually this will return entry ids, which client
|
1640
|
+
// will send back to server to check for lost inputs.
|
1641
|
+
}
|
1642
|
+
|
1643
|
+
message FunctionRetryPolicy {
|
1644
|
+
float backoff_coefficient = 1;
|
1645
|
+
uint32 initial_delay_ms = 2;
|
1646
|
+
uint32 max_delay_ms = 3;
|
1647
|
+
// NOTE: two-byte field number not used for special reason. copy-paste error. Ref: PR #2542
|
1648
|
+
uint32 retries = 18;
|
1145
1649
|
}
|
1146
1650
|
|
1147
1651
|
message FunctionStats {
|
@@ -1150,6 +1654,19 @@ message FunctionStats {
|
|
1150
1654
|
uint32 num_total_tasks = 3;
|
1151
1655
|
}
|
1152
1656
|
|
1657
|
+
message FunctionUpdateSchedulingParamsRequest {
|
1658
|
+
string function_id = 1;
|
1659
|
+
uint32 warm_pool_size_override = 2;
|
1660
|
+
}
|
1661
|
+
|
1662
|
+
message FunctionUpdateSchedulingParamsResponse {}
|
1663
|
+
|
1664
|
+
message GPUConfig {
|
1665
|
+
GPUType type = 1;
|
1666
|
+
uint32 count = 2;
|
1667
|
+
uint32 memory = 3;
|
1668
|
+
}
|
1669
|
+
|
1153
1670
|
message GeneratorDone { // Sent as the output when a generator finishes running.
|
1154
1671
|
uint64 items_total = 1;
|
1155
1672
|
}
|
@@ -1165,6 +1682,7 @@ message GenericResult { // Used for both tasks and function outputs
|
|
1165
1682
|
// Used when the user's function fails to initialize (ex. S3 mount failed due to invalid credentials).
|
1166
1683
|
// Terminates the function and all remaining inputs.
|
1167
1684
|
GENERIC_STATUS_INIT_FAILURE = 5;
|
1685
|
+
GENERIC_STATUS_INTERNAL_FAILURE = 6;
|
1168
1686
|
}
|
1169
1687
|
|
1170
1688
|
GenericStatus status = 1; // Status of the task or function output.
|
@@ -1180,28 +1698,9 @@ message GenericResult { // Used for both tasks and function outputs
|
|
1180
1698
|
string data_blob_id = 10; // Blob ID for large data.
|
1181
1699
|
}
|
1182
1700
|
|
1183
|
-
enum GeneratorStatus {
|
1184
|
-
GENERATOR_STATUS_UNSPECIFIED = 0;
|
1185
|
-
GENERATOR_STATUS_INCOMPLETE = 1;
|
1186
|
-
GENERATOR_STATUS_COMPLETE = 2;
|
1187
|
-
}
|
1188
|
-
GeneratorStatus gen_status = 7; // Deprecated, only used in client version <0.57
|
1189
|
-
|
1190
1701
|
string propagation_reason = 13; // (?)
|
1191
1702
|
}
|
1192
1703
|
|
1193
|
-
message GPUConfig {
|
1194
|
-
GPUType type = 1;
|
1195
|
-
uint32 count = 2;
|
1196
|
-
uint32 memory = 3;
|
1197
|
-
}
|
1198
|
-
|
1199
|
-
message BuildFunction {
|
1200
|
-
string definition = 1;
|
1201
|
-
bytes globals = 2;
|
1202
|
-
FunctionInput input = 3;
|
1203
|
-
}
|
1204
|
-
|
1205
1704
|
message Image {
|
1206
1705
|
repeated BaseImage base_images = 5;
|
1207
1706
|
repeated string dockerfile_commands = 6;
|
@@ -1233,6 +1732,15 @@ message ImageContextFile {
|
|
1233
1732
|
bytes data = 2;
|
1234
1733
|
}
|
1235
1734
|
|
1735
|
+
message ImageFromIdRequest {
|
1736
|
+
string image_id = 1;
|
1737
|
+
}
|
1738
|
+
|
1739
|
+
message ImageFromIdResponse {
|
1740
|
+
string image_id = 1;
|
1741
|
+
ImageMetadata metadata = 2;
|
1742
|
+
}
|
1743
|
+
|
1236
1744
|
message ImageGetOrCreateRequest {
|
1237
1745
|
Image image = 2;
|
1238
1746
|
string app_id = 4 [ (modal.options.audit_target_attr) = true ];
|
@@ -1241,16 +1749,24 @@ message ImageGetOrCreateRequest {
|
|
1241
1749
|
bool force_build = 7;
|
1242
1750
|
DeploymentNamespace namespace = 8;
|
1243
1751
|
string builder_version = 9;
|
1752
|
+
// Only admins can publish global images, but this provides an extra failsafe
|
1753
|
+
bool allow_global_deployment = 10;
|
1244
1754
|
}
|
1245
1755
|
|
1246
1756
|
message ImageGetOrCreateResponse {
|
1757
|
+
// image_id is set regardless if the image is built (use ImageJoinStreaming to wait for build)
|
1247
1758
|
string image_id = 1;
|
1759
|
+
// result of build - only set if the image has finished building (regardless if success or not)
|
1760
|
+
GenericResult result = 2;
|
1761
|
+
// image metadata - only set if the image has built successfully
|
1762
|
+
ImageMetadata metadata = 3;
|
1248
1763
|
}
|
1249
1764
|
|
1250
1765
|
message ImageJoinStreamingRequest {
|
1251
1766
|
string image_id = 1;
|
1252
1767
|
float timeout = 2;
|
1253
1768
|
string last_entry_id = 3;
|
1769
|
+
bool include_logs_for_finished = 4;
|
1254
1770
|
}
|
1255
1771
|
|
1256
1772
|
message ImageJoinStreamingResponse {
|
@@ -1258,6 +1774,18 @@ message ImageJoinStreamingResponse {
|
|
1258
1774
|
repeated TaskLogs task_logs = 2;
|
1259
1775
|
string entry_id = 3;
|
1260
1776
|
bool eof = 4;
|
1777
|
+
ImageMetadata metadata = 5; // set on success
|
1778
|
+
}
|
1779
|
+
|
1780
|
+
|
1781
|
+
message ImageMetadata {
|
1782
|
+
// The output of `python -VV. Not set if missing
|
1783
|
+
optional string python_version_info = 1;
|
1784
|
+
// Installed python packages, as listed by by `pip list`.
|
1785
|
+
// package name -> version. Empty if missing
|
1786
|
+
map<string, string> python_packages = 2;
|
1787
|
+
// The work directory of the image, defaulting to "/". Not set if missing
|
1788
|
+
optional string workdir = 3;
|
1261
1789
|
}
|
1262
1790
|
|
1263
1791
|
|
@@ -1266,6 +1794,18 @@ message ImageRegistryConfig {
|
|
1266
1794
|
string secret_id = 2;
|
1267
1795
|
}
|
1268
1796
|
|
1797
|
+
message InputCallGraphInfo {
|
1798
|
+
string input_id = 1;
|
1799
|
+
GenericResult.GenericStatus status = 2;
|
1800
|
+
string function_call_id = 3;
|
1801
|
+
string task_id = 4;
|
1802
|
+
}
|
1803
|
+
|
1804
|
+
message InputCategoryInfo {
|
1805
|
+
int32 total = 1;
|
1806
|
+
repeated InputInfo latest = 2;
|
1807
|
+
}
|
1808
|
+
|
1269
1809
|
message InputInfo {
|
1270
1810
|
string input_id = 1;
|
1271
1811
|
int32 idx = 2;
|
@@ -1276,20 +1816,20 @@ message InputInfo {
|
|
1276
1816
|
bool task_first_input = 7;
|
1277
1817
|
}
|
1278
1818
|
|
1279
|
-
message
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
string existing_mount_id = 3;
|
1287
|
-
repeated MountFile files = 4;
|
1819
|
+
message MethodDefinition {
|
1820
|
+
string function_name = 1;
|
1821
|
+
Function.FunctionType function_type = 2;
|
1822
|
+
WebhookConfig webhook_config = 3;
|
1823
|
+
string web_url = 4;
|
1824
|
+
WebUrlInfo web_url_info = 5;
|
1825
|
+
repeated CustomDomainInfo custom_domain_info = 6;
|
1288
1826
|
}
|
1289
1827
|
|
1290
|
-
message
|
1291
|
-
string
|
1292
|
-
|
1828
|
+
message MountFile {
|
1829
|
+
string filename = 1;
|
1830
|
+
string sha256_hex = 3; // SHA-256 checksum of the file.
|
1831
|
+
optional uint64 size = 4; // Size of the file in bytes — ignored in MountBuild().
|
1832
|
+
optional uint32 mode = 5; // Unix file permission bits `st_mode`.
|
1293
1833
|
}
|
1294
1834
|
|
1295
1835
|
message MountGetOrCreateRequest {
|
@@ -1310,13 +1850,6 @@ message MountHandleMetadata {
|
|
1310
1850
|
string content_checksum_sha256_hex = 1;
|
1311
1851
|
}
|
1312
1852
|
|
1313
|
-
message MountFile {
|
1314
|
-
string filename = 1;
|
1315
|
-
string sha256_hex = 3; // SHA-256 checksum of the file.
|
1316
|
-
optional uint64 size = 4; // Size of the file in bytes — ignored in MountBuild().
|
1317
|
-
optional uint32 mode = 5; // Unix file permission bits `st_mode`.
|
1318
|
-
}
|
1319
|
-
|
1320
1853
|
message MountPutFileRequest {
|
1321
1854
|
string sha256_hex = 2;
|
1322
1855
|
|
@@ -1336,6 +1869,17 @@ message MultiPartUpload {
|
|
1336
1869
|
string completion_url = 3;
|
1337
1870
|
}
|
1338
1871
|
|
1872
|
+
message NetworkAccess {
|
1873
|
+
enum NetworkAccessType {
|
1874
|
+
UNSPECIFIED = 0;
|
1875
|
+
OPEN = 1;
|
1876
|
+
BLOCKED = 2;
|
1877
|
+
ALLOWLIST = 3;
|
1878
|
+
}
|
1879
|
+
NetworkAccessType network_access_type = 1;
|
1880
|
+
repeated string allowed_cidrs = 2;
|
1881
|
+
}
|
1882
|
+
|
1339
1883
|
message Object {
|
1340
1884
|
string object_id = 1;
|
1341
1885
|
oneof handle_metadata_oneof {
|
@@ -1350,8 +1894,53 @@ message ObjectDependency {
|
|
1350
1894
|
string object_id = 1;
|
1351
1895
|
}
|
1352
1896
|
|
1897
|
+
message PTYInfo {
|
1898
|
+
bool enabled = 1; // Soon deprecated
|
1899
|
+
uint32 winsz_rows = 2;
|
1900
|
+
uint32 winsz_cols = 3;
|
1901
|
+
string env_term = 4;
|
1902
|
+
string env_colorterm = 5;
|
1903
|
+
string env_term_program = 6;
|
1904
|
+
enum PTYType {
|
1905
|
+
PTY_TYPE_UNSPECIFIED = 0; // Nothing
|
1906
|
+
PTY_TYPE_FUNCTION = 1; // Run function in PTY
|
1907
|
+
PTY_TYPE_SHELL = 2; // Replace function with shell
|
1908
|
+
}
|
1909
|
+
PTYType pty_type = 7;
|
1910
|
+
}
|
1911
|
+
|
1912
|
+
message PortSpec {
|
1913
|
+
uint32 port = 1;
|
1914
|
+
bool unencrypted = 2;
|
1915
|
+
}
|
1916
|
+
|
1917
|
+
message PortSpecs {
|
1918
|
+
repeated PortSpec ports = 1;
|
1919
|
+
}
|
1920
|
+
|
1921
|
+
message Proxy {
|
1922
|
+
string name = 1;
|
1923
|
+
double created_at = 2;
|
1924
|
+
string environment_name = 3;
|
1925
|
+
string proxy_id = 5;
|
1926
|
+
repeated ProxyIp proxy_ips = 4;
|
1927
|
+
}
|
1928
|
+
|
1929
|
+
message ProxyCreateRequest {
|
1930
|
+
string name = 1 [ (modal.options.audit_target_attr) = true ];
|
1931
|
+
string environment_name = 2;
|
1932
|
+
}
|
1933
|
+
|
1934
|
+
message ProxyCreateResponse {
|
1935
|
+
Proxy proxy = 1;
|
1936
|
+
}
|
1937
|
+
|
1938
|
+
message ProxyDeleteRequest {
|
1939
|
+
string proxy_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1940
|
+
}
|
1941
|
+
|
1353
1942
|
message ProxyGetOrCreateRequest {
|
1354
|
-
string deployment_name = 1;
|
1943
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
1355
1944
|
DeploymentNamespace namespace = 2;
|
1356
1945
|
string environment_name = 3;
|
1357
1946
|
ObjectCreationType object_creation_type = 4; // must be UNSPECIFIED
|
@@ -1361,35 +1950,42 @@ message ProxyGetOrCreateResponse {
|
|
1361
1950
|
string proxy_id = 1;
|
1362
1951
|
}
|
1363
1952
|
|
1953
|
+
message ProxyGetRequest {
|
1954
|
+
string name = 1 [ (modal.options.audit_target_attr) = true ];
|
1955
|
+
string environment_name = 2;
|
1956
|
+
}
|
1957
|
+
|
1958
|
+
message ProxyGetResponse {
|
1959
|
+
Proxy proxy = 1;
|
1960
|
+
}
|
1961
|
+
|
1364
1962
|
message ProxyInfo {
|
1365
1963
|
string elastic_ip = 1;
|
1366
1964
|
string proxy_key = 2;
|
1367
1965
|
string remote_addr = 3;
|
1368
1966
|
int32 remote_port = 4;
|
1967
|
+
ProxyType proxy_type = 5;
|
1369
1968
|
}
|
1370
1969
|
|
1371
|
-
message
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
string
|
1376
|
-
string env_colorterm = 5;
|
1377
|
-
string env_term_program = 6;
|
1378
|
-
enum PTYType {
|
1379
|
-
PTY_TYPE_UNSPECIFIED = 0; // Nothing
|
1380
|
-
PTY_TYPE_FUNCTION = 1; // Run function in PTY
|
1381
|
-
PTY_TYPE_SHELL = 2; // Replace function with shell
|
1382
|
-
}
|
1383
|
-
PTYType pty_type = 7;
|
1970
|
+
message ProxyIp {
|
1971
|
+
string proxy_ip = 1;
|
1972
|
+
ProxyIpStatus status = 2;
|
1973
|
+
double created_at = 3;
|
1974
|
+
string environment_name = 4;
|
1384
1975
|
}
|
1385
1976
|
|
1386
|
-
message
|
1387
|
-
|
1388
|
-
string existing_queue_id = 2;
|
1977
|
+
message ProxyListResponse {
|
1978
|
+
repeated Proxy proxies = 1;
|
1389
1979
|
}
|
1390
1980
|
|
1391
|
-
message
|
1981
|
+
message QueueClearRequest {
|
1392
1982
|
string queue_id = 1;
|
1983
|
+
bytes partition_key = 2;
|
1984
|
+
bool all_partitions = 3;
|
1985
|
+
}
|
1986
|
+
|
1987
|
+
message QueueDeleteRequest {
|
1988
|
+
string queue_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1393
1989
|
}
|
1394
1990
|
|
1395
1991
|
message QueueGetOrCreateRequest {
|
@@ -1418,30 +2014,93 @@ message QueueHeartbeatRequest {
|
|
1418
2014
|
string queue_id = 1;
|
1419
2015
|
}
|
1420
2016
|
|
1421
|
-
message
|
1422
|
-
|
1423
|
-
|
1424
|
-
bytes partition_key = 5;
|
2017
|
+
message QueueItem {
|
2018
|
+
bytes value = 1;
|
2019
|
+
string entry_id = 2;
|
1425
2020
|
}
|
1426
2021
|
|
1427
2022
|
message QueueLenRequest {
|
1428
2023
|
string queue_id = 1;
|
1429
2024
|
bytes partition_key = 2;
|
2025
|
+
bool total = 3;
|
1430
2026
|
}
|
1431
2027
|
|
1432
2028
|
message QueueLenResponse {
|
1433
2029
|
int32 len = 1;
|
1434
2030
|
}
|
1435
2031
|
|
2032
|
+
message QueueListRequest {
|
2033
|
+
string environment_name = 1;
|
2034
|
+
// Allow client to report a bounded total size to reduce the number of partitions that need to be checked
|
2035
|
+
int32 total_size_limit = 2;
|
2036
|
+
}
|
2037
|
+
|
2038
|
+
message QueueListResponse {
|
2039
|
+
message QueueInfo {
|
2040
|
+
string name = 1;
|
2041
|
+
double created_at = 2;
|
2042
|
+
int32 num_partitions = 3;
|
2043
|
+
int32 total_size = 4;
|
2044
|
+
}
|
2045
|
+
|
2046
|
+
repeated QueueInfo queues = 1;
|
2047
|
+
}
|
2048
|
+
|
2049
|
+
message QueueNextItemsRequest {
|
2050
|
+
string queue_id = 1;
|
2051
|
+
bytes partition_key = 2;
|
2052
|
+
string last_entry_id = 3;
|
2053
|
+
float item_poll_timeout = 4; // seconds
|
2054
|
+
}
|
2055
|
+
|
2056
|
+
message QueueNextItemsResponse {
|
2057
|
+
repeated QueueItem items = 1;
|
2058
|
+
}
|
2059
|
+
|
2060
|
+
message QueuePutRequest {
|
2061
|
+
string queue_id = 1;
|
2062
|
+
repeated bytes values = 4;
|
2063
|
+
bytes partition_key = 5;
|
2064
|
+
int32 partition_ttl_seconds = 6;
|
2065
|
+
}
|
2066
|
+
|
2067
|
+
|
1436
2068
|
message RateLimit {
|
1437
2069
|
int32 limit = 1;
|
1438
2070
|
RateLimitInterval interval = 2;
|
1439
2071
|
}
|
1440
2072
|
|
1441
2073
|
message Resources {
|
1442
|
-
uint32 memory_mb = 2;
|
1443
|
-
uint32 milli_cpu = 3;
|
2074
|
+
uint32 memory_mb = 2; // MiB
|
2075
|
+
uint32 milli_cpu = 3; // milli CPU cores
|
1444
2076
|
GPUConfig gpu_config = 4;
|
2077
|
+
uint32 memory_mb_max = 5; // MiB
|
2078
|
+
uint32 ephemeral_disk_mb = 6; // MiB
|
2079
|
+
uint32 milli_cpu_max = 7; // milli CPU cores
|
2080
|
+
}
|
2081
|
+
|
2082
|
+
message RuntimeInputMessage {
|
2083
|
+
bytes message = 1;
|
2084
|
+
uint64 message_index = 2;
|
2085
|
+
bool eof = 3;
|
2086
|
+
}
|
2087
|
+
|
2088
|
+
message RuntimeOutputBatch {
|
2089
|
+
repeated RuntimeOutputMessage items = 1;
|
2090
|
+
uint64 batch_index = 2;
|
2091
|
+
// if an exit code is given, this is the final message that will be sent.
|
2092
|
+
optional int32 exit_code = 3;
|
2093
|
+
repeated RuntimeOutputMessage stdout = 4;
|
2094
|
+
repeated RuntimeOutputMessage stderr = 5;
|
2095
|
+
repeated RuntimeOutputMessage info = 6;
|
2096
|
+
}
|
2097
|
+
|
2098
|
+
// Used for `modal container exec`, `modal shell`, and Sandboxes
|
2099
|
+
message RuntimeOutputMessage {
|
2100
|
+
// only stdout / stderr is used
|
2101
|
+
FileDescriptor file_descriptor = 1;
|
2102
|
+
string message = 2;
|
2103
|
+
bytes message_bytes = 3;
|
1445
2104
|
}
|
1446
2105
|
|
1447
2106
|
message S3Mount {
|
@@ -1476,17 +2135,43 @@ message Sandbox {
|
|
1476
2135
|
repeated VolumeMount volume_mounts = 13;
|
1477
2136
|
|
1478
2137
|
PTYInfo pty_info = 15;
|
2138
|
+
|
2139
|
+
// If set, tasks will be scheduled using the new scheduler, which also knows
|
2140
|
+
// to look at fine-grained placement constraints.
|
2141
|
+
reserved 16; // _experimental_scheduler
|
2142
|
+
optional SchedulerPlacement scheduler_placement = 17;
|
2143
|
+
reserved 18; // _experimental_resources
|
2144
|
+
|
2145
|
+
string worker_id = 19; // for internal debugging use only
|
2146
|
+
oneof open_ports_oneof {
|
2147
|
+
PortSpecs open_ports = 20;
|
2148
|
+
}
|
2149
|
+
|
2150
|
+
bool i6pn_enabled = 21;
|
2151
|
+
|
2152
|
+
// Network access configuration beyond simple allow/block.
|
2153
|
+
NetworkAccess network_access = 22;
|
2154
|
+
|
2155
|
+
optional string proxy_id = 23;
|
1479
2156
|
}
|
1480
2157
|
|
1481
2158
|
message SandboxCreateRequest {
|
1482
2159
|
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1483
2160
|
Sandbox definition = 2;
|
2161
|
+
string environment_name = 3;
|
1484
2162
|
}
|
1485
2163
|
|
1486
2164
|
message SandboxCreateResponse {
|
1487
2165
|
string sandbox_id = 1;
|
1488
2166
|
}
|
1489
2167
|
|
2168
|
+
message SandboxGetLogsRequest {
|
2169
|
+
string sandbox_id = 1;
|
2170
|
+
FileDescriptor file_descriptor = 2;
|
2171
|
+
float timeout = 3;
|
2172
|
+
string last_entry_id = 4;
|
2173
|
+
}
|
2174
|
+
|
1490
2175
|
message SandboxGetTaskIdRequest {
|
1491
2176
|
string sandbox_id = 1;
|
1492
2177
|
}
|
@@ -1495,21 +2180,14 @@ message SandboxGetTaskIdResponse {
|
|
1495
2180
|
string task_id = 1;
|
1496
2181
|
}
|
1497
2182
|
|
1498
|
-
message
|
1499
|
-
string sandbox_id = 1;
|
1500
|
-
FileDescriptor file_descriptor = 2;
|
1501
|
-
float timeout = 3;
|
1502
|
-
string last_entry_id = 4;
|
1503
|
-
}
|
1504
|
-
|
1505
|
-
message SandboxStdinWriteRequest {
|
2183
|
+
message SandboxGetTunnelsRequest {
|
1506
2184
|
string sandbox_id = 1;
|
1507
|
-
|
1508
|
-
uint32 index = 3;
|
1509
|
-
bool eof = 4;
|
2185
|
+
float timeout = 2;
|
1510
2186
|
}
|
1511
2187
|
|
1512
|
-
message
|
2188
|
+
message SandboxGetTunnelsResponse {
|
2189
|
+
GenericResult result = 1;
|
2190
|
+
repeated TunnelData tunnels = 2;
|
1513
2191
|
}
|
1514
2192
|
|
1515
2193
|
message SandboxHandleMetadata {
|
@@ -1518,20 +2196,57 @@ message SandboxHandleMetadata {
|
|
1518
2196
|
|
1519
2197
|
message SandboxInfo {
|
1520
2198
|
string id = 1;
|
1521
|
-
modal.client.Sandbox definition = 2;
|
1522
2199
|
double created_at = 3;
|
1523
2200
|
TaskInfo task_info = 4;
|
2201
|
+
|
2202
|
+
reserved 2; // modal.client.Sandbox definition
|
1524
2203
|
}
|
1525
2204
|
|
1526
2205
|
message SandboxListRequest {
|
1527
2206
|
string app_id = 1;
|
1528
2207
|
double before_timestamp = 2;
|
2208
|
+
string environment_name = 3;
|
2209
|
+
bool include_finished = 4;
|
2210
|
+
repeated SandboxTag tags = 5;
|
1529
2211
|
}
|
1530
2212
|
|
1531
2213
|
message SandboxListResponse {
|
1532
2214
|
repeated SandboxInfo sandboxes = 1;
|
1533
2215
|
}
|
1534
2216
|
|
2217
|
+
message SandboxSnapshotFsRequest {
|
2218
|
+
string sandbox_id = 1;
|
2219
|
+
float timeout = 2;
|
2220
|
+
}
|
2221
|
+
|
2222
|
+
message SandboxSnapshotFsResponse {
|
2223
|
+
string image_id = 1;
|
2224
|
+
GenericResult result = 2;
|
2225
|
+
// Metadata may be empty since we may skip it for performance reasons.
|
2226
|
+
ImageMetadata image_metadata = 3;
|
2227
|
+
}
|
2228
|
+
|
2229
|
+
message SandboxStdinWriteRequest {
|
2230
|
+
string sandbox_id = 1;
|
2231
|
+
bytes input = 2;
|
2232
|
+
uint32 index = 3;
|
2233
|
+
bool eof = 4;
|
2234
|
+
}
|
2235
|
+
|
2236
|
+
message SandboxStdinWriteResponse {
|
2237
|
+
}
|
2238
|
+
|
2239
|
+
message SandboxTag {
|
2240
|
+
string tag_name = 1;
|
2241
|
+
string tag_value = 2;
|
2242
|
+
}
|
2243
|
+
|
2244
|
+
message SandboxTagsSetRequest {
|
2245
|
+
string environment_name = 1;
|
2246
|
+
string sandbox_id = 2;
|
2247
|
+
repeated SandboxTag tags = 3;
|
2248
|
+
}
|
2249
|
+
|
1535
2250
|
message SandboxTerminateRequest {
|
1536
2251
|
string sandbox_id = 1;
|
1537
2252
|
}
|
@@ -1568,6 +2283,21 @@ message Schedule {
|
|
1568
2283
|
}
|
1569
2284
|
}
|
1570
2285
|
|
2286
|
+
message SchedulerPlacement {
|
2287
|
+
// TODO(irfansharif):
|
2288
|
+
// - Fold in cloud, resource needs here too.
|
2289
|
+
// - Allow specifying list of zones, cloud, fallback and alternative
|
2290
|
+
// GPU types.
|
2291
|
+
|
2292
|
+
repeated string regions = 4;
|
2293
|
+
// TODO(irfansharif): Make these two repeated.
|
2294
|
+
optional string _zone = 2; // admin-only
|
2295
|
+
optional string _lifecycle = 3; // admin-only, "on-demand" or "spot", else ignored
|
2296
|
+
repeated string _instance_types = 5; // admin-only
|
2297
|
+
|
2298
|
+
reserved 1;
|
2299
|
+
}
|
2300
|
+
|
1571
2301
|
message SecretCreateRequest { // Not used by client anymore
|
1572
2302
|
map<string, string> env_dict = 1;
|
1573
2303
|
string app_id = 2 [ (modal.options.audit_target_attr) = true ];
|
@@ -1579,13 +2309,18 @@ message SecretCreateResponse { // Not used by client anymore
|
|
1579
2309
|
string secret_id = 1;
|
1580
2310
|
}
|
1581
2311
|
|
2312
|
+
message SecretDeleteRequest {
|
2313
|
+
string secret_id = 1;
|
2314
|
+
}
|
2315
|
+
|
1582
2316
|
message SecretGetOrCreateRequest {
|
1583
|
-
string deployment_name = 1;
|
2317
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
1584
2318
|
DeploymentNamespace namespace = 2;
|
1585
2319
|
string environment_name = 3;
|
1586
2320
|
ObjectCreationType object_creation_type = 4; // Not used atm
|
1587
2321
|
map<string, string> env_dict = 5;
|
1588
2322
|
string app_id = 6; // only used with OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP
|
2323
|
+
repeated string required_keys = 7;
|
1589
2324
|
}
|
1590
2325
|
|
1591
2326
|
message SecretGetOrCreateResponse {
|
@@ -1597,6 +2332,7 @@ message SecretListItem {
|
|
1597
2332
|
double created_at = 2;
|
1598
2333
|
double last_used_at = 3;
|
1599
2334
|
string environment_name = 4;
|
2335
|
+
string secret_id = 5;
|
1600
2336
|
}
|
1601
2337
|
|
1602
2338
|
message SecretListRequest {
|
@@ -1608,8 +2344,24 @@ message SecretListResponse {
|
|
1608
2344
|
string environment_name = 2; // the environment that was listed (useful when relying on "default" logic)
|
1609
2345
|
}
|
1610
2346
|
|
2347
|
+
message SharedVolumeDeleteRequest {
|
2348
|
+
string shared_volume_id = 1;
|
2349
|
+
}
|
2350
|
+
|
2351
|
+
message SharedVolumeGetFileRequest {
|
2352
|
+
string shared_volume_id = 1;
|
2353
|
+
string path = 2;
|
2354
|
+
}
|
2355
|
+
|
2356
|
+
message SharedVolumeGetFileResponse {
|
2357
|
+
oneof data_oneof {
|
2358
|
+
bytes data = 1;
|
2359
|
+
string data_blob_id = 2;
|
2360
|
+
}
|
2361
|
+
}
|
2362
|
+
|
1611
2363
|
message SharedVolumeGetOrCreateRequest {
|
1612
|
-
string deployment_name = 1;
|
2364
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
1613
2365
|
DeploymentNamespace namespace = 2;
|
1614
2366
|
string environment_name = 3;
|
1615
2367
|
ObjectCreationType object_creation_type = 4;
|
@@ -1624,13 +2376,13 @@ message SharedVolumeHeartbeatRequest {
|
|
1624
2376
|
string shared_volume_id = 1;
|
1625
2377
|
}
|
1626
2378
|
|
1627
|
-
message
|
1628
|
-
string
|
1629
|
-
|
2379
|
+
message SharedVolumeListFilesRequest {
|
2380
|
+
string shared_volume_id = 1;
|
2381
|
+
string path = 2;
|
1630
2382
|
}
|
1631
2383
|
|
1632
|
-
message
|
1633
|
-
|
2384
|
+
message SharedVolumeListFilesResponse {
|
2385
|
+
repeated FileEntry entries = 1;
|
1634
2386
|
}
|
1635
2387
|
|
1636
2388
|
message SharedVolumeListItem {
|
@@ -1649,9 +2401,11 @@ message SharedVolumeListResponse {
|
|
1649
2401
|
string environment_name = 2;
|
1650
2402
|
}
|
1651
2403
|
|
1652
|
-
message
|
1653
|
-
string
|
1654
|
-
string
|
2404
|
+
message SharedVolumeMount {
|
2405
|
+
string mount_path = 1;
|
2406
|
+
string shared_volume_id = 2;
|
2407
|
+
CloudProvider cloud_provider = 3;
|
2408
|
+
bool allow_cross_region = 4;
|
1655
2409
|
}
|
1656
2410
|
|
1657
2411
|
message SharedVolumePutFileRequest {
|
@@ -1669,46 +2423,29 @@ message SharedVolumePutFileResponse {
|
|
1669
2423
|
bool exists = 1;
|
1670
2424
|
}
|
1671
2425
|
|
1672
|
-
message SharedVolumeGetFileRequest {
|
1673
|
-
string shared_volume_id = 1;
|
1674
|
-
string path = 2;
|
1675
|
-
}
|
1676
|
-
|
1677
|
-
message SharedVolumeGetFileResponse {
|
1678
|
-
oneof data_oneof {
|
1679
|
-
bytes data = 1;
|
1680
|
-
string data_blob_id = 2;
|
1681
|
-
}
|
1682
|
-
}
|
1683
|
-
|
1684
2426
|
message SharedVolumeRemoveFileRequest {
|
1685
2427
|
string shared_volume_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1686
2428
|
string path = 2;
|
1687
2429
|
bool recursive = 3;
|
1688
2430
|
}
|
1689
2431
|
|
1690
|
-
message
|
1691
|
-
|
1692
|
-
|
1693
|
-
FILE = 1;
|
1694
|
-
DIRECTORY = 2;
|
1695
|
-
}
|
1696
|
-
string path = 1;
|
1697
|
-
FileType type = 2;
|
2432
|
+
message SystemErrorMessage {
|
2433
|
+
SystemErrorCode error_code = 1;
|
2434
|
+
string error_message = 2;
|
1698
2435
|
}
|
1699
2436
|
|
1700
|
-
message
|
1701
|
-
|
2437
|
+
message TaskClusterHelloRequest {
|
2438
|
+
string task_id = 1;
|
2439
|
+
string container_ip = 2;
|
1702
2440
|
}
|
1703
2441
|
|
1704
|
-
message
|
1705
|
-
string
|
1706
|
-
|
1707
|
-
|
1708
|
-
|
2442
|
+
message TaskClusterHelloResponse {
|
2443
|
+
string cluster_id = 1;
|
2444
|
+
uint32 cluster_rank = 2;
|
2445
|
+
// All IP addresses in cluster, ordered by cluster rank
|
2446
|
+
repeated string container_ips = 3;
|
1709
2447
|
}
|
1710
2448
|
|
1711
|
-
|
1712
2449
|
message TaskCurrentInputsResponse {
|
1713
2450
|
repeated string input_ids = 1;
|
1714
2451
|
}
|
@@ -1718,6 +2455,15 @@ message TaskInfo {
|
|
1718
2455
|
double started_at = 2;
|
1719
2456
|
double finished_at = 3;
|
1720
2457
|
modal.client.GenericResult result = 4;
|
2458
|
+
double enqueued_at = 5;
|
2459
|
+
}
|
2460
|
+
|
2461
|
+
message TaskListRequest {
|
2462
|
+
string environment_name = 1;
|
2463
|
+
}
|
2464
|
+
|
2465
|
+
message TaskListResponse {
|
2466
|
+
repeated TaskStats tasks = 1;
|
1721
2467
|
}
|
1722
2468
|
|
1723
2469
|
message TaskLogs {
|
@@ -1730,12 +2476,6 @@ message TaskLogs {
|
|
1730
2476
|
string input_id = 11;
|
1731
2477
|
}
|
1732
2478
|
|
1733
|
-
message TaskListRequest {}
|
1734
|
-
|
1735
|
-
message TaskListResponse {
|
1736
|
-
repeated TaskStats tasks = 1;
|
1737
|
-
}
|
1738
|
-
|
1739
2479
|
message TaskLogsBatch {
|
1740
2480
|
string task_id = 1;
|
1741
2481
|
repeated TaskLogs items = 2;
|
@@ -1756,7 +2496,7 @@ message TaskProgress {
|
|
1756
2496
|
}
|
1757
2497
|
|
1758
2498
|
message TaskResultRequest {
|
1759
|
-
|
2499
|
+
GenericResult result = 2;
|
1760
2500
|
}
|
1761
2501
|
|
1762
2502
|
message TaskStats {
|
@@ -1766,6 +2506,16 @@ message TaskStats {
|
|
1766
2506
|
double started_at = 4;
|
1767
2507
|
}
|
1768
2508
|
|
2509
|
+
message TaskTemplate {
|
2510
|
+
uint32 rank = 1;
|
2511
|
+
Resources resources = 2;
|
2512
|
+
uint32 target_concurrent_inputs = 3;
|
2513
|
+
uint32 max_concurrent_inputs = 4;
|
2514
|
+
|
2515
|
+
// TODO(irfansharif): Just move this into a column in the task table instead?
|
2516
|
+
// Deprecate all above fields and get rid of this message altogether
|
2517
|
+
uint32 index = 5; // pointer into FunctionData, if using that as the underlying definition type
|
2518
|
+
}
|
1769
2519
|
|
1770
2520
|
message TokenFlowCreateRequest {
|
1771
2521
|
string utm_source = 3;
|
@@ -1793,6 +2543,14 @@ message TokenFlowWaitResponse {
|
|
1793
2543
|
string workspace_username = 4;
|
1794
2544
|
}
|
1795
2545
|
|
2546
|
+
message TunnelData {
|
2547
|
+
string host = 1;
|
2548
|
+
uint32 port = 2;
|
2549
|
+
optional string unencrypted_host = 3;
|
2550
|
+
optional uint32 unencrypted_port = 4;
|
2551
|
+
uint32 container_port = 5;
|
2552
|
+
}
|
2553
|
+
|
1796
2554
|
message TunnelStartRequest {
|
1797
2555
|
uint32 port = 1;
|
1798
2556
|
bool unencrypted = 2;
|
@@ -1813,30 +2571,6 @@ message TunnelStopResponse {
|
|
1813
2571
|
bool exists = 1;
|
1814
2572
|
}
|
1815
2573
|
|
1816
|
-
message VolumeGetOrCreateRequest {
|
1817
|
-
string deployment_name = 1;
|
1818
|
-
DeploymentNamespace namespace = 2;
|
1819
|
-
string environment_name = 3;
|
1820
|
-
ObjectCreationType object_creation_type = 4;
|
1821
|
-
string app_id = 5; // only used with OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP
|
1822
|
-
}
|
1823
|
-
|
1824
|
-
message VolumeGetOrCreateResponse {
|
1825
|
-
string volume_id = 1;
|
1826
|
-
}
|
1827
|
-
|
1828
|
-
message VolumeHeartbeatRequest {
|
1829
|
-
string volume_id = 1;
|
1830
|
-
}
|
1831
|
-
|
1832
|
-
message VolumeCreateRequest {
|
1833
|
-
string app_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1834
|
-
}
|
1835
|
-
|
1836
|
-
message VolumeCreateResponse {
|
1837
|
-
string volume_id = 1;
|
1838
|
-
}
|
1839
|
-
|
1840
2574
|
message VolumeCommitRequest {
|
1841
2575
|
// NOTE(staffan): Mounting a volume in multiple locations is not supported, so volume_id alone uniquely identifies
|
1842
2576
|
// a volume mount.
|
@@ -1847,6 +2581,13 @@ message VolumeCommitResponse {
|
|
1847
2581
|
bool skip_reload = 1;
|
1848
2582
|
}
|
1849
2583
|
|
2584
|
+
message VolumeCopyFilesRequest {
|
2585
|
+
string volume_id = 1;
|
2586
|
+
repeated string src_paths = 2;
|
2587
|
+
string dst_path = 3;
|
2588
|
+
bool recursive = 4;
|
2589
|
+
}
|
2590
|
+
|
1850
2591
|
message VolumeDeleteRequest {
|
1851
2592
|
string volume_id = 1;
|
1852
2593
|
string environment_name = 2 [deprecated=true];
|
@@ -1854,7 +2595,7 @@ message VolumeDeleteRequest {
|
|
1854
2595
|
|
1855
2596
|
message VolumeGetFileRequest {
|
1856
2597
|
string volume_id = 1;
|
1857
|
-
|
2598
|
+
string path = 2;
|
1858
2599
|
uint64 start = 3;
|
1859
2600
|
uint64 len = 4; // 0 is interpreted as 'read to end'
|
1860
2601
|
}
|
@@ -1869,27 +2610,33 @@ message VolumeGetFileResponse {
|
|
1869
2610
|
uint64 len = 5; // number of bytes returned
|
1870
2611
|
}
|
1871
2612
|
|
1872
|
-
message
|
1873
|
-
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
2613
|
+
message VolumeGetOrCreateRequest {
|
2614
|
+
string deployment_name = 1 [ (modal.options.audit_target_attr) = true ];
|
2615
|
+
DeploymentNamespace namespace = 2;
|
2616
|
+
string environment_name = 3;
|
2617
|
+
ObjectCreationType object_creation_type = 4;
|
2618
|
+
string app_id = 5; // only used with OBJECT_CREATION_TYPE_ANONYMOUS_OWNED_BY_APP
|
2619
|
+
VolumeFsVersion version = 6;
|
2620
|
+
}
|
2621
|
+
|
2622
|
+
message VolumeGetOrCreateResponse {
|
2623
|
+
string volume_id = 1;
|
2624
|
+
VolumeFsVersion version = 2;
|
2625
|
+
}
|
2626
|
+
|
2627
|
+
message VolumeHeartbeatRequest {
|
2628
|
+
string volume_id = 1;
|
1883
2629
|
}
|
1884
2630
|
|
1885
2631
|
message VolumeListFilesRequest {
|
1886
2632
|
string volume_id = 1;
|
1887
2633
|
string path = 2;
|
1888
|
-
|
2634
|
+
bool recursive = 4;
|
2635
|
+
optional uint32 max_entries = 3;
|
1889
2636
|
}
|
1890
2637
|
|
1891
2638
|
message VolumeListFilesResponse {
|
1892
|
-
repeated
|
2639
|
+
repeated FileEntry entries = 1;
|
1893
2640
|
}
|
1894
2641
|
|
1895
2642
|
message VolumeListItem {
|
@@ -1907,10 +2654,10 @@ message VolumeListResponse {
|
|
1907
2654
|
string environment_name = 2;
|
1908
2655
|
}
|
1909
2656
|
|
1910
|
-
message
|
1911
|
-
// NOTE(staffan): Mounting a volume in multiple locations is not supported, so volume_id alone uniquely identifies
|
1912
|
-
// a volume mount.
|
2657
|
+
message VolumeMount {
|
1913
2658
|
string volume_id = 1;
|
2659
|
+
string mount_path = 2;
|
2660
|
+
bool allow_background_commits = 3;
|
1914
2661
|
}
|
1915
2662
|
|
1916
2663
|
message VolumePutFilesRequest {
|
@@ -1922,23 +2669,37 @@ message VolumePutFilesRequest {
|
|
1922
2669
|
bool disallow_overwrite_existing_files = 3;
|
1923
2670
|
}
|
1924
2671
|
|
2672
|
+
message VolumeReloadRequest {
|
2673
|
+
// NOTE(staffan): Mounting a volume in multiple locations is not supported, so volume_id alone uniquely identifies
|
2674
|
+
// a volume mount.
|
2675
|
+
string volume_id = 1;
|
2676
|
+
}
|
2677
|
+
|
1925
2678
|
message VolumeRemoveFileRequest {
|
1926
2679
|
string volume_id = 1 [ (modal.options.audit_target_attr) = true ];
|
1927
|
-
|
2680
|
+
string path = 2;
|
1928
2681
|
bool recursive = 3;
|
1929
2682
|
}
|
1930
2683
|
|
1931
|
-
message
|
1932
|
-
string volume_id = 1;
|
1933
|
-
|
1934
|
-
bytes dst_path = 3;
|
1935
|
-
bool recursive = 4;
|
2684
|
+
message VolumeRenameRequest {
|
2685
|
+
string volume_id = 1 [ (modal.options.audit_target_attr) = true ];
|
2686
|
+
string name = 2;
|
1936
2687
|
}
|
1937
2688
|
|
1938
|
-
message
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
2689
|
+
message Warning {
|
2690
|
+
enum WarningType {
|
2691
|
+
WARNING_TYPE_UNSPECIFIED = 0;
|
2692
|
+
WARNING_TYPE_CLIENT_DEPRECATION = 1;
|
2693
|
+
WARNING_TYPE_RESOURCE_LIMIT = 2;
|
2694
|
+
}
|
2695
|
+
WarningType type = 1;
|
2696
|
+
string message = 2;
|
2697
|
+
}
|
2698
|
+
|
2699
|
+
message WebUrlInfo {
|
2700
|
+
bool truncated = 1;
|
2701
|
+
bool has_unique_hash = 2 [deprecated=true];
|
2702
|
+
bool label_stolen = 3;
|
1942
2703
|
}
|
1943
2704
|
|
1944
2705
|
message WebhookConfig {
|
@@ -1949,53 +2710,34 @@ message WebhookConfig {
|
|
1949
2710
|
repeated CustomDomainConfig custom_domains = 6;
|
1950
2711
|
uint32 web_server_port = 7;
|
1951
2712
|
float web_server_startup_timeout = 8;
|
1952
|
-
|
1953
|
-
|
1954
|
-
message WebUrlInfo {
|
1955
|
-
bool truncated = 1;
|
1956
|
-
bool has_unique_hash = 2;
|
1957
|
-
bool label_stolen = 3;
|
2713
|
+
bool web_endpoint_docs = 9;
|
2714
|
+
bool requires_proxy_auth = 10;
|
1958
2715
|
}
|
1959
2716
|
|
1960
2717
|
message WorkspaceNameLookupResponse {
|
1961
|
-
string workspace_name = 1;
|
2718
|
+
string workspace_name = 1 [deprecated=true];
|
1962
2719
|
string username = 2;
|
1963
2720
|
}
|
1964
2721
|
|
1965
|
-
// Used for `modal container exec`
|
1966
|
-
message RuntimeOutputMessage {
|
1967
|
-
// only stdout / stderr is used
|
1968
|
-
FileDescriptor file_descriptor = 1;
|
1969
|
-
string message = 2;
|
1970
|
-
}
|
1971
|
-
|
1972
|
-
message RuntimeOutputBatch {
|
1973
|
-
repeated RuntimeOutputMessage items = 1;
|
1974
|
-
uint64 batch_index = 2;
|
1975
|
-
// if an exit code is given, this is the final message that will be sent.
|
1976
|
-
optional int32 exit_code = 3;
|
1977
|
-
}
|
1978
|
-
|
1979
|
-
message RuntimeInputMessage {
|
1980
|
-
bytes message = 1;
|
1981
|
-
uint64 message_index = 2;
|
1982
|
-
}
|
1983
|
-
|
1984
2722
|
|
1985
2723
|
service ModalClient {
|
1986
2724
|
// Apps
|
1987
|
-
rpc AppCreate(AppCreateRequest) returns (AppCreateResponse);
|
1988
2725
|
rpc AppClientDisconnect(AppClientDisconnectRequest) returns (google.protobuf.Empty);
|
2726
|
+
rpc AppCreate(AppCreateRequest) returns (AppCreateResponse);
|
2727
|
+
rpc AppDeploy(AppDeployRequest) returns (AppDeployResponse);
|
2728
|
+
rpc AppDeploymentHistory(AppDeploymentHistoryRequest) returns (AppDeploymentHistoryResponse);
|
2729
|
+
rpc AppGetByDeploymentName(AppGetByDeploymentNameRequest) returns (AppGetByDeploymentNameResponse);
|
2730
|
+
rpc AppGetLayout(AppGetLayoutRequest) returns (AppGetLayoutResponse);
|
1989
2731
|
rpc AppGetLogs(AppGetLogsRequest) returns (stream TaskLogsBatch);
|
1990
|
-
rpc AppSetObjects(AppSetObjectsRequest) returns (google.protobuf.Empty);
|
1991
2732
|
rpc AppGetObjects(AppGetObjectsRequest) returns (AppGetObjectsResponse);
|
2733
|
+
rpc AppGetOrCreate(AppGetOrCreateRequest) returns (AppGetOrCreateResponse);
|
2734
|
+
rpc AppHeartbeat(AppHeartbeatRequest) returns (google.protobuf.Empty);
|
1992
2735
|
rpc AppList(AppListRequest) returns (AppListResponse);
|
1993
|
-
rpc
|
1994
|
-
rpc
|
1995
|
-
rpc
|
1996
|
-
rpc
|
2736
|
+
rpc AppLookup(AppLookupRequest) returns (AppLookupResponse);
|
2737
|
+
rpc AppPublish(AppPublishRequest) returns (AppPublishResponse);
|
2738
|
+
rpc AppRollback(AppRollbackRequest) returns (google.protobuf.Empty);
|
2739
|
+
rpc AppSetObjects(AppSetObjectsRequest) returns (google.protobuf.Empty);
|
1997
2740
|
rpc AppStop(AppStopRequest) returns (google.protobuf.Empty);
|
1998
|
-
rpc AppHeartbeat(AppHeartbeatRequest) returns (google.protobuf.Empty);
|
1999
2741
|
|
2000
2742
|
// Blobs
|
2001
2743
|
rpc BlobCreate(BlobCreateRequest) returns (BlobCreateResponse);
|
@@ -2006,47 +2748,59 @@ service ModalClient {
|
|
2006
2748
|
rpc ClassGet(ClassGetRequest) returns (ClassGetResponse);
|
2007
2749
|
|
2008
2750
|
// Clients
|
2009
|
-
rpc ClientCreate(ClientCreateRequest) returns (ClientCreateResponse);
|
2010
2751
|
rpc ClientHello(google.protobuf.Empty) returns (ClientHelloResponse);
|
2011
|
-
rpc ClientHeartbeat(ClientHeartbeatRequest) returns (google.protobuf.Empty);
|
2012
2752
|
|
2013
2753
|
// Container
|
2014
|
-
rpc
|
2754
|
+
rpc ContainerCheckpoint(ContainerCheckpointRequest) returns (google.protobuf.Empty);
|
2015
2755
|
rpc ContainerExec(ContainerExecRequest) returns (ContainerExecResponse);
|
2016
2756
|
rpc ContainerExecGetOutput(ContainerExecGetOutputRequest) returns (stream RuntimeOutputBatch);
|
2017
2757
|
rpc ContainerExecPutInput(ContainerExecPutInputRequest) returns (google.protobuf.Empty);
|
2018
|
-
|
2019
|
-
|
2020
|
-
rpc
|
2758
|
+
rpc ContainerExecWait(ContainerExecWaitRequest) returns (ContainerExecWaitResponse);
|
2759
|
+
rpc ContainerFilesystemExec(ContainerFilesystemExecRequest) returns (ContainerFilesystemExecResponse);
|
2760
|
+
rpc ContainerFilesystemExecGetOutput(ContainerFilesystemExecGetOutputRequest) returns (stream FilesystemRuntimeOutputBatch);
|
2761
|
+
rpc ContainerHeartbeat(ContainerHeartbeatRequest) returns (ContainerHeartbeatResponse);
|
2762
|
+
rpc ContainerHello(google.protobuf.Empty) returns (google.protobuf.Empty);
|
2763
|
+
rpc ContainerLog(ContainerLogRequest) returns (google.protobuf.Empty);
|
2764
|
+
rpc ContainerStop(ContainerStopRequest) returns (ContainerStopResponse);
|
2021
2765
|
|
2022
2766
|
// Dicts
|
2023
2767
|
rpc DictClear(DictClearRequest) returns (google.protobuf.Empty);
|
2024
|
-
rpc
|
2768
|
+
rpc DictContains(DictContainsRequest) returns (DictContainsResponse);
|
2769
|
+
rpc DictContents(DictContentsRequest) returns (stream DictEntry);
|
2770
|
+
rpc DictDelete(DictDeleteRequest) returns (google.protobuf.Empty);
|
2771
|
+
rpc DictGet(DictGetRequest) returns (DictGetResponse);
|
2025
2772
|
rpc DictGetOrCreate(DictGetOrCreateRequest) returns (DictGetOrCreateResponse);
|
2026
2773
|
rpc DictHeartbeat(DictHeartbeatRequest) returns (google.protobuf.Empty);
|
2027
|
-
rpc DictUpdate(DictUpdateRequest) returns (DictUpdateResponse);
|
2028
|
-
rpc DictGet(DictGetRequest) returns (DictGetResponse);
|
2029
|
-
rpc DictPop(DictPopRequest) returns (DictPopResponse);
|
2030
|
-
rpc DictContains(DictContainsRequest) returns (DictContainsResponse);
|
2031
2774
|
rpc DictLen(DictLenRequest) returns (DictLenResponse);
|
2775
|
+
rpc DictList(DictListRequest) returns (DictListResponse);
|
2776
|
+
rpc DictPop(DictPopRequest) returns (DictPopResponse);
|
2777
|
+
rpc DictUpdate(DictUpdateRequest) returns (DictUpdateResponse);
|
2032
2778
|
|
2033
2779
|
// Domains
|
2780
|
+
rpc DomainCertificateVerify(DomainCertificateVerifyRequest) returns (DomainCertificateVerifyResponse);
|
2034
2781
|
rpc DomainCreate(DomainCreateRequest) returns (DomainCreateResponse);
|
2035
2782
|
rpc DomainList(DomainListRequest) returns (DomainListResponse);
|
2036
|
-
rpc DomainCertificateVerify(DomainCertificateVerifyRequest) returns (DomainCertificateVerifyResponse);
|
2037
2783
|
|
2038
2784
|
// Environments
|
2039
2785
|
rpc EnvironmentCreate(EnvironmentCreateRequest) returns (google.protobuf.Empty);
|
2040
|
-
rpc EnvironmentList(google.protobuf.Empty) returns (EnvironmentListResponse);
|
2041
2786
|
rpc EnvironmentDelete(EnvironmentDeleteRequest) returns (google.protobuf.Empty);
|
2787
|
+
rpc EnvironmentGetOrCreate(EnvironmentGetOrCreateRequest) returns (EnvironmentGetOrCreateResponse);
|
2788
|
+
rpc EnvironmentList(google.protobuf.Empty) returns (EnvironmentListResponse);
|
2042
2789
|
rpc EnvironmentUpdate(EnvironmentUpdateRequest) returns (EnvironmentListItem);
|
2043
2790
|
|
2044
2791
|
// Functions
|
2792
|
+
rpc FunctionAsyncInvoke(FunctionAsyncInvokeRequest) returns (FunctionAsyncInvokeResponse);
|
2045
2793
|
rpc FunctionBindParams(FunctionBindParamsRequest) returns (FunctionBindParamsResponse);
|
2794
|
+
rpc FunctionCallCancel(FunctionCallCancelRequest) returns (google.protobuf.Empty);
|
2795
|
+
rpc FunctionCallGetDataIn(FunctionCallGetDataRequest) returns (stream DataChunk);
|
2796
|
+
rpc FunctionCallGetDataOut(FunctionCallGetDataRequest) returns (stream DataChunk);
|
2797
|
+
rpc FunctionCallList(FunctionCallListRequest) returns (FunctionCallListResponse);
|
2798
|
+
rpc FunctionCallPutDataOut(FunctionCallPutDataRequest) returns (google.protobuf.Empty);
|
2046
2799
|
rpc FunctionCreate(FunctionCreateRequest) returns (FunctionCreateResponse);
|
2047
2800
|
rpc FunctionGet(FunctionGetRequest) returns (FunctionGetResponse);
|
2048
2801
|
rpc FunctionGetCallGraph(FunctionGetCallGraphRequest) returns (FunctionGetCallGraphResponse);
|
2049
2802
|
rpc FunctionGetCurrentStats(FunctionGetCurrentStatsRequest) returns (FunctionStats);
|
2803
|
+
rpc FunctionGetDynamicConcurrency(FunctionGetDynamicConcurrencyRequest) returns (FunctionGetDynamicConcurrencyResponse);
|
2050
2804
|
rpc FunctionGetInputs(FunctionGetInputsRequest) returns (FunctionGetInputsResponse); // For containers to request next call
|
2051
2805
|
rpc FunctionGetOutputs(FunctionGetOutputsRequest) returns (FunctionGetOutputsResponse); // Returns the next result(s) for an entire function call (FunctionMap)
|
2052
2806
|
rpc FunctionGetSerialized(FunctionGetSerializedRequest) returns (FunctionGetSerializedResponse);
|
@@ -2054,69 +2808,70 @@ service ModalClient {
|
|
2054
2808
|
rpc FunctionPrecreate(FunctionPrecreateRequest) returns (FunctionPrecreateResponse);
|
2055
2809
|
rpc FunctionPutInputs(FunctionPutInputsRequest) returns (FunctionPutInputsResponse);
|
2056
2810
|
rpc FunctionPutOutputs(FunctionPutOutputsRequest) returns (google.protobuf.Empty); // For containers to return result
|
2057
|
-
rpc
|
2058
|
-
|
2059
|
-
// Function calls
|
2060
|
-
rpc FunctionCallCancel(FunctionCallCancelRequest) returns (google.protobuf.Empty);
|
2061
|
-
rpc FunctionCallList(FunctionCallListRequest) returns (FunctionCallListResponse);
|
2062
|
-
rpc FunctionCallGetDataIn(FunctionCallGetDataRequest) returns (stream DataChunk);
|
2063
|
-
rpc FunctionCallGetDataOut(FunctionCallGetDataRequest) returns (stream DataChunk);
|
2064
|
-
rpc FunctionCallPutDataOut(FunctionCallPutDataRequest) returns (google.protobuf.Empty);
|
2065
|
-
|
2066
|
-
// Interactive functions
|
2811
|
+
rpc FunctionRetryInputs(FunctionRetryInputsRequest) returns (FunctionRetryInputsResponse);
|
2067
2812
|
rpc FunctionStartPtyShell(google.protobuf.Empty) returns (google.protobuf.Empty);
|
2813
|
+
rpc FunctionUpdateSchedulingParams(FunctionUpdateSchedulingParamsRequest) returns (FunctionUpdateSchedulingParamsResponse);
|
2068
2814
|
|
2069
2815
|
// Images
|
2816
|
+
rpc ImageFromId(ImageFromIdRequest) returns (ImageFromIdResponse);
|
2070
2817
|
rpc ImageGetOrCreate(ImageGetOrCreateRequest) returns (ImageGetOrCreateResponse);
|
2071
2818
|
rpc ImageJoinStreaming(ImageJoinStreamingRequest) returns (stream ImageJoinStreamingResponse);
|
2072
2819
|
|
2073
2820
|
// Mounts
|
2074
|
-
rpc MountPutFile(MountPutFileRequest) returns (MountPutFileResponse);
|
2075
|
-
rpc MountBuild(MountBuildRequest) returns (MountBuildResponse);
|
2076
2821
|
rpc MountGetOrCreate(MountGetOrCreateRequest) returns (MountGetOrCreateResponse);
|
2822
|
+
rpc MountPutFile(MountPutFileRequest) returns (MountPutFileResponse);
|
2077
2823
|
|
2078
2824
|
// Proxies
|
2825
|
+
rpc ProxyCreate(ProxyCreateRequest) returns (ProxyCreateResponse);
|
2826
|
+
rpc ProxyDelete(ProxyDeleteRequest) returns (google.protobuf.Empty);
|
2827
|
+
rpc ProxyGet(ProxyGetRequest) returns (ProxyGetResponse);
|
2079
2828
|
rpc ProxyGetOrCreate(ProxyGetOrCreateRequest) returns (ProxyGetOrCreateResponse);
|
2829
|
+
rpc ProxyList(google.protobuf.Empty) returns (ProxyListResponse);
|
2080
2830
|
|
2081
2831
|
// Queues
|
2082
|
-
rpc
|
2083
|
-
rpc
|
2832
|
+
rpc QueueClear(QueueClearRequest) returns (google.protobuf.Empty);
|
2833
|
+
rpc QueueDelete(QueueDeleteRequest) returns (google.protobuf.Empty);
|
2084
2834
|
rpc QueueGet(QueueGetRequest) returns (QueueGetResponse);
|
2835
|
+
rpc QueueGetOrCreate(QueueGetOrCreateRequest) returns (QueueGetOrCreateResponse);
|
2085
2836
|
rpc QueueHeartbeat(QueueHeartbeatRequest) returns (google.protobuf.Empty);
|
2086
|
-
rpc QueuePut(QueuePutRequest) returns (google.protobuf.Empty);
|
2087
2837
|
rpc QueueLen(QueueLenRequest) returns (QueueLenResponse);
|
2838
|
+
rpc QueueList(QueueListRequest) returns (QueueListResponse);
|
2839
|
+
rpc QueueNextItems(QueueNextItemsRequest) returns (QueueNextItemsResponse);
|
2840
|
+
rpc QueuePut(QueuePutRequest) returns (google.protobuf.Empty);
|
2088
2841
|
|
2089
2842
|
// Sandboxes
|
2090
2843
|
rpc SandboxCreate(SandboxCreateRequest) returns (SandboxCreateResponse);
|
2091
|
-
rpc SandboxGetTaskId(SandboxGetTaskIdRequest) returns (SandboxGetTaskIdResponse); // needed for modal container exec
|
2092
2844
|
rpc SandboxGetLogs(SandboxGetLogsRequest) returns (stream TaskLogsBatch);
|
2093
|
-
rpc
|
2845
|
+
rpc SandboxGetTaskId(SandboxGetTaskIdRequest) returns (SandboxGetTaskIdResponse); // needed for modal container exec
|
2846
|
+
rpc SandboxGetTunnels(SandboxGetTunnelsRequest) returns (SandboxGetTunnelsResponse);
|
2094
2847
|
rpc SandboxList(SandboxListRequest) returns (SandboxListResponse);
|
2095
|
-
rpc
|
2848
|
+
rpc SandboxSnapshotFs(SandboxSnapshotFsRequest) returns (SandboxSnapshotFsResponse);
|
2096
2849
|
rpc SandboxStdinWrite(SandboxStdinWriteRequest) returns (SandboxStdinWriteResponse);
|
2850
|
+
rpc SandboxTagsSet(SandboxTagsSetRequest) returns (google.protobuf.Empty);
|
2851
|
+
rpc SandboxTerminate(SandboxTerminateRequest) returns (SandboxTerminateResponse);
|
2852
|
+
rpc SandboxWait(SandboxWaitRequest) returns (SandboxWaitResponse);
|
2097
2853
|
|
2098
2854
|
// Secrets
|
2099
|
-
rpc
|
2855
|
+
rpc SecretDelete(SecretDeleteRequest) returns (google.protobuf.Empty);
|
2100
2856
|
rpc SecretGetOrCreate(SecretGetOrCreateRequest) returns (SecretGetOrCreateResponse);
|
2101
2857
|
rpc SecretList(SecretListRequest) returns (SecretListResponse);
|
2102
2858
|
|
2103
2859
|
// SharedVolumes
|
2860
|
+
rpc SharedVolumeDelete(SharedVolumeDeleteRequest) returns (google.protobuf.Empty);
|
2861
|
+
rpc SharedVolumeGetFile(SharedVolumeGetFileRequest) returns (SharedVolumeGetFileResponse);
|
2104
2862
|
rpc SharedVolumeGetOrCreate(SharedVolumeGetOrCreateRequest) returns (SharedVolumeGetOrCreateResponse);
|
2105
|
-
rpc SharedVolumeCreate(SharedVolumeCreateRequest) returns (SharedVolumeCreateResponse);
|
2106
2863
|
rpc SharedVolumeHeartbeat(SharedVolumeHeartbeatRequest) returns (google.protobuf.Empty);
|
2107
2864
|
rpc SharedVolumeList(SharedVolumeListRequest) returns (SharedVolumeListResponse);
|
2108
2865
|
rpc SharedVolumeListFiles(SharedVolumeListFilesRequest) returns (SharedVolumeListFilesResponse);
|
2109
2866
|
rpc SharedVolumeListFilesStream(SharedVolumeListFilesRequest) returns (stream SharedVolumeListFilesResponse);
|
2110
2867
|
rpc SharedVolumePutFile(SharedVolumePutFileRequest) returns (SharedVolumePutFileResponse);
|
2111
|
-
rpc SharedVolumeGetFile(SharedVolumeGetFileRequest) returns (SharedVolumeGetFileResponse);
|
2112
2868
|
rpc SharedVolumeRemoveFile(SharedVolumeRemoveFileRequest) returns (google.protobuf.Empty);
|
2113
2869
|
|
2114
2870
|
// Tasks
|
2115
|
-
rpc
|
2116
|
-
rpc TaskList(TaskListRequest) returns (TaskListResponse);
|
2117
|
-
|
2118
|
-
// Gets the inputs currently assigned to the requesting task, requires task metadata for auth
|
2871
|
+
rpc TaskClusterHello(TaskClusterHelloRequest) returns (TaskClusterHelloResponse);
|
2119
2872
|
rpc TaskCurrentInputs(google.protobuf.Empty) returns (TaskCurrentInputsResponse);
|
2873
|
+
rpc TaskList(TaskListRequest) returns (TaskListResponse);
|
2874
|
+
rpc TaskResult(TaskResultRequest) returns (google.protobuf.Empty);
|
2120
2875
|
|
2121
2876
|
// Tokens (web auth flow)
|
2122
2877
|
rpc TokenFlowCreate(TokenFlowCreateRequest) returns (TokenFlowCreateResponse);
|
@@ -2127,18 +2882,18 @@ service ModalClient {
|
|
2127
2882
|
rpc TunnelStop(TunnelStopRequest) returns (TunnelStopResponse);
|
2128
2883
|
|
2129
2884
|
// Volumes
|
2130
|
-
rpc VolumeGetOrCreate(VolumeGetOrCreateRequest) returns (VolumeGetOrCreateResponse);
|
2131
|
-
rpc VolumeCreate(VolumeCreateRequest) returns (VolumeCreateResponse);
|
2132
|
-
rpc VolumeHeartbeat(VolumeHeartbeatRequest) returns (google.protobuf.Empty);
|
2133
2885
|
rpc VolumeCommit(VolumeCommitRequest) returns (VolumeCommitResponse);
|
2886
|
+
rpc VolumeCopyFiles(VolumeCopyFilesRequest) returns (google.protobuf.Empty);
|
2134
2887
|
rpc VolumeDelete(VolumeDeleteRequest) returns (google.protobuf.Empty);
|
2135
2888
|
rpc VolumeGetFile(VolumeGetFileRequest) returns (VolumeGetFileResponse);
|
2889
|
+
rpc VolumeGetOrCreate(VolumeGetOrCreateRequest) returns (VolumeGetOrCreateResponse);
|
2890
|
+
rpc VolumeHeartbeat(VolumeHeartbeatRequest) returns (google.protobuf.Empty);
|
2136
2891
|
rpc VolumeList(VolumeListRequest) returns (VolumeListResponse);
|
2137
2892
|
rpc VolumeListFiles(VolumeListFilesRequest) returns (stream VolumeListFilesResponse);
|
2138
2893
|
rpc VolumePutFiles(VolumePutFilesRequest) returns (google.protobuf.Empty);
|
2139
2894
|
rpc VolumeReload(VolumeReloadRequest) returns (google.protobuf.Empty);
|
2140
2895
|
rpc VolumeRemoveFile(VolumeRemoveFileRequest) returns (google.protobuf.Empty);
|
2141
|
-
rpc
|
2896
|
+
rpc VolumeRename(VolumeRenameRequest) returns (google.protobuf.Empty);
|
2142
2897
|
|
2143
2898
|
// Workspaces
|
2144
2899
|
rpc WorkspaceNameLookup(google.protobuf.Empty) returns (WorkspaceNameLookupResponse);
|