sequence-base 0.3.8__tar.gz → 0.3.9__tar.gz

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 (164) hide show
  1. {sequence_base-0.3.8 → sequence_base-0.3.9}/PKG-INFO +1 -1
  2. {sequence_base-0.3.8 → sequence_base-0.3.9}/pyproject.toml +1 -1
  3. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/constants/version.py +2 -1
  4. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/benchmarks.py +2 -0
  5. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/deployments.py +6 -0
  6. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/policy.py +6 -0
  7. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ActionChunk.json +1 -1
  8. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ActionContract.json +1 -1
  9. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ActionStep.json +1 -1
  10. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/AdapterTransform.json +1 -1
  11. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Autoscaler.json +1 -1
  12. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  13. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/BenchmarkRegisterRequest.json +40 -1
  14. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/BenchmarkSpec.json +30 -2
  15. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  16. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/BootstrapResponse.json +1 -1
  17. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Camera.json +1 -1
  18. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ClampInfo.json +1 -1
  19. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/CodeBundle.json +1 -1
  20. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Concurrency.json +1 -1
  21. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Conditions.json +1 -1
  22. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ConnectRequest.json +1 -1
  23. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ConnectResponse.json +1 -1
  24. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  25. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/DeploymentPolicy.json +1 -1
  26. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/DeploymentRequest.json +53 -1
  27. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  28. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Embodiment.json +1 -1
  29. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ErrorBody.json +1 -1
  30. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Estimate.json +1 -1
  31. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  32. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/EvalReport.json +1 -1
  33. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/EvalRequest.json +1 -1
  34. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/EvalResponse.json +1 -1
  35. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ImageFrame.json +1 -1
  36. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ImageSpec.json +44 -1
  37. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ImageStepApt.json +1 -1
  38. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ImageStepEnv.json +1 -1
  39. sequence_base-0.3.9/sequence_base/schemas/ImageStepRun.json +50 -0
  40. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  41. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/InferParam.json +1 -1
  42. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Lease.json +1 -1
  43. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/LossyTransform.json +1 -1
  44. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/MetricAgg.json +1 -1
  45. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Observation.json +1 -1
  46. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/ObservationContract.json +1 -1
  47. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/PolicyRegistration.json +30 -2
  48. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/PolicySpec.json +29 -1
  49. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Proprioception.json +1 -1
  50. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/RenderSpec.json +1 -1
  51. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Resources.json +14 -1
  52. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/RolloutResult.json +1 -1
  53. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  54. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/SecretInfo.json +1 -1
  55. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/SecretRef.json +1 -1
  56. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/SeqFlags.json +1 -1
  57. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Step.json +1 -1
  58. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/SuiteAgg.json +1 -1
  59. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/TaskAgg.json +1 -1
  60. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Timeouts.json +1 -1
  61. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/UploadTarget.json +1 -1
  62. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/UsageReport.json +1 -1
  63. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/Variant.json +1 -1
  64. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeAttach.json +1 -1
  65. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeFile.json +1 -1
  66. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeInfo.json +1 -1
  67. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeMount.json +1 -1
  68. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeRef.json +1 -1
  69. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  70. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  71. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schemas/WarmingError.json +1 -1
  72. {sequence_base-0.3.8 → sequence_base-0.3.9}/tests/test_contracts.py +24 -0
  73. sequence_base-0.3.8/sequence_base/schemas/ImageStepRun.json +0 -18
  74. {sequence_base-0.3.8 → sequence_base-0.3.9}/.github/workflows/ci.yml +0 -0
  75. {sequence_base-0.3.8 → sequence_base-0.3.9}/.gitignore +0 -0
  76. {sequence_base-0.3.8 → sequence_base-0.3.9}/README.md +0 -0
  77. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/README.md +0 -0
  78. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/REVIEW.md +0 -0
  79. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/START.md +0 -0
  80. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/accounts.md +0 -0
  81. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/billing.md +0 -0
  82. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/build/BUILD_LOG.md +0 -0
  83. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/build/goal_sha256.json +0 -0
  84. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/build/gs-build-wave.js +0 -0
  85. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/build/gs-spec-goals.js +0 -0
  86. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/container.md +0 -0
  87. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/contracts.md +0 -0
  88. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/deploy/PLAN.md +0 -0
  89. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/deploy/PROD_REORG.md +0 -0
  90. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/deploy/SCHEMA_COMPAT.md +0 -0
  91. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/deploy/archive/sequences-gw.genseq-506918.20261001.yaml +0 -0
  92. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/eval.md +0 -0
  93. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/gateway.md +0 -0
  94. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/A1.yaml +0 -0
  95. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/A2.yaml +0 -0
  96. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/A3.yaml +0 -0
  97. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/C1.yaml +0 -0
  98. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/C2.yaml +0 -0
  99. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/C3.yaml +0 -0
  100. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/C4.yaml +0 -0
  101. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/C5.yaml +0 -0
  102. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/G1.yaml +0 -0
  103. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/G2.yaml +0 -0
  104. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/G3.yaml +0 -0
  105. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/G4.yaml +0 -0
  106. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/G5.yaml +0 -0
  107. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/O1.yaml +0 -0
  108. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/O2.yaml +0 -0
  109. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/O3.yaml +0 -0
  110. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/O4.yaml +0 -0
  111. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/O5.yaml +0 -0
  112. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/R1.yaml +0 -0
  113. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/R2.yaml +0 -0
  114. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/R3.yaml +0 -0
  115. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S1.yaml +0 -0
  116. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S2.yaml +0 -0
  117. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S3.yaml +0 -0
  118. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S4.yaml +0 -0
  119. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S5.yaml +0 -0
  120. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/S6.yaml +0 -0
  121. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/V1-storage.md +0 -0
  122. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/V2-user-quotas.md +0 -0
  123. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/W0.1.yaml +0 -0
  124. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/goals/W0.2.yaml +0 -0
  125. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/README.md +0 -0
  126. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/architecture.md +0 -0
  127. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/connect.md +0 -0
  128. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/cost.md +0 -0
  129. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/custom-domain.md +0 -0
  130. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/debugging.md +0 -0
  131. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/goals.md +0 -0
  132. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/limits.md +0 -0
  133. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/plan.md +0 -0
  134. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/white-label.md +0 -0
  135. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/modal/wiring.md +0 -0
  136. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/observability.md +0 -0
  137. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/references.md +0 -0
  138. {sequence_base-0.3.8 → sequence_base-0.3.9}/docs/platform/sdk.md +0 -0
  139. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/__init__.py +0 -0
  140. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/auth.py +0 -0
  141. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/codec/__init__.py +0 -0
  142. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/codec/image.py +0 -0
  143. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/codec/resize.py +0 -0
  144. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/constants/__init__.py +0 -0
  145. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/constants/env.py +0 -0
  146. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/constants/headers.py +0 -0
  147. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/__init__.py +0 -0
  148. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/accounts.py +0 -0
  149. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/act.py +0 -0
  150. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/connect.py +0 -0
  151. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/errors.py +0 -0
  152. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/eval.py +0 -0
  153. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/flags.py +0 -0
  154. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/io.py +0 -0
  155. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/contract/volumes.py +0 -0
  156. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/errors/__init__.py +0 -0
  157. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/errors/transport.py +0 -0
  158. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/obs/__init__.py +0 -0
  159. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/obs/log.py +0 -0
  160. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/obs/rid.py +0 -0
  161. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/schema_export.py +0 -0
  162. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/telemetry/__init__.py +0 -0
  163. {sequence_base-0.3.8 → sequence_base-0.3.9}/sequence_base/telemetry/events.py +0 -0
  164. {sequence_base-0.3.8 → sequence_base-0.3.9}/tests/test_codec_roundtrip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sequence-base
