sequence-base 0.3.5__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.5 → sequence_base-0.3.7}/PKG-INFO +1 -1
  2. {sequence_base-0.3.5 → sequence_base-0.3.7}/pyproject.toml +1 -1
  3. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/__init__.py +5 -3
  4. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/constants/version.py +3 -1
  5. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/__init__.py +4 -2
  6. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/benchmarks.py +23 -0
  7. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/deployments.py +21 -0
  8. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/eval.py +14 -0
  9. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schema_export.py +4 -0
  10. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ActionChunk.json +1 -1
  11. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ActionContract.json +1 -1
  12. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ActionStep.json +1 -1
  13. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/AdapterTransform.json +1 -1
  14. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Autoscaler.json +1 -1
  15. sequence_base-0.3.7/sequence_base/schemas/BenchmarkConditionSpec.json +66 -0
  16. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkRegisterRequest.json +120 -1
  17. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  18. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  19. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/BootstrapResponse.json +1 -1
  20. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Camera.json +1 -1
  21. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ClampInfo.json +1 -1
  22. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/CodeBundle.json +1 -1
  23. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Concurrency.json +1 -1
  24. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Conditions.json +1 -1
  25. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ConnectRequest.json +1 -1
  26. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ConnectResponse.json +1 -1
  27. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  28. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentPolicy.json +59 -1
  29. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentRequest.json +59 -1
  30. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  31. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Embodiment.json +1 -1
  32. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ErrorBody.json +1 -1
  33. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Estimate.json +1 -1
  34. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  35. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/EvalReport.json +1 -1
  36. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/EvalRequest.json +107 -1
  37. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/EvalResponse.json +1 -1
  38. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ImageFrame.json +1 -1
  39. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ImageSpec.json +1 -1
  40. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepApt.json +1 -1
  41. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepEnv.json +1 -1
  42. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ImageStepRun.json +1 -1
  43. {sequence_base-0.3.5 → 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.5 → sequence_base-0.3.7}/sequence_base/schemas/Lease.json +1 -1
  46. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/LossyTransform.json +1 -1
  47. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/MetricAgg.json +1 -1
  48. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Observation.json +1 -1
  49. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/ObservationContract.json +1 -1
  50. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/PolicyRegistration.json +2 -2
  51. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/PolicySpec.json +1 -1
  52. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Proprioception.json +1 -1
  53. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/RenderSpec.json +1 -1
  54. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Resources.json +1 -1
  55. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/RolloutResult.json +1 -1
  56. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  57. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/SecretInfo.json +1 -1
  58. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/SecretRef.json +1 -1
  59. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/SeqFlags.json +1 -1
  60. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Step.json +1 -1
  61. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/SuiteAgg.json +1 -1
  62. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/TaskAgg.json +1 -1
  63. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Timeouts.json +1 -1
  64. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/UploadTarget.json +1 -1
  65. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/UsageReport.json +1 -1
  66. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/Variant.json +1 -1
  67. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeAttach.json +1 -1
  68. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeFile.json +1 -1
  69. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeInfo.json +1 -1
  70. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeMount.json +1 -1
  71. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeRef.json +1 -1
  72. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  73. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  74. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/schemas/WarmingError.json +1 -1
  75. {sequence_base-0.3.5 → sequence_base-0.3.7}/tests/test_contracts.py +23 -1
  76. {sequence_base-0.3.5 → sequence_base-0.3.7}/.github/workflows/ci.yml +0 -0
  77. {sequence_base-0.3.5 → sequence_base-0.3.7}/.gitignore +0 -0
  78. {sequence_base-0.3.5 → sequence_base-0.3.7}/README.md +0 -0
  79. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/README.md +0 -0
  80. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/REVIEW.md +0 -0
  81. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/START.md +0 -0
  82. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/accounts.md +0 -0
  83. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/billing.md +0 -0
  84. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/build/BUILD_LOG.md +0 -0
  85. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/build/goal_sha256.json +0 -0
  86. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/build/gs-build-wave.js +0 -0
  87. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/build/gs-spec-goals.js +0 -0
  88. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/container.md +0 -0
  89. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/contracts.md +0 -0
  90. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/deploy/PLAN.md +0 -0
  91. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/deploy/PROD_REORG.md +0 -0
  92. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/deploy/SCHEMA_COMPAT.md +0 -0
  93. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/deploy/archive/sequences-gw.genseq-506918.20261001.yaml +0 -0
  94. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/eval.md +0 -0
  95. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/gateway.md +0 -0
  96. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/A1.yaml +0 -0
  97. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/A2.yaml +0 -0
  98. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/A3.yaml +0 -0
  99. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/C1.yaml +0 -0
  100. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/C2.yaml +0 -0
  101. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/C3.yaml +0 -0
  102. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/C4.yaml +0 -0
  103. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/C5.yaml +0 -0
  104. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/G1.yaml +0 -0
  105. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/G2.yaml +0 -0
  106. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/G3.yaml +0 -0
  107. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/G4.yaml +0 -0
  108. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/G5.yaml +0 -0
  109. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/O1.yaml +0 -0
  110. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/O2.yaml +0 -0
  111. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/O3.yaml +0 -0
  112. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/O4.yaml +0 -0
  113. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/O5.yaml +0 -0
  114. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/R1.yaml +0 -0
  115. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/R2.yaml +0 -0
  116. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/R3.yaml +0 -0
  117. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S1.yaml +0 -0
  118. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S2.yaml +0 -0
  119. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S3.yaml +0 -0
  120. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S4.yaml +0 -0
  121. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S5.yaml +0 -0
  122. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/S6.yaml +0 -0
  123. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/V1-storage.md +0 -0
  124. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/V2-user-quotas.md +0 -0
  125. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/W0.1.yaml +0 -0
  126. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/goals/W0.2.yaml +0 -0
  127. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/README.md +0 -0
  128. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/architecture.md +0 -0
  129. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/connect.md +0 -0
  130. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/cost.md +0 -0
  131. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/custom-domain.md +0 -0
  132. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/debugging.md +0 -0
  133. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/goals.md +0 -0
  134. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/limits.md +0 -0
  135. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/plan.md +0 -0
  136. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/white-label.md +0 -0
  137. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/modal/wiring.md +0 -0
  138. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/observability.md +0 -0
  139. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/references.md +0 -0
  140. {sequence_base-0.3.5 → sequence_base-0.3.7}/docs/platform/sdk.md +0 -0
  141. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/auth.py +0 -0
  142. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/codec/__init__.py +0 -0
  143. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/codec/image.py +0 -0
  144. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/codec/resize.py +0 -0
  145. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/constants/__init__.py +0 -0
  146. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/constants/env.py +0 -0
  147. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/constants/headers.py +0 -0
  148. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/accounts.py +0 -0
  149. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/act.py +0 -0
  150. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/connect.py +0 -0
  151. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/errors.py +0 -0
  152. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/flags.py +0 -0
  153. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/io.py +0 -0
  154. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/policy.py +0 -0
  155. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/contract/volumes.py +0 -0
  156. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/errors/__init__.py +0 -0
  157. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/errors/transport.py +0 -0
  158. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/obs/__init__.py +0 -0
  159. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/obs/log.py +0 -0
  160. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/obs/rid.py +0 -0
  161. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/telemetry/__init__.py +0 -0
  162. {sequence_base-0.3.5 → sequence_base-0.3.7}/sequence_base/telemetry/events.py +0 -0
  163. {sequence_base-0.3.5 → 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.5
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.5"
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"]
@@ -31,6 +31,7 @@ from sequence_base.contract import ( # noqa: F401 (re-export surface)
31
31
  AdapterKind,
32
32
  AdapterTransform,
33
33
  Autoscaler,
34
+ BenchmarkConditionSpec,
34
35
  BenchmarkRegisterRequest,
35
36
  BenchmarkStatusResponse,
36
37
  BenchmarkSpec,
@@ -43,6 +44,7 @@ from sequence_base.contract import ( # noqa: F401 (re-export surface)
43
44
  ConnectResponse,
44
45
  DeploymentAccepted,
45
46
  DeploymentPolicy,
47
+ InferParam,
46
48
  DeploymentRequest,
47
49
  DeploymentState,
48
50
  DeploymentStatusResponse,
@@ -121,12 +123,12 @@ __all__ = [
121
123
  "PolicySpec", "PolicyRegistration",
122
124
  # contract 2 — deployments
123
125
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
124
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "DeploymentRequest",
126
+ "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
125
127
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
126
128
  # contract 3 — connect / lease
127
129
  "Lease", "ConnectRequest", "ConnectResponse",
128
130
  # contract 5 — benchmark + eval
129
- "Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
131
+ "Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
130
132
  "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
131
133
  "EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
132
134
  "AdapterKind", "AdapterTransform",
@@ -144,4 +146,4 @@ __all__ = [
144
146
  "auth", "WorkerLogEvent",
145
147
  ]
146
148
 
147
- __version__ = "0.3.5"
149
+ __version__ = "0.3.6"
@@ -6,7 +6,9 @@ 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.4" # 0.4.3 -> 0.4.4: BenchmarkRegisterRequest.secrets (by name) + score (has @seq.score)
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
11
+ # previous: 0.4.4 # 0.4.3 -> 0.4.4: BenchmarkRegisterRequest.secrets (by name) + score (has @seq.score)
10
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
11
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
12
14
  # previous: 0.4.1 # 0.4.0 -> 0.4.1: 契约2 deploy body completed during S3/G4 — DeploymentPolicy.secrets (name-only passthrough), DeploymentRequest.volumes: list[VolumeAttach{uri,mount,create_if_missing}], concurrency default materialized; telemetry events add load_start stage + emitted_at/rid/dedup_key (O4)
@@ -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,
@@ -52,6 +53,7 @@ from sequence_base.contract.connect import ConnectRequest, ConnectResponse, Leas
52
53
 
53
54
  # contract 5 — benchmark registration + eval run / report / adapter
54
55
  from sequence_base.contract.benchmarks import (
56
+ BenchmarkConditionSpec,
55
57
  BenchmarkRegisterRequest,
56
58
  BenchmarkStatusResponse,
57
59
  BenchmarkSpec,
@@ -112,12 +114,12 @@ __all__ = [
112
114
  "PolicySpec", "PolicyRegistration",
113
115
  # contract 2
114
116
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
115
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "DeploymentRequest",
117
+ "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
116
118
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
117
119
  # contract 3
118
120
  "Lease", "ConnectRequest", "ConnectResponse",
119
121
  # contract 5
120
- "Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
122
+ "Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
121
123
  "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
122
124
  "EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
123
125
  "AdapterKind", "AdapterTransform",
@@ -114,6 +114,20 @@ class BenchmarkSpec(BaseModel):
114
114
  return self
115
115
 
116
116
 
117
+ class BenchmarkConditionSpec(BaseModel):
118
+ """One episode setting exactly as the author declared it — a sparse list or a cross product, with its own step
119
+ cap, wall-clock limit and suite. {gs-plans/customization/benchmark.md "6. 其它在 SDK 里收下、在生产里丢掉的声明"}"""
120
+
121
+ model_config = ConfigDict(extra="forbid")
122
+
123
+ task: str
124
+ seed: int
125
+ variant: dict[str, str] = Field(default_factory=dict)
126
+ max_steps: int | None = Field(default=None, gt=0)
127
+ timeout_s: float | None = Field(default=None, gt=0)
128
+ suite: str | None = None
129
+
130
+
117
131
  class BenchmarkRegisterRequest(BaseModel):
118
132
  """POST /v1/benchmarks — register body, same types as the spec (ImageSpec / Conditions / VolumeRef /
119
133
  RenderSpec). Carries assets / render / cpu / memory_gb / max_steps so the gateway can build the image,
@@ -145,6 +159,15 @@ class BenchmarkRegisterRequest(BaseModel):
145
159
  # Whether the benchmark defines @seq.score — the platform then calls it per group (overall, each suite, each
146
160
  # task) after every episode has run, and its keys override those groups' means. {benchmark.md "A.2"}
147
161
  score: bool = False
162
+ # Every condition as declared (a sparse list stays sparse; each keeps its own max_steps / timeout_s / suite),
163
+ # where `conditions` can only say tasks x seeds x variants. The eval runs these when present.
164
+ condition_list: list[BenchmarkConditionSpec] | None = Field(default=None, max_length=5000)
165
+ # An episode's wall-clock limit (seconds) when a condition sets none; past it the episode ends truncated.
166
+ timeout_s: float | None = Field(default=None, gt=0)
167
+ # The adapter (module:Class in the benchmark's own code) an eval uses when it names none.
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)
148
171
 
149
172
 
150
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
 
@@ -47,6 +48,19 @@ class EvalRequest(BaseModel):
47
48
  adapter: str | None = None
48
49
  compare: str | None = Field(default=None, description="Another model id to compare against")
49
50
  dry_run: bool = False
51
+ # Only these tasks (of the selected suite / trials). {gs-plans/customization/benchmark.md "子集"}
52
+ tasks: list[str] | None = Field(default=None, max_length=1000)
53
+ # The most this eval may spend on GPU time: it stops there and reports what ran (incomplete).
54
+ max_usd: float | None = Field(default=None, gt=0)
55
+ # Run again only the episodes of that earlier eval that errored; the report covers both runs.
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
50
64
 
51
65
 
52
66
  class ClampInfo(BaseModel):
@@ -35,6 +35,7 @@ from sequence_base.contract.act import (
35
35
  Proprioception,
36
36
  )
37
37
  from sequence_base.contract.benchmarks import (
38
+ BenchmarkConditionSpec,
38
39
  BenchmarkRegisterRequest,
39
40
  BenchmarkStatusResponse,
40
41
  BenchmarkSpec,
@@ -49,6 +50,7 @@ from sequence_base.contract.deployments import (
49
50
  CodeBundle,
50
51
  DeploymentAccepted,
51
52
  DeploymentPolicy,
53
+ InferParam,
52
54
  DeploymentRequest,
53
55
  DeploymentStatusResponse,
54
56
  Resources,
@@ -128,6 +130,7 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
128
130
  "VolumeAttach": VolumeAttach,
129
131
  "CodeBundle": CodeBundle,
130
132
  "DeploymentPolicy": DeploymentPolicy,
133
+ "InferParam": InferParam,
131
134
  "DeploymentRequest": DeploymentRequest,
132
135
  "DeploymentAccepted": DeploymentAccepted,
133
136
  "DeploymentStatusResponse": DeploymentStatusResponse,
@@ -141,6 +144,7 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
141
144
  "RenderSpec": RenderSpec,
142
145
  "Step": Step,
143
146
  "BenchmarkSpec": BenchmarkSpec,
147
+ "BenchmarkConditionSpec": BenchmarkConditionSpec,
144
148
  "BenchmarkRegisterRequest": BenchmarkRegisterRequest,
145
149
  "BenchmarkStatusResponse": BenchmarkStatusResponse,
146
150
  # contract 5 — eval run / report / adapter
@@ -98,5 +98,5 @@
98
98
  ],
99
99
  "title": "ActionChunk",
100
100
  "type": "object",
101
- "x-contract-version": "0.4.4"
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.4"
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.4"
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.4"
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.4"
42
+ "x-contract-version": "0.4.6"
43
43
  }
@@ -0,0 +1,66 @@
1
+ {
2
+ "additionalProperties": false,
3
+ "description": "One episode setting exactly as the author declared it — a sparse list or a cross product, with its own step\ncap, wall-clock limit and suite. {gs-plans/customization/benchmark.md \"6. 其它在 SDK 里收下、在生产里丢掉的声明\"}",
4
+ "properties": {
5
+ "max_steps": {
6
+ "anyOf": [
7
+ {
8
+ "exclusiveMinimum": 0,
9
+ "type": "integer"
10
+ },
11
+ {
12
+ "type": "null"
13
+ }
14
+ ],
15
+ "default": null,
16
+ "title": "Max Steps"
17
+ },
18
+ "seed": {
19
+ "title": "Seed",
20
+ "type": "integer"
21
+ },
22
+ "suite": {
23
+ "anyOf": [
24
+ {
25
+ "type": "string"
26
+ },
27
+ {
28
+ "type": "null"
29
+ }
30
+ ],
31
+ "default": null,
32
+ "title": "Suite"
33
+ },
34
+ "task": {
35
+ "title": "Task",
36
+ "type": "string"
37
+ },
38
+ "timeout_s": {
39
+ "anyOf": [
40
+ {
41
+ "exclusiveMinimum": 0,
42
+ "type": "number"
43
+ },
44
+ {
45
+ "type": "null"
46
+ }
47
+ ],
48
+ "default": null,
49
+ "title": "Timeout S"
50
+ },
51
+ "variant": {
52
+ "additionalProperties": {
53
+ "type": "string"
54
+ },
55
+ "title": "Variant",
56
+ "type": "object"
57
+ }
58
+ },
59
+ "required": [
60
+ "task",
61
+ "seed"
62
+ ],
63
+ "title": "BenchmarkConditionSpec",
64
+ "type": "object",
65
+ "x-contract-version": "0.4.6"
66
+ }
@@ -40,6 +40,71 @@
40
40
  "title": "ActionSpace",
41
41
  "type": "string"
42
42
  },
43
+ "BenchmarkConditionSpec": {
44
+ "additionalProperties": false,
45
+ "description": "One episode setting exactly as the author declared it — a sparse list or a cross product, with its own step\ncap, wall-clock limit and suite. {gs-plans/customization/benchmark.md \"6. 其它在 SDK 里收下、在生产里丢掉的声明\"}",
46
+ "properties": {
47
+ "max_steps": {
48
+ "anyOf": [
49
+ {
50
+ "exclusiveMinimum": 0,
51
+ "type": "integer"
52
+ },
53
+ {
54
+ "type": "null"
55
+ }
56
+ ],
57
+ "default": null,
58
+ "title": "Max Steps"
59
+ },
60
+ "seed": {
61
+ "title": "Seed",
62
+ "type": "integer"
63
+ },
64
+ "suite": {
65
+ "anyOf": [
66
+ {
67
+ "type": "string"
68
+ },
69
+ {
70
+ "type": "null"
71
+ }
72
+ ],
73
+ "default": null,
74
+ "title": "Suite"
75
+ },
76
+ "task": {
77
+ "title": "Task",
78
+ "type": "string"
79
+ },
80
+ "timeout_s": {
81
+ "anyOf": [
82
+ {
83
+ "exclusiveMinimum": 0,
84
+ "type": "number"
85
+ },
86
+ {
87
+ "type": "null"
88
+ }
89
+ ],
90
+ "default": null,
91
+ "title": "Timeout S"
92
+ },
93
+ "variant": {
94
+ "additionalProperties": {
95
+ "type": "string"
96
+ },
97
+ "title": "Variant",
98
+ "type": "object"
99
+ }
100
+ },
101
+ "required": [
102
+ "task",
103
+ "seed"
104
+ ],
105
+ "title": "BenchmarkConditionSpec",
106
+ "type": "object"
107
+ },
43
108
  "CodeBundle": {
44
109
  "additionalProperties": false,
45
110
  "description": "The policy's own source, shipped with the deploy so the worker can import `policy.handler_ref`\n(what Modal's automount does for the entrypoint module). A gzip'd tar of the handler's top-level module\nor package, base64 on the wire, with the sha256 of the decoded bytes so a truncated or altered upload\nis refused at the edge instead of failing as an ImportError on a GPU.",
@@ -338,6 +403,22 @@
338
403
  ],
339
404
  "default": null
340
405
  },
406
+ "condition_list": {
407
+ "anyOf": [
408
+ {
409
+ "items": {
410
+ "$ref": "#/$defs/BenchmarkConditionSpec"
411
+ },
412
+ "maxItems": 5000,
413
+ "type": "array"
414
+ },
415
+ {
416
+ "type": "null"
417
+ }
418
+ ],
419
+ "default": null,
420
+ "title": "Condition List"
421
+ },
341
422
  "conditions": {
342
423
  "$ref": "#/$defs/Conditions"
343
424
  },
@@ -353,6 +434,31 @@
353
434
  "default": null,
354
435
  "title": "Cpu"
355
436
  },
437
+ "default_adapter_ref": {
438
+ "anyOf": [
439
+ {
440
+ "type": "string"
441
+ },
442
+ {
443
+ "type": "null"
444
+ }
445
+ ],
446
+ "default": null,
447
+ "title": "Default Adapter Ref"
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
+ },
356
462
  "handler_ref": {
357
463
  "title": "Handler Ref",
358
464
  "type": "string"
@@ -409,6 +515,19 @@
409
515
  },
410
516
  "title": "Suite Of",
411
517
  "type": "object"
518
+ },
519
+ "timeout_s": {
520
+ "anyOf": [
521
+ {
522
+ "exclusiveMinimum": 0,
523
+ "type": "number"
524
+ },
525
+ {
526
+ "type": "null"
527
+ }
528
+ ],
529
+ "default": null,
530
+ "title": "Timeout S"
412
531
  }
413
532
  },
414
533
  "required": [
@@ -420,5 +539,5 @@
420
539
  ],
421
540
  "title": "BenchmarkRegisterRequest",
422
541
  "type": "object",
423
- "x-contract-version": "0.4.4"
542
+ "x-contract-version": "0.4.6"
424
543
  }
@@ -207,7 +207,7 @@
207
207
  ],
208
208
  "title": "SeqFlags",
209
209
  "type": "integer",
210
- "x-contract-version": "0.4.4",
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
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.4"
21
+ "x-contract-version": "0.4.6"
22
22
  }