sequence-base 0.3.7__tar.gz → 0.3.8__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 (163) hide show
  1. {sequence_base-0.3.7 → sequence_base-0.3.8}/PKG-INFO +1 -1
  2. {sequence_base-0.3.7 → sequence_base-0.3.8}/pyproject.toml +1 -1
  3. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/constants/version.py +2 -1
  4. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/io.py +26 -2
  5. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ActionChunk.json +1 -1
  6. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ActionContract.json +61 -1
  7. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ActionStep.json +1 -1
  8. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/AdapterTransform.json +1 -1
  9. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Autoscaler.json +1 -1
  10. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  11. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/BenchmarkRegisterRequest.json +61 -1
  12. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  13. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  14. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/BootstrapResponse.json +1 -1
  15. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Camera.json +1 -1
  16. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ClampInfo.json +1 -1
  17. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/CodeBundle.json +1 -1
  18. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Concurrency.json +1 -1
  19. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Conditions.json +1 -1
  20. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ConnectRequest.json +1 -1
  21. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ConnectResponse.json +61 -1
  22. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  23. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/DeploymentPolicy.json +61 -1
  24. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/DeploymentRequest.json +61 -1
  25. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  26. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Embodiment.json +61 -1
  27. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ErrorBody.json +1 -1
  28. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Estimate.json +1 -1
  29. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  30. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/EvalReport.json +1 -1
  31. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/EvalRequest.json +1 -1
  32. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/EvalResponse.json +1 -1
  33. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageFrame.json +1 -1
  34. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageSpec.json +1 -1
  35. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageStepApt.json +1 -1
  36. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageStepEnv.json +1 -1
  37. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageStepRun.json +1 -1
  38. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  39. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/InferParam.json +1 -1
  40. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Lease.json +1 -1
  41. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/LossyTransform.json +1 -1
  42. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/MetricAgg.json +1 -1
  43. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Observation.json +1 -1
  44. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/ObservationContract.json +1 -1
  45. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/PolicyRegistration.json +62 -2
  46. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/PolicySpec.json +61 -1
  47. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Proprioception.json +1 -1
  48. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/RenderSpec.json +1 -1
  49. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Resources.json +1 -1
  50. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/RolloutResult.json +1 -1
  51. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  52. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/SecretInfo.json +1 -1
  53. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/SecretRef.json +1 -1
  54. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/SeqFlags.json +1 -1
  55. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Step.json +1 -1
  56. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/SuiteAgg.json +1 -1
  57. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/TaskAgg.json +1 -1
  58. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Timeouts.json +1 -1
  59. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/UploadTarget.json +1 -1
  60. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/UsageReport.json +1 -1
  61. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/Variant.json +1 -1
  62. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeAttach.json +1 -1
  63. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeFile.json +1 -1
  64. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeInfo.json +1 -1
  65. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeMount.json +1 -1
  66. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeRef.json +1 -1
  67. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  68. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  69. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schemas/WarmingError.json +1 -1
  70. {sequence_base-0.3.7 → sequence_base-0.3.8}/tests/test_contracts.py +13 -0
  71. {sequence_base-0.3.7 → sequence_base-0.3.8}/.github/workflows/ci.yml +0 -0
  72. {sequence_base-0.3.7 → sequence_base-0.3.8}/.gitignore +0 -0
  73. {sequence_base-0.3.7 → sequence_base-0.3.8}/README.md +0 -0
  74. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/README.md +0 -0
  75. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/REVIEW.md +0 -0
  76. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/START.md +0 -0
  77. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/accounts.md +0 -0
  78. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/billing.md +0 -0
  79. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/build/BUILD_LOG.md +0 -0
  80. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/build/goal_sha256.json +0 -0
  81. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/build/gs-build-wave.js +0 -0
  82. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/build/gs-spec-goals.js +0 -0
  83. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/container.md +0 -0
  84. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/contracts.md +0 -0
  85. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/deploy/PLAN.md +0 -0
  86. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/deploy/PROD_REORG.md +0 -0
  87. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/deploy/SCHEMA_COMPAT.md +0 -0
  88. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/deploy/archive/sequences-gw.genseq-506918.20261001.yaml +0 -0
  89. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/eval.md +0 -0
  90. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/gateway.md +0 -0
  91. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/A1.yaml +0 -0
  92. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/A2.yaml +0 -0
  93. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/A3.yaml +0 -0
  94. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/C1.yaml +0 -0
  95. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/C2.yaml +0 -0
  96. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/C3.yaml +0 -0
  97. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/C4.yaml +0 -0
  98. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/C5.yaml +0 -0
  99. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/G1.yaml +0 -0
  100. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/G2.yaml +0 -0
  101. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/G3.yaml +0 -0
  102. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/G4.yaml +0 -0
  103. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/G5.yaml +0 -0
  104. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/O1.yaml +0 -0
  105. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/O2.yaml +0 -0
  106. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/O3.yaml +0 -0
  107. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/O4.yaml +0 -0
  108. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/O5.yaml +0 -0
  109. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/R1.yaml +0 -0
  110. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/R2.yaml +0 -0
  111. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/R3.yaml +0 -0
  112. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S1.yaml +0 -0
  113. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S2.yaml +0 -0
  114. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S3.yaml +0 -0
  115. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S4.yaml +0 -0
  116. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S5.yaml +0 -0
  117. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/S6.yaml +0 -0
  118. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/V1-storage.md +0 -0
  119. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/V2-user-quotas.md +0 -0
  120. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/W0.1.yaml +0 -0
  121. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/goals/W0.2.yaml +0 -0
  122. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/README.md +0 -0
  123. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/architecture.md +0 -0
  124. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/connect.md +0 -0
  125. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/cost.md +0 -0
  126. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/custom-domain.md +0 -0
  127. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/debugging.md +0 -0
  128. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/goals.md +0 -0
  129. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/limits.md +0 -0
  130. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/plan.md +0 -0
  131. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/white-label.md +0 -0
  132. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/modal/wiring.md +0 -0
  133. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/observability.md +0 -0
  134. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/references.md +0 -0
  135. {sequence_base-0.3.7 → sequence_base-0.3.8}/docs/platform/sdk.md +0 -0
  136. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/__init__.py +0 -0
  137. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/auth.py +0 -0
  138. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/codec/__init__.py +0 -0
  139. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/codec/image.py +0 -0
  140. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/codec/resize.py +0 -0
  141. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/constants/__init__.py +0 -0
  142. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/constants/env.py +0 -0
  143. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/constants/headers.py +0 -0
  144. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/__init__.py +0 -0
  145. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/accounts.py +0 -0
  146. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/act.py +0 -0
  147. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/benchmarks.py +0 -0
  148. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/connect.py +0 -0
  149. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/deployments.py +0 -0
  150. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/errors.py +0 -0
  151. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/eval.py +0 -0
  152. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/flags.py +0 -0
  153. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/policy.py +0 -0
  154. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/contract/volumes.py +0 -0
  155. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/errors/__init__.py +0 -0
  156. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/errors/transport.py +0 -0
  157. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/obs/__init__.py +0 -0
  158. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/obs/log.py +0 -0
  159. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/obs/rid.py +0 -0
  160. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/schema_export.py +0 -0
  161. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/telemetry/__init__.py +0 -0
  162. {sequence_base-0.3.7 → sequence_base-0.3.8}/sequence_base/telemetry/events.py +0 -0
  163. {sequence_base-0.3.7 → sequence_base-0.3.8}/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.7