3
- Version: 0.3.8
3
+ Version: 0.3.9
4
4
  Summary: Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness.
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: pydantic>=2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.3.8"
3
+ version = "0.3.9"
4
4
  description = "Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = ["pydantic>=2.0"]
@@ -6,7 +6,8 @@ PROTOCOL_VERSION = "1"
6
6
  # across deployments / repos can tell which version of a shape it is validating against. MUST change
7
7
  # whenever any shared wire shape changes (a field added / removed / retyped) — that is what makes
8
8
  # contract evolution mechanically detectable instead of eyeballed. Bump on any shape change.
9
- CONTRACT_VERSION = "0.4.7" # 0.4.6 -> 0.4.7: ActionContract.bounds / max_delta / on_violation (action limits)
9
+ CONTRACT_VERSION = "0.4.8" # 0.4.7 -> 0.4.8: ImageSpec.python, ImageStepRun.secrets, Resources.region, DeploymentRequest/BenchmarkRegisterRequest.image_context
10
+ # previous: 0.4.7 # 0.4.6 -> 0.4.7: ActionContract.bounds / max_delta / on_violation (action limits)
10
11
  # previous: 0.4.6 # 0.4.5 -> 0.4.6: InferParam + DeploymentPolicy.params; EvalRequest.params / variants / record; BenchmarkRegisterRequest.gpu
