sequence-base 0.3.6__tar.gz → 0.3.7__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.6 → sequence_base-0.3.7}/PKG-INFO +1 -1
  2. {sequence_base-0.3.6 → sequence_base-0.3.7}/pyproject.toml +1 -1
  3. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/__init__.py +2 -1
  4. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/constants/version.py +2 -1
  5. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/__init__.py +2 -1
  6. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/benchmarks.py +2 -0
  7. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/deployments.py +21 -0
  8. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/eval.py +8 -0
  9. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schema_export.py +2 -0
  10. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ActionChunk.json +1 -1
  11. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ActionContract.json +1 -1
  12. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ActionStep.json +1 -1
  13. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/AdapterTransform.json +1 -1
  14. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Autoscaler.json +1 -1
  15. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  16. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkRegisterRequest.json +14 -1
  17. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  18. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  19. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/BootstrapResponse.json +1 -1
  20. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Camera.json +1 -1
  21. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ClampInfo.json +1 -1
  22. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/CodeBundle.json +1 -1
  23. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Concurrency.json +1 -1
  24. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Conditions.json +1 -1
  25. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ConnectRequest.json +1 -1
  26. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ConnectResponse.json +1 -1
  27. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  28. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentPolicy.json +59 -1
  29. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentRequest.json +59 -1
  30. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  31. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Embodiment.json +1 -1
  32. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ErrorBody.json +1 -1
  33. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Estimate.json +1 -1
  34. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  35. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/EvalReport.json +1 -1
  36. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/EvalRequest.json +66 -1
  37. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/EvalResponse.json +1 -1
  38. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageFrame.json +1 -1
  39. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageSpec.json +1 -1
  40. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepApt.json +1 -1
  41. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepEnv.json +1 -1
  42. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepRun.json +1 -1
  43. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  44. sequence_base-0.3.7/sequence_base/schemas/InferParam.json +43 -0
  45. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Lease.json +1 -1
  46. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/LossyTransform.json +1 -1
  47. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/MetricAgg.json +1 -1
  48. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Observation.json +1 -1
  49. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/ObservationContract.json +1 -1
  50. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/PolicyRegistration.json +2 -2
  51. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/PolicySpec.json +1 -1
  52. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Proprioception.json +1 -1
  53. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/RenderSpec.json +1 -1
  54. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Resources.json +1 -1
  55. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/RolloutResult.json +1 -1
  56. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  57. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/SecretInfo.json +1 -1
  58. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/SecretRef.json +1 -1
  59. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/SeqFlags.json +1 -1
  60. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Step.json +1 -1
  61. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/SuiteAgg.json +1 -1
  62. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/TaskAgg.json +1 -1
  63. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Timeouts.json +1 -1
  64. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/UploadTarget.json +1 -1
  65. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/UsageReport.json +1 -1
  66. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/Variant.json +1 -1
  67. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeAttach.json +1 -1
  68. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeFile.json +1 -1
  69. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeInfo.json +1 -1
  70. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeMount.json +1 -1
  71. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeRef.json +1 -1
  72. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  73. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  74. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/schemas/WarmingError.json +1 -1
  75. {sequence_base-0.3.6 → sequence_base-0.3.7}/tests/test_contracts.py +20 -1
  76. {sequence_base-0.3.6 → sequence_base-0.3.7}/.github/workflows/ci.yml +0 -0
  77. {sequence_base-0.3.6 → sequence_base-0.3.7}/.gitignore +0 -0
  78. {sequence_base-0.3.6 → sequence_base-0.3.7}/README.md +0 -0
  79. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/README.md +0 -0
  80. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/REVIEW.md +0 -0
  81. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/START.md +0 -0
  82. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/accounts.md +0 -0
  83. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/billing.md +0 -0
  84. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/build/BUILD_LOG.md +0 -0
  85. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/build/goal_sha256.json +0 -0
  86. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/build/gs-build-wave.js +0 -0
  87. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/build/gs-spec-goals.js +0 -0
  88. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/container.md +0 -0
  89. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/contracts.md +0 -0
  90. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/deploy/PLAN.md +0 -0
  91. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/deploy/PROD_REORG.md +0 -0
  92. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/deploy/SCHEMA_COMPAT.md +0 -0
  93. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/deploy/archive/sequences-gw.genseq-506918.20261001.yaml +0 -0
  94. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/eval.md +0 -0
  95. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/gateway.md +0 -0
  96. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/A1.yaml +0 -0
  97. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/A2.yaml +0 -0
  98. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/A3.yaml +0 -0
  99. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/C1.yaml +0 -0
  100. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/C2.yaml +0 -0
  101. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/C3.yaml +0 -0
  102. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/C4.yaml +0 -0
  103. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/C5.yaml +0 -0
  104. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/G1.yaml +0 -0
  105. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/G2.yaml +0 -0
  106. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/G3.yaml +0 -0
  107. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/G4.yaml +0 -0
  108. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/G5.yaml +0 -0
  109. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/O1.yaml +0 -0
  110. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/O2.yaml +0 -0
  111. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/O3.yaml +0 -0
  112. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/O4.yaml +0 -0
  113. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/O5.yaml +0 -0
  114. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/R1.yaml +0 -0
  115. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/R2.yaml +0 -0
  116. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/R3.yaml +0 -0
  117. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S1.yaml +0 -0
  118. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S2.yaml +0 -0
  119. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S3.yaml +0 -0
  120. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S4.yaml +0 -0
  121. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S5.yaml +0 -0
  122. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/S6.yaml +0 -0
  123. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/V1-storage.md +0 -0
  124. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/V2-user-quotas.md +0 -0
  125. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/W0.1.yaml +0 -0
  126. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/goals/W0.2.yaml +0 -0
  127. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/README.md +0 -0
  128. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/architecture.md +0 -0
  129. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/connect.md +0 -0
  130. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/cost.md +0 -0
  131. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/custom-domain.md +0 -0
  132. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/debugging.md +0 -0
  133. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/goals.md +0 -0
  134. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/limits.md +0 -0
  135. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/plan.md +0 -0
  136. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/white-label.md +0 -0
  137. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/modal/wiring.md +0 -0
  138. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/observability.md +0 -0
  139. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/references.md +0 -0
  140. {sequence_base-0.3.6 → sequence_base-0.3.7}/docs/platform/sdk.md +0 -0
  141. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/auth.py +0 -0
  142. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/codec/__init__.py +0 -0
  143. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/codec/image.py +0 -0
  144. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/codec/resize.py +0 -0
  145. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/constants/__init__.py +0 -0
  146. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/constants/env.py +0 -0
  147. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/constants/headers.py +0 -0
  148. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/accounts.py +0 -0
  149. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/act.py +0 -0
  150. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/connect.py +0 -0
  151. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/errors.py +0 -0
  152. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/flags.py +0 -0
  153. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/io.py +0 -0
  154. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/policy.py +0 -0
  155. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/contract/volumes.py +0 -0
  156. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/errors/__init__.py +0 -0
  157. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/errors/transport.py +0 -0
  158. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/obs/__init__.py +0 -0
  159. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/obs/log.py +0 -0
  160. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/obs/rid.py +0 -0
  161. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/telemetry/__init__.py +0 -0
  162. {sequence_base-0.3.6 → sequence_base-0.3.7}/sequence_base/telemetry/events.py +0 -0
  163. {sequence_base-0.3.6 → sequence_base-0.3.7}/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.6