3
+ Version: 0.3.8
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.7"
3
+ version = "0.3.8"
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.6" # 0.4.5 -> 0.4.6: InferParam + DeploymentPolicy.params; EvalRequest.params / variants / record; BenchmarkRegisterRequest.gpu
9
+ CONTRACT_VERSION = "0.4.7" # 0.4.6 -> 0.4.7: ActionContract.bounds / max_delta / on_violation (action limits)
10
+ # previous: 0.4.6 # 0.4.5 -> 0.4.6: InferParam + DeploymentPolicy.params; EvalRequest.params / variants / record; BenchmarkRegisterRequest.gpu
10
11
  # 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
11
12
  # previous: 0.4.4 # 0.4.3 -> 0.4.4: BenchmarkRegisterRequest.secrets (by name) + score (has @seq.score)
12
13
  # previous: 0.4.3 # 0.4.2 -> 0.4.3: I/O contract — ObservationContract/Camera/Embodiment on PolicySpec + DeploymentPolicy, Observation.state, ConnectRequest.embodiment, ConnectResponse.action/observation/embodiment
@@ -11,9 +11,9 @@ policy → accounts → connect would otherwise import back into policy.
11
11
  """
12
12
  from __future__ import annotations
13
13
 
14
- from typing import Any
14
+ from typing import Any, Literal
15
15
 
16
- from pydantic import BaseModel, ConfigDict, Field, field_validator
16
+ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
17
17
 
18
18
  from sequence_base.contract.act import ActionSpace
19
19
 
@@ -28,6 +28,30 @@ class ActionContract(BaseModel):
28
28
  action_space: ActionSpace
29
29
  action_dim: int
30
30
  control_frequency_hz: float
31
+ # Safety limits, enforced by the worker on every chunk before it leaves and by the robot client again before it
32
+ # executes: each dimension's [low, high], and the largest change between consecutive steps (one number for every
33
+ # dimension, or one per dimension). None: unchecked. {gs-plans/customization/deployment.md "五、安全:动作限位"}
34
+ bounds: list[tuple[float, float]] | None = Field(default=None, max_length=256)
35
+ max_delta: float | list[float] | None = None
36
+ # What a chunk outside them gets: "clip" (the default when None) — clipped into them, each clipped step and
37
+ # dimension named in the response's warnings — or "refuse": the worker answers 500 bounds_violation instead.
38
+ on_violation: Literal["clip", "refuse"] | None = None
39
+
40
+ @model_validator(mode="after")
41
+ def _limits_fit(self) -> "ActionContract":
42
+ if self.bounds is not None:
43
+ if len(self.bounds) != self.action_dim:
44
+ raise ValueError(f"bounds has {len(self.bounds)} [low, high] pairs; action_dim is {self.action_dim}")
45
+ for i, (low, high) in enumerate(self.bounds):
46
+ if low > high:
47
+ raise ValueError(f"bounds[{i}] has low {low} above high {high}")
48
+ if self.max_delta is not None:
49
+ deltas = self.max_delta if isinstance(self.max_delta, list) else [self.max_delta]
50
+ if isinstance(self.max_delta, list) and len(deltas) != self.action_dim:
51
+ raise ValueError(f"max_delta has {len(deltas)} values; action_dim is {self.action_dim}")
52
+ if any(d <= 0 for d in deltas):
53
+ raise ValueError("max_delta must be positive")
54
+ return self
31
55
 
32
56
 
33
57
  # The proprioception fields an observation contract may require, with the wire field each one names.
@@ -98,5 +98,5 @@
98
98
  ],
99
99
  "title": "ActionChunk",
100
100
  "type": "object",
101
- "x-contract-version": "0.4.6"
101
+ "x-contract-version": "0.4.7"
102
102
  }
@@ -22,10 +22,70 @@
22
22
  "action_space": {
23
23
  "$ref": "#/$defs/ActionSpace"
24
24
  },
25
+ "bounds": {
26
+ "anyOf": [
27
+ {
28
+ "items": {
29
+ "maxItems": 2,
30
+ "minItems": 2,
31
+ "prefixItems": [
32
+ {
33
+ "type": "number"
34
+ },
35
+ {
36
+ "type": "number"
37
+ }
38
+ ],
39
+ "type": "array"
40
+ },
41
+ "maxItems": 256,
42
+ "type": "array"
43
+ },
44
+ {
45
+ "type": "null"
46
+ }
47
+ ],
48
+ "default": null,
49
+ "title": "Bounds"
50
+ },
25
51
  "control_frequency_hz": {
26
52
  "title": "Control Frequency Hz",
27
53
  "type": "number"
28
54
  },
55
+ "max_delta": {
56
+ "anyOf": [
57
+ {
58
+ "type": "number"
59
+ },
60
+ {
61
+ "items": {
62
+ "type": "number"
63
+ },
64
+ "type": "array"
65
+ },
66
+ {
67
+ "type": "null"
68
+ }
69
+ ],
70
+ "default": null,
71
+ "title": "Max Delta"
72
+ },
73
+ "on_violation": {
74
+ "anyOf": [
75
+ {
76
+ "enum": [
77
+ "clip",
78
+ "refuse"
79
+ ],
80
+ "type": "string"
81
+ },
82
+ {
83
+ "type": "null"
84
+ }
85
+ ],
86
+ "default": null,
87
+ "title": "On Violation"
88
+ },
29
89
  "robot": {
30
90
  "title": "Robot",
31
91
  "type": "string"
@@ -39,5 +99,5 @@
39
99
  ],
40
100
  "title": "ActionContract",
41
101
  "type": "object",
42
- "x-contract-version": "0.4.6"
102
+ "x-contract-version": "0.4.7"
43
103
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.6"
22
+ "x-contract-version": "0.4.7"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.6"
41
+ "x-contract-version": "0.4.7"
42
42
  }
@@ -39,5 +39,5 @@
39
39
  },
40
40
  "title": "Autoscaler",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.6"
42
+ "x-contract-version": "0.4.7"
43
43
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.6"
65
+ "x-contract-version": "0.4.7"
66
66
  }
@@ -11,10 +11,70 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
+ "bounds": {
15
+ "anyOf": [
16
+ {
17
+ "items": {
18
+ "maxItems": 2,
19
+ "minItems": 2,
20
+ "prefixItems": [
21
+ {
22
+ "type": "number"
23
+ },
24
+ {
25
+ "type": "number"
26
+ }
27
+ ],
28
+ "type": "array"
29
+ },
30
+ "maxItems": 256,
31
+ "type": "array"
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "default": null,
38
+ "title": "Bounds"
39
+ },
14
40
  "control_frequency_hz": {
15
41
  "title": "Control Frequency Hz",
16
42
  "type": "number"
17
43
  },
44
+ "max_delta": {
45
+ "anyOf": [
46
+ {
47
+ "type": "number"
48
+ },
49
+ {
50
+ "items": {
51
+ "type": "number"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Max Delta"
61
+ },
62
+ "on_violation": {
63
+ "anyOf": [
64
+ {
65
+ "enum": [
66
+ "clip",
67
+ "refuse"
68
+ ],
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "null"
73
+ }
74
+ ],
75
+ "default": null,
76
+ "title": "On Violation"
77
+ },
18
78
  "robot": {
19
79
  "title": "Robot",
20
80
  "type": "string"
@@ -539,5 +599,5 @@
539
599
  ],
540
600
  "title": "BenchmarkRegisterRequest",
541
601
  "type": "object",
542
- "x-contract-version": "0.4.6"
602
+ "x-contract-version": "0.4.7"
543
603
  }
@@ -207,7 +207,7 @@
207
207
  ],
208
208
  "title": "SeqFlags",
209
209
  "type": "integer",
210
- "x-contract-version": "0.4.6",
210
+ "x-contract-version": "0.4.7",
211
211
  "x-flag-names": {
212
212
  "CHECK": 65536,
213
213
  "INFER": 16,
@@ -397,5 +397,5 @@
397
397
  ],
398
398
  "title": "BenchmarkSpec",
399
399
  "type": "object",
400
- "x-contract-version": "0.4.6"
400
+ "x-contract-version": "0.4.7"
401
401
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.6"
43
+ "x-contract-version": "0.4.7"
44
44
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "BootstrapResponse",
74
74
  "type": "object",
75
- "x-contract-version": "0.4.6"
75
+ "x-contract-version": "0.4.7"
76
76
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Camera",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.6"
24
+ "x-contract-version": "0.4.7"
25
25
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.6"
26
+ "x-contract-version": "0.4.7"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.6"
26
+ "x-contract-version": "0.4.7"
27
27
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "Concurrency",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.6"
20
+ "x-contract-version": "0.4.7"
21
21
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.6"
58
+ "x-contract-version": "0.4.7"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.6"
28
+ "x-contract-version": "0.4.7"
29
29
  }
@@ -11,10 +11,70 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
+ "bounds": {
15
+ "anyOf": [
16
+ {
17
+ "items": {
18
+ "maxItems": 2,
19
+ "minItems": 2,
20
+ "prefixItems": [
21
+ {
22
+ "type": "number"
23
+ },
24
+ {
25
+ "type": "number"
26
+ }
27
+ ],
28
+ "type": "array"
29
+ },
30
+ "maxItems": 256,
31
+ "type": "array"
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "default": null,
38
+ "title": "Bounds"
39
+ },
14
40
  "control_frequency_hz": {
15
41
  "title": "Control Frequency Hz",
16
42
  "type": "number"
17
43
  },
44
+ "max_delta": {
45
+ "anyOf": [
46
+ {
47
+ "type": "number"
48
+ },
49
+ {
50
+ "items": {
51
+ "type": "number"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Max Delta"
61
+ },
62
+ "on_violation": {
63
+ "anyOf": [
64
+ {
65
+ "enum": [
66
+ "clip",
67
+ "refuse"
68
+ ],
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "null"
73
+ }
74
+ ],
75
+ "default": null,
76
+ "title": "On Violation"
77
+ },
18
78
  "robot": {
19
79
  "title": "Robot",
20
80
  "type": "string"
@@ -221,5 +281,5 @@
221
281
  ],
222
282
  "title": "ConnectResponse",
223
283
  "type": "object",
224
- "x-contract-version": "0.4.6"
284
+ "x-contract-version": "0.4.7"
225
285
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.6"
21
+ "x-contract-version": "0.4.7"
22
22
  }
@@ -11,10 +11,70 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
+ "bounds": {
15
+ "anyOf": [
16
+ {
17
+ "items": {
18
+ "maxItems": 2,
19
+ "minItems": 2,
20
+ "prefixItems": [
21
+ {
22
+ "type": "number"
23
+ },
24
+ {
25
+ "type": "number"
26
+ }
27
+ ],
28
+ "type": "array"
29
+ },
30
+ "maxItems": 256,
31
+ "type": "array"
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "default": null,
38
+ "title": "Bounds"
39
+ },
14
40
  "control_frequency_hz": {
15
41
  "title": "Control Frequency Hz",
16
42
  "type": "number"
17
43
  },
44
+ "max_delta": {
45
+ "anyOf": [
46
+ {
47
+ "type": "number"
48
+ },
49
+ {
50
+ "items": {
51
+ "type": "number"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Max Delta"
61
+ },
62
+ "on_violation": {
63
+ "anyOf": [
64
+ {
65
+ "enum": [
66
+ "clip",
67
+ "refuse"
68
+ ],
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "null"
73
+ }
74
+ ],
75
+ "default": null,
76
+ "title": "On Violation"
77
+ },
18
78
  "robot": {
19
79
  "title": "Robot",
20
80
  "type": "string"
@@ -293,5 +353,5 @@
293
353
  ],
294
354
  "title": "DeploymentPolicy",
295
355
  "type": "object",
296
- "x-contract-version": "0.4.6"
356
+ "x-contract-version": "0.4.7"
297
357
  }
@@ -11,10 +11,70 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
+ "bounds": {
15
+ "anyOf": [
16
+ {
17
+ "items": {
18
+ "maxItems": 2,
19
+ "minItems": 2,
20
+ "prefixItems": [
21
+ {
22
+ "type": "number"
23
+ },
24
+ {
25
+ "type": "number"
26
+ }
27
+ ],
28
+ "type": "array"
29
+ },
30
+ "maxItems": 256,
31
+ "type": "array"
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "default": null,
38
+ "title": "Bounds"
39
+ },
14
40
  "control_frequency_hz": {
15
41
  "title": "Control Frequency Hz",
16
42
  "type": "number"
17
43
  },
44
+ "max_delta": {
45
+ "anyOf": [
46
+ {
47
+ "type": "number"
48
+ },
49
+ {
50
+ "items": {
51
+ "type": "number"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Max Delta"
61
+ },
62
+ "on_violation": {
63
+ "anyOf": [
64
+ {
65
+ "enum": [
66
+ "clip",
67
+ "refuse"
68
+ ],
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "null"
73
+ }
74
+ ],
75
+ "default": null,
76
+ "title": "On Violation"
77
+ },
18
78
  "robot": {
19
79
  "title": "Robot",
20
80
  "type": "string"
@@ -659,5 +719,5 @@
659
719
  ],
660
720
  "title": "DeploymentRequest",
661
721
  "type": "object",
662
- "x-contract-version": "0.4.6"
722
+ "x-contract-version": "0.4.7"
663
723
  }
@@ -41,5 +41,5 @@
41
41
  ],
42
42
  "title": "DeploymentStatusResponse",
43
43
  "type": "object",
44
- "x-contract-version": "0.4.6"
44
+ "x-contract-version": "0.4.7"
45
45
  }
@@ -11,10 +11,70 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
+ "bounds": {
15
+ "anyOf": [
16
+ {
17
+ "items": {
18
+ "maxItems": 2,
19
+ "minItems": 2,
20
+ "prefixItems": [
21
+ {
22
+ "type": "number"
23
+ },
24
+ {
25
+ "type": "number"
26
+ }
27
+ ],
28
+ "type": "array"
29
+ },
30
+ "maxItems": 256,
31
+ "type": "array"
32
+ },
33
+ {
34
+ "type": "null"
35
+ }
36
+ ],
37
+ "default": null,
38
+ "title": "Bounds"
39
+ },
14
40
  "control_frequency_hz": {
15
41
  "title": "Control Frequency Hz",
16
42
  "type": "number"
17
43
  },
44
+ "max_delta": {
45
+ "anyOf": [
46
+ {
47
+ "type": "number"
48
+ },
49
+ {
50
+ "items": {
51
+ "type": "number"
52
+ },
53
+ "type": "array"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "title": "Max Delta"
61
+ },
62
+ "on_violation": {
63
+ "anyOf": [
64
+ {
65
+ "enum": [
66
+ "clip",
67
+ "refuse"
68
+ ],
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "null"
73
+ }
74
+ ],
75
+ "default": null,
76
+ "title": "On Violation"
77
+ },
18
78
  "robot": {
19
79
  "title": "Robot",
20
80
  "type": "string"
@@ -139,5 +199,5 @@
139
199
  ],
140
200
  "title": "Embodiment",
141
201
  "type": "object",
142
- "x-contract-version": "0.4.6"
202
+ "x-contract-version": "0.4.7"
143
203
  }