11
12
  # previous: 0.4.5 # 0.4.4 -> 0.4.5: BenchmarkRegisterRequest.condition_list / timeout_s / default_adapter_ref (+ BenchmarkConditionSpec); EvalRequest.tasks / max_usd / rerun_of
12
13
  # previous: 0.4.4 # 0.4.3 -> 0.4.4: BenchmarkRegisterRequest.secrets (by name) + score (has @seq.score)
@@ -168,6 +168,8 @@ class BenchmarkRegisterRequest(BaseModel):
168
168
  default_adapter_ref: str | None = None
169
169
  # A GPU for each sim sandbox (a renderer or a GPU physics engine): a card name the platform offers. None: CPU.
170
170
  gpu: str | None = Field(default=None, max_length=32)
171
+ # The Dockerfile's build context, as for a deployment.
172
+ image_context: CodeBundle | None = None
171
173
 
172
174
 
173
175
  class BenchmarkStatusResponse(BaseModel):
@@ -53,6 +53,9 @@ class Resources(BaseModel):
53
53
  gpu: list[str]
54
54
  cpu: int
55
55
  memory_gb: int
56
+ # Where the workers run (near the robots): one of the regions the platform offers. None: the platform picks.
57
+ # {gs-plans/customization/policy.md "区域"}
58
+ region: str | None = Field(default=None, max_length=32)
56
59
 
57
60
 
58
61
  class Autoscaler(BaseModel):
@@ -190,6 +193,9 @@ class DeploymentRequest(BaseModel):
190
193
  # The handler's source. None only when `handler_ref` is importable from the image itself (a package the
191
194
  # ImageSpec installs); otherwise the worker has nothing to import and the build fails.
192
195
  code: CodeBundle | None = None
196
+ # The Dockerfile's build context (the directory its COPY / ADD read), shipped like the code. Only with
197
+ # image.dockerfile. {gs-plans/customization/policy.md "DOCKERFILE 的 BUILD CONTEXT"}
198
+ image_context: CodeBundle | None = None
193
199
  # Non-weights volumes the policy declares (goal 7). List, not dict, so a mount is never duplicated as
194
200
  # both key and value; the gateway only stores the dump, no consumer needs dict lookup.
195
201
  volumes: list[VolumeAttach] = Field(default_factory=list)
@@ -62,6 +62,9 @@ class ImageStepEnv(BaseModel):
62
62
  class ImageStepRun(BaseModel):
63
63
  model_config = ConfigDict(extra="forbid")
64
64
  run_commands: list[str]
65
+ # Credentials only these commands see while the image builds (a private git or package index), by name; they
66
+ # are not left in any image layer. {gs-plans/customization/policy.md "私有依赖 … BUILD SECRETS"}
67
+ secrets: list[SecretRef] | None = None
65
68
 
66
69
 
67
70
  ImageStep = ImageStepUvPip | ImageStepApt | ImageStepEnv | ImageStepRun
@@ -79,6 +82,9 @@ class ImageSpec(BaseModel):
79
82
  base: str | None = None
80
83
  dockerfile: str | None = None
81
84
  steps: list[ImageStep] = Field(default_factory=list)
85
+ # The Python the image runs: "3.11" … "3.13" (the worker runs on 3.11 or later), or "image" to use the one the
86
+ # base image already has. None: the platform's default (3.11). {gs-plans/customization/policy.md "PYTHON 版本"}
87
+ python: str | None = Field(default=None, pattern=r"^(3\.(11|12|13)|image)$")
82
88
 
83
89
  @model_validator(mode="after")
84
90
  def _base_xor_dockerfile(self) -> "ImageSpec":
@@ -98,5 +98,5 @@
98
98
  ],
99
99
  "title": "ActionChunk",
100
100
  "type": "object",
101
- "x-contract-version": "0.4.7"
101
+ "x-contract-version": "0.4.8"
102
102
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionContract",
101
101
  "type": "object",