3
+ Version: 0.3.7
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.6"
3
+ version = "0.3.7"
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"]
@@ -44,6 +44,7 @@ from sequence_base.contract import ( # noqa: F401 (re-export surface)
44
44
  ConnectResponse,
45
45
  DeploymentAccepted,
46
46
  DeploymentPolicy,
47
+ InferParam,
47
48
  DeploymentRequest,
48
49
  DeploymentState,
49
50
  DeploymentStatusResponse,
@@ -122,7 +123,7 @@ __all__ = [
122
123
  "PolicySpec", "PolicyRegistration",
123
124
  # contract 2 — deployments
124
125
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
125
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "DeploymentRequest",
126
+ "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
126
127
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
127
128
  # contract 3 — connect / lease
128
129
  "Lease", "ConnectRequest", "ConnectResponse",
@@ -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.5" # 0.4.4 -> 0.4.5: BenchmarkRegisterRequest.condition_list / timeout_s / default_adapter_ref (+ BenchmarkConditionSpec); EvalRequest.tasks / max_usd / rerun_of
9
+ CONTRACT_VERSION = "0.4.6" # 0.4.5 -> 0.4.6: InferParam + DeploymentPolicy.params; EvalRequest.params / variants / record; BenchmarkRegisterRequest.gpu
10
+ # 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
10
11
  # previous: 0.4.4 # 0.4.3 -> 0.4.4: BenchmarkRegisterRequest.secrets (by name) + score (has @seq.score)
11
12
  # 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
12
13
  # previous: 0.4.2 # 0.4.1 -> 0.4.2: 契约7 volumes (uploads: VolumeFile/VolumeUploadRequest/UploadTarget/VolumeUploadResponse/VolumeInfo), weights accept vol://<name>[@v<n>]; DeploymentRequest name is a slug and weights need an origin
@@ -39,6 +39,7 @@ from sequence_base.contract.deployments import (
39
39
  CodeBundle,
40
40
  DeploymentAccepted,
41
41
  DeploymentPolicy,
42
+ InferParam,
42
43
  DeploymentRequest,
43
44
  DeploymentState,
44
45
  DeploymentStatusResponse,
@@ -113,7 +114,7 @@ __all__ = [
113
114
  "PolicySpec", "PolicyRegistration",
114
115
  # contract 2
115
116
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
116
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "DeploymentRequest",
117
+ "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
117
118
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
118
119
  # contract 3
119
120
  "Lease", "ConnectRequest", "ConnectResponse",
@@ -166,6 +166,8 @@ class BenchmarkRegisterRequest(BaseModel):
166
166
  timeout_s: float | None = Field(default=None, gt=0)
167
167
  # The adapter (module:Class in the benchmark's own code) an eval uses when it names none.
168
168
  default_adapter_ref: str | None = None
169
+ # A GPU for each sim sandbox (a renderer or a GPU physics engine): a card name the platform offers. None: CPU.
170
+ gpu: str | None = Field(default=None, max_length=32)
169
171
 
170
172
 
171
173
  class BenchmarkStatusResponse(BaseModel):
@@ -88,6 +88,17 @@ class VolumeAttach(BaseModel):
88
88
  create_if_missing: bool
89
89
 
90
90
 
91
+ class InferParam(BaseModel):
92
+ """One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`
93
+ — with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to
94
+ this type, and refuses any other. {gs-plans/customization/policy.md "四、推理行为"}"""
95
+
96
+ model_config = ConfigDict(extra="forbid")
97
+
98
+ type: Literal["int", "float", "bool", "str"]
99
+ default: int | float | bool | str | None = None
100
+
101
+
91
102
  class DeploymentPolicy(BaseModel):
92
103
  """The policy block of the deployments body. `handler_ref` and `action` are required; `action` is the
93
104
  fixed obs→ActionChunk contract, not a bare dict.
@@ -114,6 +125,16 @@ class DeploymentPolicy(BaseModel):
114
125
  # robot. None (an older SDK) is treated as undeclared, so an older policy is never refused for the
115
126
  # placeholder it never chose. {io-contract.md "旧 SDK 写的 POLICY 照样能 BUILD"}
116
127
  action_declared: bool | None = None
128
+ # The inference parameters @seq.infer takes beyond the observation (name -> type, default). None: an older
129
+ # SDK that did not look; {}: the policy declares none.
130
+ params: dict[str, InferParam] | None = Field(default=None, max_length=32)
131
+
132
+ @model_validator(mode="after")
133
+ def _param_names(self) -> "DeploymentPolicy":
134
+ for name in self.params or {}:
135
+ if not name.isidentifier() or name.startswith("_"):
136
+ raise ValueError(f"inference parameter {name!r} is not a public Python identifier")
137
+ return self
117
138
 
118
139
 
119
140
  MAX_CODE_BUNDLE_BYTES = 8 * 1024 * 1024
@@ -10,6 +10,7 @@ not a bare dict or free text.
10
10
  from __future__ import annotations
11
11
 
12
12
  from enum import Enum
13
+ from typing import Literal
13
14
 
14
15
  from pydantic import BaseModel, ConfigDict, Field, model_validator
15
16
 
@@ -53,6 +54,13 @@ class EvalRequest(BaseModel):
53
54
  max_usd: float | None = Field(default=None, gt=0)
54
55
  # Run again only the episodes of that earlier eval that errored; the report covers both runs.
55
56
  rerun_of: str | None = None
57
+ # Inference parameters the model's @seq.infer declares, set for every /act of this eval.
58
+ params: dict[str, int | float | bool | str] | None = Field(default=None, max_length=32)
59
+ # Only the conditions whose variant takes one of these values on each named axis.
60
+ variants: dict[str, list[str]] | None = Field(default=None, max_length=32)
61
+ # Which episodes are recorded when the benchmark declares render=: the first seed of each task (default),
62
+ # every episode, or none.
63
+ record: Literal["per-task", "all", "none"] | None = None
56
64
 
57
65
 
58
66
  class ClampInfo(BaseModel):
@@ -50,6 +50,7 @@ from sequence_base.contract.deployments import (
50
50
  CodeBundle,
51
51
  DeploymentAccepted,
52
52
  DeploymentPolicy,
53
+ InferParam,
53
54
  DeploymentRequest,
54
55
  DeploymentStatusResponse,
55
56
  Resources,
@@ -129,6 +130,7 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
129
130
  "VolumeAttach": VolumeAttach,
130
131
  "CodeBundle": CodeBundle,
131
132
  "DeploymentPolicy": DeploymentPolicy,
133
+ "InferParam": InferParam,
132
134
  "DeploymentRequest": DeploymentRequest,
133
135
  "DeploymentAccepted": DeploymentAccepted,
134
136
  "DeploymentStatusResponse": DeploymentStatusResponse,
@@ -98,5 +98,5 @@
98
98
  ],
99
99
  "title": "ActionChunk",
100
100
  "type": "object",
101
- "x-contract-version": "0.4.5"
101
+ "x-contract-version": "0.4.6"
102
102
  }
@@ -39,5 +39,5 @@
39
39
  ],
40
40
  "title": "ActionContract",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.5"
42
+ "x-contract-version": "0.4.6"
43
43
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.5"
22
+ "x-contract-version": "0.4.6"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.5"
41
+ "x-contract-version": "0.4.6"
42
42
  }
@@ -39,5 +39,5 @@
39
39
  },
40
40
  "title": "Autoscaler",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.5"
42
+ "x-contract-version": "0.4.6"
43
43
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.5"
65
+ "x-contract-version": "0.4.6"
66
66
  }
@@ -446,6 +446,19 @@
446
446
  "default": null,
447
447
  "title": "Default Adapter Ref"
448
448
  },
449
+ "gpu": {
450
+ "anyOf": [
451
+ {
452
+ "maxLength": 32,
453
+ "type": "string"
454
+ },
455
+ {
456
+ "type": "null"
457
+ }
458
+ ],
459
+ "default": null,
460
+ "title": "Gpu"
461
+ },
449
462
  "handler_ref": {
450
463
  "title": "Handler Ref",
451
464
  "type": "string"
@@ -526,5 +539,5 @@
526
539
  ],
527
540
  "title": "BenchmarkRegisterRequest",
528
541
  "type": "object",
529
- "x-contract-version": "0.4.5"
542
+ "x-contract-version": "0.4.6"
530
543
  }
@@ -207,7 +207,7 @@
207
207
  ],
208
208
  "title": "SeqFlags",
209
209
  "type": "integer",
210
- "x-contract-version": "0.4.5",
210
+ "x-contract-version": "0.4.6",
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.5"
400
+ "x-contract-version": "0.4.6"
401
401
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.5"
43
+ "x-contract-version": "0.4.6"
44
44
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "BootstrapResponse",
74
74
  "type": "object",
75
- "x-contract-version": "0.4.5"
75
+ "x-contract-version": "0.4.6"
76
76
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Camera",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.5"
24
+ "x-contract-version": "0.4.6"
25
25
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.5"
26
+ "x-contract-version": "0.4.6"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.5"
26
+ "x-contract-version": "0.4.6"
27
27
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "Concurrency",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.5"
20
+ "x-contract-version": "0.4.6"
21
21
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.5"
58
+ "x-contract-version": "0.4.6"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.5"
28
+ "x-contract-version": "0.4.6"
29
29
  }
@@ -221,5 +221,5 @@
221
221
  ],
222
222
  "title": "ConnectResponse",
223
223
  "type": "object",
224
- "x-contract-version": "0.4.5"
224
+ "x-contract-version": "0.4.6"
225
225
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.5"
21
+ "x-contract-version": "0.4.6"
22
22
  }
@@ -94,6 +94,48 @@
94
94
  "title": "Embodiment",
95
95
  "type": "object"
96
96
  },
97
+ "InferParam": {
98
+ "additionalProperties": false,
99
+ "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}",
100
+ "properties": {
101
+ "default": {
102
+ "anyOf": [
103
+ {
104
+ "type": "integer"
105
+ },
106
+ {
107
+ "type": "number"
108
+ },
109
+ {
110
+ "type": "boolean"
111
+ },
112
+ {
113
+ "type": "string"
114
+ },
115
+ {
116
+ "type": "null"
117
+ }
118
+ ],
119
+ "default": null,
120
+ "title": "Default"
121
+ },
122
+ "type": {
123
+ "enum": [
124
+ "int",
125
+ "float",
126
+ "bool",
127
+ "str"
128
+ ],
129
+ "title": "Type",
130
+ "type": "string"
131
+ }
132
+ },
133
+ "required": [
134
+ "type"
135
+ ],
136
+ "title": "InferParam",
137
+ "type": "object"
138
+ },
97
139
  "ObservationContract": {
98
140
  "additionalProperties": false,
99
141
  "description": "What a policy reads, declared once: the worker checks every /act against it before inference, the\nclient assembles to it. An observation that does not match is refused with what is missing — it is never\ninferred on. {gs-plans/customization/io-contract.md \"二、观测契约\"}",
@@ -216,6 +258,22 @@
216
258
  ],
217
259
  "default": null
218
260
  },
261
+ "params": {
262
+ "anyOf": [
263
+ {
264
+ "additionalProperties": {
265
+ "$ref": "#/$defs/InferParam"
266
+ },
267
+ "maxProperties": 32,
268
+ "type": "object"
269
+ },
270
+ {
271
+ "type": "null"
272
+ }
273
+ ],
274
+ "default": null,
275
+ "title": "Params"
276
+ },
219
277
  "secrets": {
220
278
  "items": {
221
279
  "$ref": "#/$defs/SecretRef"
@@ -235,5 +293,5 @@
235
293
  ],
236
294
  "title": "DeploymentPolicy",
237
295
  "type": "object",
238
- "x-contract-version": "0.4.5"
296
+ "x-contract-version": "0.4.6"
239
297
  }
@@ -213,6 +213,22 @@
213
213
  ],
214
214
  "default": null
215
215
  },
216
+ "params": {
217
+ "anyOf": [
218
+ {
219
+ "additionalProperties": {
220
+ "$ref": "#/$defs/InferParam"
221
+ },
222
+ "maxProperties": 32,
223
+ "type": "object"
224
+ },
225
+ {
226
+ "type": "null"
227
+ }
228
+ ],
229
+ "default": null,
230
+ "title": "Params"
231
+ },
216
232
  "secrets": {
217
233
  "items": {
218
234
  "$ref": "#/$defs/SecretRef"
@@ -383,6 +399,48 @@
383
399
  "title": "ImageStepUvPip",
384
400
  "type": "object"
385
401
  },
402
+ "InferParam": {
403
+ "additionalProperties": false,
404
+ "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}",
405
+ "properties": {
406
+ "default": {
407
+ "anyOf": [
408
+ {
409
+ "type": "integer"
410
+ },
411
+ {
412
+ "type": "number"
413
+ },
414
+ {
415
+ "type": "boolean"
416
+ },
417
+ {
418
+ "type": "string"
419
+ },
420
+ {
421
+ "type": "null"
422
+ }
423
+ ],
424
+ "default": null,
425
+ "title": "Default"
426
+ },
427
+ "type": {
428
+ "enum": [
429
+ "int",
430
+ "float",
431
+ "bool",
432
+ "str"
433
+ ],
434
+ "title": "Type",
435
+ "type": "string"
436
+ }
437
+ },
438
+ "required": [
439
+ "type"
440
+ ],
441
+ "title": "InferParam",
442
+ "type": "object"
443
+ },
386
444
  "ObservationContract": {
387
445
  "additionalProperties": false,
388
446
  "description": "What a policy reads, declared once: the worker checks every /act against it before inference, the\nclient assembles to it. An observation that does not match is refused with what is missing — it is never\ninferred on. {gs-plans/customization/io-contract.md \"二、观测契约\"}",
@@ -601,5 +659,5 @@
601
659
  ],
602
660
  "title": "DeploymentRequest",
603
661
  "type": "object",
604
- "x-contract-version": "0.4.5"
662
+ "x-contract-version": "0.4.6"
605
663
  }
@@ -41,5 +41,5 @@
41
41
  ],
42
42
  "title": "DeploymentStatusResponse",
43
43
  "type": "object",
44
- "x-contract-version": "0.4.5"
44
+ "x-contract-version": "0.4.6"
45
45
  }
@@ -139,5 +139,5 @@
139
139
  ],
140
140
  "title": "Embodiment",
141
141
  "type": "object",
142
- "x-contract-version": "0.4.5"
142
+ "x-contract-version": "0.4.6"
143
143
  }
@@ -28,5 +28,5 @@
28
28
  ],
29
29
  "title": "ErrorBody",
30
30
  "type": "object",
31
- "x-contract-version": "0.4.5"
31
+ "x-contract-version": "0.4.6"
32
32
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Estimate",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.5"
24
+ "x-contract-version": "0.4.6"
25
25
  }
@@ -37,5 +37,5 @@
37
37
  ],
38
38
  "title": "EvalDryRunResponse",
39
39
  "type": "object",
40
- "x-contract-version": "0.4.5"
40
+ "x-contract-version": "0.4.6"
41
41
  }
@@ -183,5 +183,5 @@
183
183
  ],
184
184
  "title": "EvalReport",
185
185
  "type": "object",
186
- "x-contract-version": "0.4.5"
186
+ "x-contract-version": "0.4.6"
187
187
  }
@@ -77,6 +77,52 @@
77
77
  "title": "Model",
78
78
  "type": "string"
79
79
  },
80
+ "params": {
81
+ "anyOf": [
82
+ {
83
+ "additionalProperties": {
84
+ "anyOf": [
85
+ {
86
+ "type": "integer"
87
+ },
88
+ {
89
+ "type": "number"
90
+ },
91
+ {
92
+ "type": "boolean"
93
+ },
94
+ {
95
+ "type": "string"
96
+ }
97
+ ]
98
+ },
99
+ "maxProperties": 32,
100
+ "type": "object"
101
+ },
102
+ {
103
+ "type": "null"
104
+ }
105
+ ],
106
+ "default": null,
107
+ "title": "Params"
108
+ },
109
+ "record": {
110
+ "anyOf": [
111
+ {
112
+ "enum": [
113
+ "per-task",
114
+ "all",
115
+ "none"
116
+ ],
117
+ "type": "string"
118
+ },
119
+ {
120
+ "type": "null"
121
+ }
122
+ ],
123
+ "default": null,
124
+ "title": "Record"
125
+ },
80
126
  "rerun_of": {
81
127
  "anyOf": [
82
128
  {
@@ -129,6 +175,25 @@
129
175
  "default": null,
130
176
  "title": "Trials"
131
177
  },
178
+ "variants": {
179
+ "anyOf": [
180
+ {
181
+ "additionalProperties": {
182
+ "items": {
183
+ "type": "string"
184
+ },
185
+ "type": "array"
186
+ },
187
+ "maxProperties": 32,
188
+ "type": "object"
189
+ },
190
+ {
191
+ "type": "null"
192
+ }
193
+ ],
194
+ "default": null,
195
+ "title": "Variants"
196
+ },
132
197
  "vlm_max_concurrency": {
133
198
  "anyOf": [
134
199
  {
@@ -148,5 +213,5 @@
148
213
  ],
149
214
  "title": "EvalRequest",
150
215
  "type": "object",
151
- "x-contract-version": "0.4.5"
216
+ "x-contract-version": "0.4.6"
152
217
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "EvalResponse",
86
86
  "type": "object",
87
- "x-contract-version": "0.4.5"
87
+ "x-contract-version": "0.4.6"
88
88
  }
@@ -32,5 +32,5 @@
32
32
  ],
33
33
  "title": "ImageFrame",
34
34
  "type": "object",
35
- "x-contract-version": "0.4.5"
35
+ "x-contract-version": "0.4.6"
36
36
  }
@@ -119,5 +119,5 @@
119
119
  },
120
120
  "title": "ImageSpec",
121
121
  "type": "object",
122
- "x-contract-version": "0.4.5"
122
+ "x-contract-version": "0.4.6"
123
123
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.5"
17
+ "x-contract-version": "0.4.6"
18
18
  }