sequence-base 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. sequence_base/__init__.py +134 -0
  2. sequence_base/auth.py +35 -0
  3. sequence_base/codec/__init__.py +25 -0
  4. sequence_base/codec/image.py +136 -0
  5. sequence_base/codec/resize.py +147 -0
  6. sequence_base/constants/__init__.py +0 -0
  7. sequence_base/constants/env.py +14 -0
  8. sequence_base/constants/headers.py +5 -0
  9. sequence_base/constants/version.py +9 -0
  10. sequence_base/contract/__init__.py +111 -0
  11. sequence_base/contract/accounts.py +93 -0
  12. sequence_base/contract/act.py +89 -0
  13. sequence_base/contract/benchmarks.py +130 -0
  14. sequence_base/contract/connect.py +53 -0
  15. sequence_base/contract/deployments.py +197 -0
  16. sequence_base/contract/errors.py +45 -0
  17. sequence_base/contract/eval.py +201 -0
  18. sequence_base/contract/flags.py +92 -0
  19. sequence_base/contract/policy.py +172 -0
  20. sequence_base/errors/__init__.py +0 -0
  21. sequence_base/errors/transport.py +36 -0
  22. sequence_base/obs/__init__.py +0 -0
  23. sequence_base/obs/log.py +57 -0
  24. sequence_base/obs/rid.py +31 -0
  25. sequence_base/schema_export.py +238 -0
  26. sequence_base/schemas/ActionChunk.json +102 -0
  27. sequence_base/schemas/ActionContract.json +43 -0
  28. sequence_base/schemas/ActionStep.json +23 -0
  29. sequence_base/schemas/AdapterTransform.json +42 -0
  30. sequence_base/schemas/Autoscaler.json +43 -0
  31. sequence_base/schemas/BenchmarkRegisterRequest.json +302 -0
  32. sequence_base/schemas/BenchmarkSpec.json +401 -0
  33. sequence_base/schemas/BootstrapResponse.json +76 -0
  34. sequence_base/schemas/ClampInfo.json +27 -0
  35. sequence_base/schemas/CodeBundle.json +27 -0
  36. sequence_base/schemas/Concurrency.json +21 -0
  37. sequence_base/schemas/Conditions.json +59 -0
  38. sequence_base/schemas/ConnectRequest.json +16 -0
  39. sequence_base/schemas/ConnectResponse.json +81 -0
  40. sequence_base/schemas/DeploymentAccepted.json +22 -0
  41. sequence_base/schemas/DeploymentPolicy.json +101 -0
  42. sequence_base/schemas/DeploymentRequest.json +467 -0
  43. sequence_base/schemas/DeploymentStatusResponse.json +45 -0
  44. sequence_base/schemas/ErrorBody.json +32 -0
  45. sequence_base/schemas/Estimate.json +25 -0
  46. sequence_base/schemas/EvalDryRunResponse.json +41 -0
  47. sequence_base/schemas/EvalReport.json +179 -0
  48. sequence_base/schemas/EvalRequest.json +111 -0
  49. sequence_base/schemas/EvalResponse.json +88 -0
  50. sequence_base/schemas/ImageFrame.json +36 -0
  51. sequence_base/schemas/ImageSpec.json +123 -0
  52. sequence_base/schemas/ImageStepApt.json +18 -0
  53. sequence_base/schemas/ImageStepEnv.json +18 -0
  54. sequence_base/schemas/ImageStepRun.json +18 -0
  55. sequence_base/schemas/ImageStepUvPip.json +18 -0
  56. sequence_base/schemas/Lease.json +28 -0
  57. sequence_base/schemas/LossyTransform.json +21 -0
  58. sequence_base/schemas/MetricAgg.json +87 -0
  59. sequence_base/schemas/Observation.json +133 -0
  60. sequence_base/schemas/PolicyRegistration.json +438 -0
  61. sequence_base/schemas/PolicySpec.json +346 -0
  62. sequence_base/schemas/Proprioception.json +67 -0
  63. sequence_base/schemas/RenderSpec.json +22 -0
  64. sequence_base/schemas/Resources.json +29 -0
  65. sequence_base/schemas/RolloutResult.json +59 -0
  66. sequence_base/schemas/SecretCreateRequest.json +25 -0
  67. sequence_base/schemas/SecretInfo.json +44 -0
  68. sequence_base/schemas/SecretRef.json +16 -0
  69. sequence_base/schemas/SeqFlags.json +33 -0
  70. sequence_base/schemas/Step.json +68 -0
  71. sequence_base/schemas/SuiteAgg.json +26 -0
  72. sequence_base/schemas/TaskAgg.json +26 -0
  73. sequence_base/schemas/Timeouts.json +20 -0
  74. sequence_base/schemas/UsageReport.json +38 -0
  75. sequence_base/schemas/Variant.json +24 -0
  76. sequence_base/schemas/VolumeAttach.json +26 -0
  77. sequence_base/schemas/VolumeMount.json +21 -0
  78. sequence_base/schemas/VolumeRef.json +28 -0
  79. sequence_base/schemas/WarmingError.json +50 -0
  80. sequence_base/telemetry/__init__.py +13 -0
  81. sequence_base/telemetry/events.py +101 -0
  82. sequence_base-0.3.0.dist-info/METADATA +12 -0
  83. sequence_base-0.3.0.dist-info/RECORD +84 -0
  84. sequence_base-0.3.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,302 @@