102
- "x-contract-version": "0.4.7"
102
+ "x-contract-version": "0.4.8"
103
103
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.7"
22
+ "x-contract-version": "0.4.8"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.7"
41
+ "x-contract-version": "0.4.8"
42
42
  }
@@ -39,5 +39,5 @@
39
39
  },
40
40
  "title": "Autoscaler",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.7"
42
+ "x-contract-version": "0.4.8"
43
43
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.7"
65
+ "x-contract-version": "0.4.8"
66
66
  }
@@ -252,6 +252,19 @@
252
252
  "default": null,
253
253
  "title": "Dockerfile"
254
254
  },
255
+ "python": {
256
+ "anyOf": [
257
+ {
258
+ "pattern": "^(3\\.(11|12|13)|image)$",
259
+ "type": "string"
260
+ },
261
+ {
262
+ "type": "null"
263
+ }
264
+ ],
265
+ "default": null,
266
+ "title": "Python"
267
+ },
255
268
  "steps": {
256
269
  "items": {
257
270
  "anyOf": [
@@ -319,6 +332,21 @@
319
332
  },
320
333
  "title": "Run Commands",
321
334
  "type": "array"
335
+ },
336
+ "secrets": {
337
+ "anyOf": [
338
+ {
339
+ "items": {
340
+ "$ref": "#/$defs/SecretRef"
341
+ },
342
+ "type": "array"
343
+ },
344
+ {
345
+ "type": "null"
346
+ }
347
+ ],
348
+ "default": null,
349
+ "title": "Secrets"
322
350
  }
323
351
  },
324
352
  "required": [
@@ -526,6 +554,17 @@
526
554
  "image": {
527
555
  "$ref": "#/$defs/ImageSpec"
528
556
  },
557
+ "image_context": {
558
+ "anyOf": [
559
+ {
560
+ "$ref": "#/$defs/CodeBundle"
561
+ },
562
+ {
563
+ "type": "null"
564
+ }
565
+ ],
566
+ "default": null
567
+ },
529
568
  "max_steps": {
530
569
  "title": "Max Steps",
531
570
  "type": "integer"
@@ -599,5 +638,5 @@
599
638
  ],
600
639
  "title": "BenchmarkRegisterRequest",
601
640
  "type": "object",
602
- "x-contract-version": "0.4.7"
641
+ "x-contract-version": "0.4.8"
603
642
  }
@@ -61,6 +61,19 @@
61
61
  "default": null,
62
62
  "title": "Dockerfile"
63
63
  },
64
+ "python": {
65
+ "anyOf": [
66
+ {
67
+ "pattern": "^(3\\.(11|12|13)|image)$",
68
+ "type": "string"
69
+ },
70
+ {
71
+ "type": "null"
72
+ }
73
+ ],
74
+ "default": null,
75
+ "title": "Python"
76
+ },
64
77
  "steps": {
65
78
  "items": {
66
79
  "anyOf": [
@@ -128,6 +141,21 @@
128
141
  },
129
142
  "title": "Run Commands",
130
143
  "type": "array"
144
+ },
145
+ "secrets": {
146
+ "anyOf": [
147
+ {
148
+ "items": {
149
+ "$ref": "#/$defs/SecretRef"
150
+ },
151
+ "type": "array"
152
+ },
153
+ {
154
+ "type": "null"
155
+ }
156
+ ],
157
+ "default": null,
158
+ "title": "Secrets"
131
159
  }
132
160
  },
133
161
  "required": [
@@ -207,7 +235,7 @@
207
235
  ],
208
236
  "title": "SeqFlags",
209
237
  "type": "integer",
210
- "x-contract-version": "0.4.7",
238
+ "x-contract-version": "0.4.8",
211
239
  "x-flag-names": {
212
240
  "CHECK": 65536,
213
241
  "INFER": 16,
@@ -397,5 +425,5 @@
397
425
  ],
398
426
  "title": "BenchmarkSpec",
399
427
  "type": "object",
400
- "x-contract-version": "0.4.7"
428
+ "x-contract-version": "0.4.8"
401
429
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.7"
43
+ "x-contract-version": "0.4.8"
44
44
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "BootstrapResponse",
74
74
  "type": "object",
75
- "x-contract-version": "0.4.7"
75
+ "x-contract-version": "0.4.8"
76
76
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Camera",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.7"
24
+ "x-contract-version": "0.4.8"
25
25
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.7"
26
+ "x-contract-version": "0.4.8"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.7"
26
+ "x-contract-version": "0.4.8"
27
27
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "Concurrency",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.7"
20
+ "x-contract-version": "0.4.8"
21
21
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.7"
58
+ "x-contract-version": "0.4.8"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.7"
28
+ "x-contract-version": "0.4.8"
29
29
  }
@@ -281,5 +281,5 @@
281
281
  ],
282
282
  "title": "ConnectResponse",
283
283
  "type": "object",
284
- "x-contract-version": "0.4.7"
284
+ "x-contract-version": "0.4.8"
285
285
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.7"
21
+ "x-contract-version": "0.4.8"
22
22
  }
@@ -353,5 +353,5 @@
353
353
  ],
354
354
  "title": "DeploymentPolicy",
355
355
  "type": "object",
356
- "x-contract-version": "0.4.7"
356
+ "x-contract-version": "0.4.8"
357
357
  }
@@ -367,6 +367,19 @@
367
367
  "default": null,
368
368
  "title": "Dockerfile"
369
369
  },
370
+ "python": {
371
+ "anyOf": [
372
+ {
373
+ "pattern": "^(3\\.(11|12|13)|image)$",
374
+ "type": "string"
375
+ },
376
+ {
377
+ "type": "null"
378
+ }
379
+ ],
380
+ "default": null,
381
+ "title": "Python"
382
+ },
370
383
  "steps": {
371
384
  "items": {
372
385
  "anyOf": [
@@ -434,6 +447,21 @@
434
447
  },
435
448
  "title": "Run Commands",
436
449
  "type": "array"
450
+ },
451
+ "secrets": {
452
+ "anyOf": [
453
+ {
454
+ "items": {
455
+ "$ref": "#/$defs/SecretRef"
456
+ },
457
+ "type": "array"
458
+ },
459
+ {
460
+ "type": "null"
461
+ }
462
+ ],
463
+ "default": null,
464
+ "title": "Secrets"
437
465
  }
438
466
  },
439
467
  "required": [
@@ -565,6 +593,19 @@
565
593
  "memory_gb": {
566
594
  "title": "Memory Gb",
567
595
  "type": "integer"
596
+ },
597
+ "region": {
598
+ "anyOf": [
599
+ {
600
+ "maxLength": 32,
601
+ "type": "string"
602
+ },
603
+ {
604
+ "type": "null"
605
+ }
606
+ ],
607
+ "default": null,
608
+ "title": "Region"
568
609
  }
569
610
  },
570
611
  "required": [
@@ -678,6 +719,17 @@
678
719
  "image": {
679
720
  "$ref": "#/$defs/ImageSpec"
680
721
  },
722
+ "image_context": {
723
+ "anyOf": [
724
+ {
725
+ "$ref": "#/$defs/CodeBundle"
726
+ },
727
+ {
728
+ "type": "null"
729
+ }
730
+ ],
731
+ "default": null
732
+ },
681
733
  "name": {
682
734
  "title": "Name",
683
735
  "type": "string"
@@ -719,5 +771,5 @@
719
771
  ],
720
772
  "title": "DeploymentRequest",
721
773
  "type": "object",
722
- "x-contract-version": "0.4.7"
774
+ "x-contract-version": "0.4.8"
723
775
  }
@@ -41,5 +41,5 @@
41
41
  ],
42
42
  "title": "DeploymentStatusResponse",
43
43
  "type": "object",
44
- "x-contract-version": "0.4.7"
44
+ "x-contract-version": "0.4.8"
45
45
  }
@@ -199,5 +199,5 @@
199
199
  ],
200
200
  "title": "Embodiment",
201
201
  "type": "object",
202
- "x-contract-version": "0.4.7"
202
+ "x-contract-version": "0.4.8"
203
203
  }
@@ -28,5 +28,5 @@
28
28
  ],
29
29
  "title": "ErrorBody",
30
30
  "type": "object",
31
- "x-contract-version": "0.4.7"
31
+ "x-contract-version": "0.4.8"
32
32
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Estimate",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.7"
24
+ "x-contract-version": "0.4.8"
25
25
  }
@@ -37,5 +37,5 @@
37
37
  ],
38
38
  "title": "EvalDryRunResponse",
39
39
  "type": "object",