1
+ {
2
+ "$defs": {
3
+ "Conditions": {
4
+ "additionalProperties": false,
5
+ "description": "The eval matrix — structured, not a bare dict. `tasks` and `seeds` required; `variants` optional.",
6
+ "properties": {
7
+ "seeds": {
8
+ "items": {
9
+ "type": "integer"
10
+ },
11
+ "title": "Seeds",
12
+ "type": "array"
13
+ },
14
+ "tasks": {
15
+ "items": {
16
+ "type": "string"
17
+ },
18
+ "title": "Tasks",
19
+ "type": "array"
20
+ },
21
+ "variants": {
22
+ "items": {
23
+ "$ref": "#/$defs/Variant"
24
+ },
25
+ "title": "Variants",
26
+ "type": "array"
27
+ }
28
+ },
29
+ "required": [
30
+ "tasks",
31
+ "seeds"
32
+ ],
33
+ "title": "Conditions",
34
+ "type": "object"
35
+ },
36
+ "ImageSpec": {
37
+ "additionalProperties": false,
38
+ "description": "Declarative image (gateway builds it via Cloud Build) — = Modal `Image` message. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string (S2 goal 4), so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the four-variant union above\n(a bare list[dict] is refused), extending whichever base was chosen.",
39
+ "properties": {
40
+ "base": {
41
+ "anyOf": [
42
+ {
43
+ "type": "string"
44
+ },
45
+ {
46
+ "type": "null"
47
+ }
48
+ ],
49
+ "default": null,
50
+ "title": "Base"
51
+ },
52
+ "dockerfile": {
53
+ "anyOf": [
54
+ {
55
+ "type": "string"
56
+ },
57
+ {
58
+ "type": "null"
59
+ }
60
+ ],
61
+ "default": null,
62
+ "title": "Dockerfile"
63
+ },
64
+ "steps": {
65
+ "items": {
66
+ "anyOf": [
67
+ {
68
+ "$ref": "#/$defs/ImageStepUvPip"
69
+ },
70
+ {
71
+ "$ref": "#/$defs/ImageStepApt"
72
+ },
73
+ {
74
+ "$ref": "#/$defs/ImageStepEnv"
75
+ },
76
+ {
77
+ "$ref": "#/$defs/ImageStepRun"
78
+ }
79
+ ]
80
+ },
81
+ "title": "Steps",
82
+ "type": "array"
83
+ }
84
+ },
85
+ "title": "ImageSpec",
86
+ "type": "object"
87
+ },
88
+ "ImageStepApt": {
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "apt_install": {
92
+ "items": {
93
+ "type": "string"
94
+ },
95
+ "title": "Apt Install",
96
+ "type": "array"
97
+ }
98
+ },
99
+ "required": [
100
+ "apt_install"
101
+ ],
102
+ "title": "ImageStepApt",
103
+ "type": "object"
104
+ },
105
+ "ImageStepEnv": {
106
+ "additionalProperties": false,
107
+ "properties": {
108
+ "env": {
109
+ "additionalProperties": {
110
+ "type": "string"
111
+ },
112
+ "title": "Env",
113
+ "type": "object"
114
+ }
115
+ },
116
+ "required": [
117
+ "env"
118
+ ],
119
+ "title": "ImageStepEnv",
120
+ "type": "object"
121
+ },
122
+ "ImageStepRun": {
123
+ "additionalProperties": false,
124
+ "properties": {
125
+ "run_commands": {
126
+ "items": {
127
+ "type": "string"
128
+ },
129
+ "title": "Run Commands",
130
+ "type": "array"
131
+ }
132
+ },
133
+ "required": [
134
+ "run_commands"
135
+ ],
136
+ "title": "ImageStepRun",
137
+ "type": "object"
138
+ },
139
+ "ImageStepUvPip": {
140
+ "additionalProperties": false,
141
+ "properties": {
142
+ "uv_pip_install": {
143
+ "items": {
144
+ "type": "string"
145
+ },
146
+ "title": "Uv Pip Install",
147
+ "type": "array"
148
+ }
149
+ },
150
+ "required": [
151
+ "uv_pip_install"
152
+ ],
153
+ "title": "ImageStepUvPip",
154
+ "type": "object"
155
+ },
156
+ "RenderSpec": {
157
+ "additionalProperties": false,
158
+ "description": "a.k.a. `seq.Record` — declares the mp4 the platform records (money-shot is a platform tool, not user\nglue). `camera` picks which camera stream to pull frames from; `fps` is the output frame rate. Used two\nways: as `BenchmarkSpec.render` (record the whole eval) and as `Step.record` (a per-frame hint).",
159
+ "properties": {
160
+ "camera": {
161
+ "description": "Which camera to pull frames from, e.g. 'wrist' / 'agentview'",
162
+ "title": "Camera",
163
+ "type": "string"
164
+ },
165
+ "fps": {
166
+ "default": 30,
167
+ "title": "Fps",
168
+ "type": "integer"
169
+ }
170
+ },
171
+ "required": [
172
+ "camera"
173
+ ],
174
+ "title": "RenderSpec",
175
+ "type": "object"
176
+ },
177
+ "Variant": {
178
+ "additionalProperties": false,
179
+ "description": "One structured variant axis of the eval matrix (e.g. axis=\"lighting\", values=[\"day\",\"night\"]).",
180
+ "properties": {
181
+ "axis": {
182
+ "title": "Axis",
183
+ "type": "string"
184
+ },
185
+ "values": {
186
+ "items": {
187
+ "type": "string"
188
+ },
189
+ "title": "Values",
190
+ "type": "array"
191
+ }
192
+ },
193
+ "required": [
194
+ "axis",
195
+ "values"
196
+ ],
197
+ "title": "Variant",
198
+ "type": "object"
199
+ },
200
+ "VolumeRef": {
201
+ "additionalProperties": false,
202
+ "description": "PolicySpec.volumes value — at least a `uri`; a `mount` may pin the container path.",
203
+ "properties": {
204
+ "mount": {
205
+ "anyOf": [
206
+ {
207
+ "type": "string"
208
+ },
209
+ {
210
+ "type": "null"
211
+ }
212
+ ],
213
+ "default": null,
214
+ "title": "Mount"
215
+ },
216
+ "uri": {
217
+ "title": "Uri",
218
+ "type": "string"
219
+ }
220
+ },
221
+ "required": [
222
+ "uri"
223
+ ],
224
+ "title": "VolumeRef",
225
+ "type": "object"
226
+ }
227
+ },
228
+ "additionalProperties": false,
229
+ "description": "POST /v1/benchmarks — register body, same types as the spec (ImageSpec / Conditions / VolumeRef /\nRenderSpec). Carries assets / render / cpu / memory_gb / max_steps so the gateway can build the image,\nprovision the `assets` Volume, and register in one call.",
230
+ "properties": {
231
+ "assets": {
232
+ "items": {
233
+ "$ref": "#/$defs/VolumeRef"
234
+ },
235
+ "title": "Assets",
236
+ "type": "array"
237
+ },
238
+ "conditions": {
239
+ "$ref": "#/$defs/Conditions"
240
+ },
241
+ "cpu": {
242
+ "anyOf": [
243
+ {
244
+ "type": "integer"
245
+ },
246
+ {
247
+ "type": "null"
248
+ }
249
+ ],
250
+ "default": null,
251
+ "title": "Cpu"
252
+ },
253
+ "handler_ref": {
254
+ "title": "Handler Ref",
255
+ "type": "string"
256
+ },
257
+ "image": {
258
+ "$ref": "#/$defs/ImageSpec"
259
+ },
260
+ "max_steps": {
261
+ "title": "Max Steps",
262
+ "type": "integer"
263
+ },
264
+ "memory_gb": {
265
+ "anyOf": [
266
+ {
267
+ "type": "integer"
268
+ },
269
+ {
270
+ "type": "null"
271
+ }
272
+ ],
273
+ "default": null,
274
+ "title": "Memory Gb"
275
+ },
276
+ "name": {
277
+ "title": "Name",
278
+ "type": "string"
279
+ },
280
+ "render": {
281
+ "anyOf": [
282
+ {
283
+ "$ref": "#/$defs/RenderSpec"
284
+ },
285
+ {
286
+ "type": "null"
287
+ }
288
+ ],
289
+ "default": null
290
+ }
291
+ },
292
+ "required": [
293
+ "name",
294
+ "image",
295
+ "conditions",
296
+ "max_steps",
297
+ "handler_ref"
298
+ ],
299
+ "title": "BenchmarkRegisterRequest",
300
+ "type": "object",
301
+ "x-contract-version": "0.4.1"
302
+ }
@@ -0,0 +1,401 @@
1
+ {
2
+ "$defs": {
3
+ "Conditions": {
4
+ "additionalProperties": false,
5
+ "description": "The eval matrix — structured, not a bare dict. `tasks` and `seeds` required; `variants` optional.",
6
+ "properties": {
7
+ "seeds": {
8
+ "items": {
9
+ "type": "integer"
10
+ },
11
+ "title": "Seeds",
12
+ "type": "array"
13
+ },
14
+ "tasks": {
15
+ "items": {
16
+ "type": "string"
17
+ },
18
+ "title": "Tasks",
19
+ "type": "array"
20
+ },
21
+ "variants": {
22
+ "items": {
23
+ "$ref": "#/$defs/Variant"
24
+ },
25
+ "title": "Variants",
26
+ "type": "array"
27
+ }
28
+ },
29
+ "required": [
30
+ "tasks",
31
+ "seeds"
32
+ ],
33
+ "title": "Conditions",
34
+ "type": "object"
35
+ },
36
+ "ImageSpec": {
37
+ "additionalProperties": false,
38
+ "description": "Declarative image (gateway builds it via Cloud Build) — = Modal `Image` message. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string (S2 goal 4), so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the four-variant union above\n(a bare list[dict] is refused), extending whichever base was chosen.",
39
+ "properties": {
40
+ "base": {
41
+ "anyOf": [
42
+ {
43
+ "type": "string"
44
+ },
45
+ {
46
+ "type": "null"
47
+ }
48
+ ],
49
+ "default": null,
50
+ "title": "Base"
51
+ },
52
+ "dockerfile": {
53
+ "anyOf": [
54
+ {
55
+ "type": "string"
56
+ },
57
+ {
58
+ "type": "null"
59
+ }
60
+ ],
61
+ "default": null,
62
+ "title": "Dockerfile"
63
+ },
64
+ "steps": {
65
+ "items": {
66
+ "anyOf": [
67
+ {
68
+ "$ref": "#/$defs/ImageStepUvPip"
69
+ },
70
+ {
71
+ "$ref": "#/$defs/ImageStepApt"
72
+ },
73
+ {
74
+ "$ref": "#/$defs/ImageStepEnv"
75
+ },
76
+ {
77
+ "$ref": "#/$defs/ImageStepRun"
78
+ }
79
+ ]
80
+ },
81
+ "title": "Steps",
82
+ "type": "array"
83
+ }
84
+ },
85
+ "title": "ImageSpec",
86
+ "type": "object"
87
+ },
88
+ "ImageStepApt": {
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "apt_install": {
92
+ "items": {
93
+ "type": "string"
94
+ },
95
+ "title": "Apt Install",
96
+ "type": "array"
97
+ }
98
+ },
99
+ "required": [
100
+ "apt_install"
101
+ ],
102
+ "title": "ImageStepApt",
103
+ "type": "object"
104
+ },
105
+ "ImageStepEnv": {
106
+ "additionalProperties": false,
107
+ "properties": {
108
+ "env": {
109
+ "additionalProperties": {
110
+ "type": "string"
111
+ },
112
+ "title": "Env",
113
+ "type": "object"
114
+ }
115
+ },
116
+ "required": [
117
+ "env"
118
+ ],
119
+ "title": "ImageStepEnv",
120
+ "type": "object"
121
+ },
122
+ "ImageStepRun": {
123
+ "additionalProperties": false,
124
+ "properties": {
125
+ "run_commands": {
126
+ "items": {
127
+ "type": "string"
128
+ },
129
+ "title": "Run Commands",
130
+ "type": "array"
131
+ }
132
+ },
133
+ "required": [
134
+ "run_commands"
135
+ ],
136
+ "title": "ImageStepRun",
137
+ "type": "object"
138
+ },
139
+ "ImageStepUvPip": {
140
+ "additionalProperties": false,
141
+ "properties": {
142
+ "uv_pip_install": {
143
+ "items": {
144
+ "type": "string"
145
+ },
146
+ "title": "Uv Pip Install",
147
+ "type": "array"
148
+ }
149
+ },
150
+ "required": [
151
+ "uv_pip_install"
152
+ ],
153
+ "title": "ImageStepUvPip",
154
+ "type": "object"
155
+ },
156
+ "RenderSpec": {
157
+ "additionalProperties": false,
158
+ "description": "a.k.a. `seq.Record` — declares the mp4 the platform records (money-shot is a platform tool, not user\nglue). `camera` picks which camera stream to pull frames from; `fps` is the output frame rate. Used two\nways: as `BenchmarkSpec.render` (record the whole eval) and as `Step.record` (a per-frame hint).",
159
+ "properties": {
160
+ "camera": {
161
+ "description": "Which camera to pull frames from, e.g. 'wrist' / 'agentview'",
162
+ "title": "Camera",
163
+ "type": "string"
164
+ },
165
+ "fps": {
166
+ "default": 30,
167
+ "title": "Fps",
168
+ "type": "integer"
169
+ }
170
+ },
171
+ "required": [
172
+ "camera"
173
+ ],
174
+ "title": "RenderSpec",
175
+ "type": "object"
176
+ },
177
+ "SecretRef": {
178
+ "additionalProperties": false,
179
+ "description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\nvalue lives in Secret Manager and is injected at worker bootstrap. Never carries a value.",
180
+ "properties": {
181
+ "name": {
182
+ "title": "Name",
183
+ "type": "string"
184
+ }
185
+ },
186
+ "required": [
187
+ "name"
188
+ ],
189
+ "title": "SecretRef",
190
+ "type": "object"
191
+ },
192
+ "SeqFlags": {
193
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
194
+ "description": "Lifecycle bitmask (IntFlag). One bit per lifecycle entrypoint.",
195
+ "enum": [
196
+ 1,
197
+ 2,
198
+ 4,
199
+ 8,
200
+ 16,
201
+ 1024,
202
+ 4096,
203
+ 8192,
204
+ 16384,
205
+ 32768,
206
+ 65536
207
+ ],
208
+ "title": "SeqFlags",
209
+ "type": "integer",
210
+ "x-contract-version": "0.4.1",
211
+ "x-flag-names": {
212
+ "CHECK": 65536,
213
+ "INFER": 16,
214
+ "LOAD": 2,
215
+ "ON_EPISODE": 1024,
216
+ "PLAN": 4,
217
+ "RESET": 32768,
218
+ "ROLLOUT": 8192,
219
+ "SCORE": 16384,
220
+ "SETUP": 4096,
221
+ "SHUTDOWN": 8,
222
+ "WARMUP": 1
223
+ }
224
+ },
225
+ "Variant": {
226
+ "additionalProperties": false,
227
+ "description": "One structured variant axis of the eval matrix (e.g. axis=\"lighting\", values=[\"day\",\"night\"]).",
228
+ "properties": {
229
+ "axis": {
230
+ "title": "Axis",
231
+ "type": "string"
232
+ },
233
+ "values": {
234
+ "items": {
235
+ "type": "string"
236
+ },
237
+ "title": "Values",
238
+ "type": "array"
239
+ }
240
+ },
241
+ "required": [
242
+ "axis",
243
+ "values"
244
+ ],
245
+ "title": "Variant",
246
+ "type": "object"
247
+ },
248
+ "VolumeRef": {
249
+ "additionalProperties": false,
250
+ "description": "PolicySpec.volumes value — at least a `uri`; a `mount` may pin the container path.",
251
+ "properties": {
252
+ "mount": {
253
+ "anyOf": [
254
+ {
255
+ "type": "string"
256
+ },
257
+ {
258
+ "type": "null"
259
+ }
260
+ ],
261
+ "default": null,
262
+ "title": "Mount"
263
+ },
264
+ "uri": {
265
+ "title": "Uri",
266
+ "type": "string"
267
+ }
268
+ },
269
+ "required": [
270
+ "uri"
271
+ ],
272
+ "title": "VolumeRef",
273
+ "type": "object"
274
+ }
275
+ },
276
+ "additionalProperties": false,
277
+ "description": "What `@seq.benchmark(...)` accrues — symmetric to PolicySpec. `secrets` are by-name only (accounts\n⑦: a benchmark also references secrets by name). `assets` are versioned scene/mesh/URDF/MJCF/USD volumes\nthe worker mounts at /assets (reusing S2's Volume mechanism). `render` optionally declares the mp4.\n`max_steps` is the platform SAFETY cap (cost backstop, records `truncated` — NOT semantic termination;\n`done` is decided by @seq.check). `bindings` covers SETUP / RESET / CHECK / SCORE (ROLLOUT is deprecated\nand must not appear).",
278
+ "properties": {
279
+ "assets": {
280
+ "items": {
281
+ "$ref": "#/$defs/VolumeRef"
282
+ },
283
+ "title": "Assets",
284
+ "type": "array"
285
+ },
286
+ "bindings": {
287
+ "additionalProperties": {
288
+ "type": "string"
289
+ },
290
+ "description": "SETUP / RESET / CHECK / SCORE → method name",
291
+ "propertyNames": {
292
+ "enum": [
293
+ "1",
294
+ "2",
295
+ "4",
296
+ "8",
297
+ "16",
298
+ "1024",
299
+ "4096",
300
+ "8192",
301
+ "16384",
302
+ "32768",
303
+ "65536"
304
+ ],
305
+ "type": "string"
306
+ },
307
+ "title": "Bindings",
308
+ "type": "object"
309
+ },
310
+ "conditions": {
311
+ "$ref": "#/$defs/Conditions"
312
+ },
313
+ "cpu": {
314
+ "anyOf": [
315
+ {
316
+ "type": "integer"
317
+ },
318
+ {
319
+ "type": "null"
320
+ }
321
+ ],
322
+ "default": null,
323
+ "title": "Cpu"
324
+ },
325
+ "gpu": {
326
+ "anyOf": [
327
+ {
328
+ "type": "string"
329
+ },
330
+ {
331
+ "items": {
332
+ "type": "string"
333
+ },
334
+ "type": "array"
335
+ },
336
+ {
337
+ "type": "null"
338
+ }
339
+ ],
340
+ "default": null,
341
+ "title": "Gpu"
342
+ },
343
+ "handler_ref": {
344
+ "title": "Handler Ref",
345
+ "type": "string"
346
+ },
347
+ "image": {
348
+ "$ref": "#/$defs/ImageSpec"
349
+ },
350
+ "max_steps": {
351
+ "description": "Platform safety cap; truncates and records truncated",
352
+ "title": "Max Steps",
353
+ "type": "integer"
354
+ },
355
+ "memory_gb": {
356
+ "anyOf": [
357
+ {
358
+ "type": "integer"
359
+ },
360
+ {
361
+ "type": "null"
362
+ }
363
+ ],
364
+ "default": null,
365
+ "title": "Memory Gb"
366
+ },
367
+ "name": {
368
+ "title": "Name",
369
+ "type": "string"
370
+ },
371
+ "render": {
372
+ "anyOf": [
373
+ {
374
+ "$ref": "#/$defs/RenderSpec"
375
+ },
376
+ {
377
+ "type": "null"
378
+ }
379
+ ],
380
+ "default": null
381
+ },
382
+ "secrets": {
383
+ "items": {
384
+ "$ref": "#/$defs/SecretRef"
385
+ },
386
+ "title": "Secrets",
387
+ "type": "array"
388
+ }
389
+ },
390
+ "required": [
391
+ "name",
392
+ "image",
393
+ "conditions",
394
+ "max_steps",
395
+ "handler_ref",
396
+ "bindings"
397
+ ],
398
+ "title": "BenchmarkSpec",
399
+ "type": "object",
400
+ "x-contract-version": "0.4.1"
401
+ }