40
- "x-contract-version": "0.4.7"
40
+ "x-contract-version": "0.4.8"
41
41
  }
@@ -183,5 +183,5 @@
183
183
  ],
184
184
  "title": "EvalReport",
185
185
  "type": "object",
186
- "x-contract-version": "0.4.7"
186
+ "x-contract-version": "0.4.8"
187
187
  }
@@ -213,5 +213,5 @@
213
213
  ],
214
214
  "title": "EvalRequest",
215
215
  "type": "object",
216
- "x-contract-version": "0.4.7"
216
+ "x-contract-version": "0.4.8"
217
217
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "EvalResponse",
86
86
  "type": "object",
87
- "x-contract-version": "0.4.7"
87
+ "x-contract-version": "0.4.8"
88
88
  }
@@ -32,5 +32,5 @@
32
32
  ],
33
33
  "title": "ImageFrame",
34
34
  "type": "object",
35
- "x-contract-version": "0.4.7"
35
+ "x-contract-version": "0.4.8"
36
36
  }
@@ -43,6 +43,21 @@
43
43
  },
44
44
  "title": "Run Commands",
45
45
  "type": "array"
46
+ },
47
+ "secrets": {
48
+ "anyOf": [
49
+ {
50
+ "items": {
51
+ "$ref": "#/$defs/SecretRef"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Secrets"
46
61
  }
47
62
  },
48
63
  "required": [
@@ -67,6 +82,21 @@
67
82
  ],
68
83
  "title": "ImageStepUvPip",
69
84
  "type": "object"
85
+ },
86
+ "SecretRef": {
87
+ "additionalProperties": false,
88
+ "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.",
89
+ "properties": {
90
+ "name": {
91
+ "title": "Name",
92
+ "type": "string"
93
+ }
94
+ },
95
+ "required": [
96
+ "name"
97
+ ],
98
+ "title": "SecretRef",
99
+ "type": "object"
70
100
  }
71
101
  },
72
102
  "additionalProperties": false,
@@ -96,6 +126,19 @@
96
126
  "default": null,
97
127
  "title": "Dockerfile"
98
128
  },
129
+ "python": {
130
+ "anyOf": [
131
+ {
132
+ "pattern": "^(3\\.(11|12|13)|image)$",
133
+ "type": "string"
134
+ },
135
+ {
136
+ "type": "null"
137
+ }
138
+ ],
139
+ "default": null,
140
+ "title": "Python"
141
+ },
99
142
  "steps": {
100
143
  "items": {
101
144
  "anyOf": [
@@ -119,5 +162,5 @@
119
162
  },
120
163
  "title": "ImageSpec",
121
164
  "type": "object",
122
- "x-contract-version": "0.4.7"
165
+ "x-contract-version": "0.4.8"
123
166
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.7"
17
+ "x-contract-version": "0.4.8"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.7"
17
+ "x-contract-version": "0.4.8"
18
18
  }
@@ -0,0 +1,50 @@
1
+ {
2
+ "$defs": {
3
+ "SecretRef": {
4
+ "additionalProperties": false,
5
+ "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.",
6
+ "properties": {
7
+ "name": {
8
+ "title": "Name",
9
+ "type": "string"
10
+ }
11
+ },
12
+ "required": [
13
+ "name"
14
+ ],
15
+ "title": "SecretRef",
16
+ "type": "object"
17
+ }
18
+ },
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "run_commands": {
22
+ "items": {
23
+ "type": "string"
24
+ },
25
+ "title": "Run Commands",
26
+ "type": "array"
27
+ },
28
+ "secrets": {
29
+ "anyOf": [
30
+ {
31
+ "items": {
32
+ "$ref": "#/$defs/SecretRef"
33
+ },
34
+ "type": "array"
35
+ },
36
+ {
37
+ "type": "null"
38
+ }
39
+ ],
40
+ "default": null,
41
+ "title": "Secrets"
42
+ }
43
+ },
44
+ "required": [
45
+ "run_commands"
46
+ ],
47
+ "title": "ImageStepRun",
48
+ "type": "object",
49
+ "x-contract-version": "0.4.8"
50
+ }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.7"
17
+ "x-contract-version": "0.4.8"
18
18
  }
@@ -39,5 +39,5 @@
39
39
  ],
40
40
  "title": "InferParam",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.7"
42
+ "x-contract-version": "0.4.8"
43
43
  }