sequence-base 0.4.14__tar.gz → 0.4.16__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 (106) hide show
  1. {sequence_base-0.4.14 → sequence_base-0.4.16}/PKG-INFO +1 -1
  2. {sequence_base-0.4.14 → sequence_base-0.4.16}/pyproject.toml +1 -1
  3. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/__init__.py +2 -4
  4. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/constants/version.py +3 -1
  5. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/__init__.py +2 -4
  6. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/benchmarks.py +3 -4
  7. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/deployments.py +2 -26
  8. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/eval.py +5 -33
  9. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/flags.py +3 -6
  10. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/policy.py +4 -9
  11. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schema_export.py +0 -4
  12. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ActRequest.json +1 -1
  13. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ActResponse.json +1 -1
  14. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ActionChunk.json +1 -1
  15. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ActionContract.json +1 -1
  16. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ActionStep.json +1 -1
  17. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/AddLocal.json +1 -1
  18. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Autoscaler.json +1 -13
  19. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  20. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/BenchmarkRegisterRequest.json +2 -2
  21. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/BenchmarkSpec.json +4 -13
  22. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  23. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/BootstrapResponse.json +1 -1
  24. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Camera.json +1 -1
  25. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/CodeBundle.json +1 -1
  26. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Concurrency.json +1 -1
  27. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Conditions.json +1 -1
  28. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ConnectRequest.json +1 -1
  29. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ConnectResponse.json +1 -1
  30. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  31. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/DeploymentPolicy.json +1 -13
  32. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/DeploymentRequest.json +2 -58
  33. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  34. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Embodiment.json +1 -1
  35. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ErrorBody.json +1 -1
  36. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ErrorCodes.json +1 -1
  37. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Estimate.json +1 -1
  38. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  39. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/EvalReport.json +1 -1
  40. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/EvalRequest.json +2 -76
  41. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/EvalResponse.json +1 -38
  42. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageFrame.json +1 -1
  43. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageSpec.json +1 -1
  44. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  45. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepApt.json +1 -1
  46. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepEnv.json +1 -1
  47. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepRun.json +1 -1
  48. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
  49. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  50. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/InferParam.json +1 -1
  51. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Lease.json +1 -1
  52. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/MetricAgg.json +1 -1
  53. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Observation.json +1 -1
  54. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ObservationContract.json +1 -1
  55. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/PolicyRegistration.json +5 -76
  56. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/PolicySpec.json +4 -72
  57. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Proprioception.json +1 -1
  58. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/RenderSpec.json +1 -1
  59. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/ReplaySpec.json +1 -1
  60. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Resources.json +2 -2
  61. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/RolloutResult.json +1 -1
  62. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  63. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/SecretInfo.json +1 -1
  64. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/SecretRef.json +1 -1
  65. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/SeqFlags.json +1 -3
  66. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Step.json +1 -1
  67. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/TaskAgg.json +1 -1
  68. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/TemplateFiles.json +1 -1
  69. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Timeouts.json +1 -1
  70. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/UploadTarget.json +1 -1
  71. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/Variant.json +1 -1
  72. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeFile.json +1 -1
  73. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeInfo.json +1 -1
  74. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeMount.json +1 -1
  75. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeRef.json +2 -2
  76. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  77. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  78. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/schemas/WarmingError.json +1 -1
  79. sequence_base-0.4.14/sequence_base/schemas/ClampInfo.json +0 -27
  80. sequence_base-0.4.14/sequence_base/schemas/VolumeAttach.json +0 -26
  81. {sequence_base-0.4.14 → sequence_base-0.4.16}/.gitignore +0 -0
  82. {sequence_base-0.4.14 → sequence_base-0.4.16}/README.md +0 -0
  83. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/auth.py +0 -0
  84. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/codec/__init__.py +0 -0
  85. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/codec/image.py +0 -0
  86. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/constants/__init__.py +0 -0
  87. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/constants/headers.py +0 -0
  88. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/constants/limits.py +0 -0
  89. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/accounts.py +0 -0
  90. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/act.py +0 -0
  91. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/connect.py +0 -0
  92. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/errors.py +0 -0
  93. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/io.py +0 -0
  94. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/templates.py +0 -0
  95. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/volumes.py +0 -0
  96. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/contract/wire.py +0 -0
  97. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/errors/__init__.py +0 -0
  98. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/errors/transport.py +0 -0
  99. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/obs/__init__.py +0 -0
  100. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/obs/log.py +0 -0
  101. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/obs/rid.py +0 -0
  102. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/presets/__init__.py +0 -0
  103. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/presets/frames.py +0 -0
  104. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/presets/robot_arm.py +0 -0
  105. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/telemetry/__init__.py +0 -0
  106. {sequence_base-0.4.14 → sequence_base-0.4.16}/sequence_base/telemetry/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sequence-base
3
- Version: 0.4.14
3
+ Version: 0.4.16
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
  Project-URL: Changelog, https://generalsequences.com/docs/changelog/
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.4.14"
3
+ version = "0.4.16"
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.10"
6
6
  dependencies = ["pydantic>=2.0"]
@@ -43,7 +43,6 @@ from sequence_base.contract import (
43
43
  BenchmarkStatusResponse,
44
44
  BenchmarkSpec,
45
45
  BootstrapResponse,
46
- ClampInfo,
47
46
  CodeBundle,
48
47
  Concurrency,
49
48
  Conditions,
@@ -90,7 +89,6 @@ from sequence_base.contract import (
90
89
  TaskAgg,
91
90
  Timeouts,
92
91
  Variant,
93
- VolumeAttach,
94
92
  VolumeMount,
95
93
  VolumeRef,
96
94
  WarmingError,
@@ -135,13 +133,13 @@ __all__ = [
135
133
  "PolicySpec", "PolicyRegistration",
136
134
 
137
135
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
138
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
136
+ "Resources", "Autoscaler", "Timeouts", "DeploymentPolicy", "InferParam", "DeploymentRequest",
139
137
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
140
138
 
141
139
  "Lease", "ConnectRequest", "ConnectResponse",
142
140
 
143
141
  "Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
144
- "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
142
+ "EvalRequest", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
145
143
  "EvalStatus", "TaskAgg", "MetricAgg", "EvalReport",
146
144
 
147
145
  "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.5.13"
7
+ CONTRACT_VERSION = "0.5.15"
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -53,7 +53,6 @@ from sequence_base.contract.deployments import (
53
53
  DeploymentStatusResponse,
54
54
  Resources,
55
55
  Timeouts,
56
- VolumeAttach,
57
56
  )
58
57
 
59
58
 
@@ -72,7 +71,6 @@ from sequence_base.contract.benchmarks import (
72
71
  Variant,
73
72
  )
74
73
  from sequence_base.contract.eval import (
75
- ClampInfo,
76
74
  Estimate,
77
75
  EvalDryRunResponse,
78
76
  EvalReport,
@@ -123,13 +121,13 @@ __all__ = [
123
121
  "PolicySpec", "PolicyRegistration",
124
122
 
125
123
  "MAX_CODE_BUNDLE_BYTES", "CodeBundle",
126
- "Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
124
+ "Resources", "Autoscaler", "Timeouts", "DeploymentPolicy", "InferParam", "DeploymentRequest",
127
125
  "DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
128
126
 
129
127
  "Lease", "ConnectRequest", "ConnectResponse",
130
128
 
131
129
  "Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
132
- "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
130
+ "EvalRequest", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
133
131
  "EvalStatus", "TaskAgg", "MetricAgg", "EvalReport",
134
132
 
135
133
  "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
@@ -113,8 +113,7 @@ class BenchmarkSpec(BaseModel):
113
113
  ⑦: a benchmark also references secrets by name). `assets` are versioned scene/mesh/URDF/MJCF/USD volumes
114
114
  the worker mounts at /assets (reusing S2's Volume mechanism). `render` optionally declares the mp4.
115
115
  `max_steps` is the platform SAFETY cap (cost backstop, records `truncated` — NOT semantic termination;
116
- `done` is decided by @seq.check). `bindings` covers SETUP / RESET / CHECK / SCORE (ROLLOUT is deprecated
117
- and must not appear)."""
116
+ `done` is decided by @seq.check). `bindings` covers SETUP / RESET / CHECK / SCORE (+ OBSERVE / STEP)."""
118
117
 
119
118
  model_config = ConfigDict(extra="forbid")
120
119
 
@@ -124,7 +123,8 @@ class BenchmarkSpec(BaseModel):
124
123
  max_steps: int = Field(..., description="Platform safety cap; truncates and records truncated")
125
124
  handler_ref: str
126
125
  bindings: dict[SeqFlags, str] = Field(..., description="SETUP / RESET / CHECK / SCORE (+ OBSERVE / STEP) → method name")
127
- gpu: str | list[str] | None = None
126
+
127
+ gpu: str | None = None
128
128
 
129
129
  envs: int | None = Field(default=None, ge=1, le=MAX_ENVS)
130
130
  assets: list[VolumeRef] = Field(default_factory=list)
@@ -146,7 +146,6 @@ class BenchmarkSpec(BaseModel):
146
146
  names = ", ".join(sorted(f.name or str(f.value) for f in bad))
147
147
  raise ValueError(
148
148
  f"benchmark bindings may only cover SETUP / RESET / CHECK / SCORE / OBSERVE / STEP; got disallowed {names}"
149
- " (ROLLOUT is deprecated and must not be bound)"
150
149
  )
151
150
  batched = set(self.bindings) & set(BENCHMARK_BATCHED)
152
151
  if batched and batched != set(BENCHMARK_BATCHED):
@@ -36,7 +36,6 @@ __all__ = [
36
36
  "Resources",
37
37
  "Autoscaler",
38
38
  "Timeouts",
39
- "VolumeAttach",
40
39
  "DeploymentPolicy",
41
40
  "DeploymentRequest",
42
41
  "DeploymentAccepted",
@@ -46,7 +45,8 @@ __all__ = [
46
45
 
47
46
 
48
47
  class Resources(BaseModel):
49
- """The hardware a worker runs on. `gpu` is list[str] (the PolicySpec `str | list[str]` normalized)."""
48
+ """The hardware a worker runs on. `gpu` is list[str], the PolicySpec's one card as a list of one - the shape a
49
+ deployment's spec is kept in, so one stored from before a list was refused (0.4.15) still reads."""
50
50
 
51
51
  model_config = ConfigDict(extra="forbid")
52
52
 
@@ -83,9 +83,6 @@ class Autoscaler(BaseModel):
83
83
  min_containers: int = 0
84
84
 
85
85
 
86
- max_containers: int | None = None
87
-
88
-
89
86
  max_gpus: int | None = Field(default=None, ge=1, le=256)
90
87
  buffer_containers: int | None = None
91
88
  scaledown_window: int = 600
@@ -108,21 +105,6 @@ class Timeouts(BaseModel):
108
105
  startup: int = Field(..., ge=60, le=18000)
109
106
 
110
107
 
111
- class VolumeAttach(BaseModel):
112
- """A non-weights volume mount in the deploy body (goal 7). Distinct from `weights` (a `VolumeMount`,
113
- a provisioned pull at the reserved `/data`): an explicit `volumes=` attachment names a persistent
114
- volume by `vol://<name>` ref, pins its container `mount`, and carries the `create_if_missing`
115
- provisioning intent so the gateway either binds an existing volume or creates it — the semantic the
116
- wire `VolumeMount` deliberately does not carry. Not reused/extended from `VolumeMount` because
117
- `create_if_missing` is meaningless for the weights pull."""
118
-
119
- model_config = ConfigDict(extra="forbid")
120
-
121
- uri: str
122
- mount: str
123
- create_if_missing: bool
124
-
125
-
126
108
  class InferParam(BaseModel):
127
109
  """One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`
128
110
  — with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to
@@ -190,9 +172,6 @@ class DeploymentPolicy(BaseModel):
190
172
  handler_ref: str
191
173
  action: ActionContract | None = None
192
174
  streaming: bool = False
193
-
194
-
195
- frames_per_chunk: int | None = None
196
175
  secrets: list[SecretRef] = Field(default_factory=list)
197
176
 
198
177
 
@@ -289,9 +268,6 @@ class DeploymentRequest(BaseModel):
289
268
 
290
269
 
291
270
  image_context: CodeBundle | None = None
292
-
293
-
294
- volumes: list[VolumeAttach] = Field(default_factory=list)
295
271
  autoscaler: Autoscaler = Field(default_factory=Autoscaler)
296
272
 
297
273
  concurrency: Concurrency = Field(default_factory=Concurrency)
@@ -18,7 +18,6 @@ from sequence_base.constants.limits import MAX_ENVS, MAX_USD
18
18
 
19
19
  __all__ = [
20
20
  "EvalRequest",
21
- "ClampInfo",
22
21
  "ArmReport",
23
22
  "EvalTiming",
24
23
  "Estimate",
@@ -45,9 +44,11 @@ class EvalRequest(BaseModel):
45
44
  """`POST /v1/eval`. A real eval names `model` + `benchmark`; a rerun (`rerun_of` / `rerun_unsuccessful_of`) may
46
45
  leave them out and take the earlier eval's. `dry_run` selects the estimate-only response shape below.
47
46
 
48
- The one body the platform accepts: the current knobs plus the legacy names an older SDK still sends — `gpus` /
49
- `envs_per_gpu` for the machine counts, `region` — each taken and mapped, or refused with the way on,
50
- never silently dropped. The gateway inherits this model rather than keeping its own."""
47
+ The one body the platform accepts, the newest SDK's: the names an older SDK sent (`gpus`, `envs_per_gpu`,
48
+ `benchmark_gpu`, `region`) are gone, refused as any field this body does not define, since every client the
49
+ platform serves is the newest (the user 10-19: "This is the latest version that we want everything to be based on,
50
+ so delete all the old stuff"). The gateway inherits this model rather than keeping its own.
51
+ """
51
52
 
52
53
 
53
54
 
@@ -69,22 +70,10 @@ class EvalRequest(BaseModel):
69
70
  policy_machines: int | None = Field(default=None, ge=1, le=64)
70
71
  policy_gpu: str | None = Field(default=None, max_length=32)
71
72
  benchmark_machines: int | None = Field(default=None, ge=1, le=64)
72
-
73
-
74
-
75
- benchmark_gpu: str | None = Field(default=None, max_length=32, json_schema_extra={"deprecated": True},
76
- description="Not accepted: an eval runs on the card its benchmark was registered "
77
- "on, so a card is refused. Omit it (an older SDK still sends it).")
78
73
  envs: int | None = Field(default=None, ge=1)
79
-
80
- gpus: int = Field(default=1, ge=1, le=64, json_schema_extra={"deprecated": True},
81
- description="Deprecated name (sequence-ai <= 0.28) for policy_machines; use policy_machines.")
82
- envs_per_gpu: int | None = Field(default=None, ge=1, le=1024, json_schema_extra={"deprecated": True},
83
- description="Deprecated name (sequence-ai <= 0.28) for envs; use envs.")
84
74
  adapter: str | None = Field(default=None, max_length=200)
85
75
 
86
76
 
87
- compare: str | list[str] | None = Field(default=None, description="Other model ids to compare against")
88
77
  sweep: dict[str, list[int | float | bool | str]] | None = Field(default=None, max_length=8)
89
78
  dry_run: bool = False
90
79
 
@@ -112,11 +101,6 @@ class EvalRequest(BaseModel):
112
101
 
113
102
  replay: Literal["3d", "none"] | None = None
114
103
 
115
-
116
- region: str | None = Field(default=None, max_length=32, json_schema_extra={"deprecated": True},
117
- description="Not accepted: an eval's machines run wherever there are cards, so a region "
118
- "is refused. Omit it (an older SDK still sends it).")
119
-
120
104
  @field_validator("envs")
121
105
  @classmethod
122
106
  def _envs_cap(cls, v: int | None) -> int | None:
@@ -146,16 +130,6 @@ class EvalRequest(BaseModel):
146
130
  return self
147
131
 
148
132
 
149
- class ClampInfo(BaseModel):
150
- """Why the granted GPU count was clamped below the request — structured, not a bare value."""
151
-
152
- model_config = ConfigDict(extra="forbid")
153
-
154
- limit: str = Field(..., description="Which limit bound it, e.g. 'account_quota'")
155
- requested: int
156
- granted: int
157
-
158
-
159
133
  class Estimate(BaseModel):
160
134
  model_config = ConfigDict(extra="forbid")
161
135
 
@@ -180,7 +154,6 @@ class EvalResponse(BaseModel):
180
154
  eval_id: str
181
155
  gpus_granted: int
182
156
  estimate: Estimate
183
- clamped_by: ClampInfo | None = None
184
157
 
185
158
  queue: EvalQueue | None = None
186
159
 
@@ -381,7 +354,6 @@ class EvalReport(BaseModel):
381
354
  default_factory=list, description="Why episodes or the run failed, so an incomplete report says why"
382
355
  )
383
356
 
384
-
385
357
  arms: list[ArmReport] | None = None
386
358
  timing: EvalTiming | None = None
387
359
 
@@ -9,12 +9,12 @@ plan step; and the benchmark SETUP / RESET / CHECK / SCORE quartet.
9
9
  eval-raw revision: the platform provides the reset→step→check loop as a tool; the user defines the goal
10
10
  through four hooks — SETUP (load sim + assets), RESET (build one episode's env), CHECK (per-step: read raw
11
11
  env state → done + user-named metrics), SCORE (cross-episode aggregate). RESET=32768 and CHECK=65536 are
12
- the new hook bits. The old single-hook `ROLLOUT` is DEPRECATED: bit 8192 stays reserved (never reused for
13
- another member) but appears in NO bindings — the setup/reset/check/score model replaces it.
12
+ the new hook bits. Bit 8192 was the old single-hook ROLLOUT, gone with every SDK that knew it (sequence-base 0.4.15):
13
+ it stays unused, never given to another member, so nothing serialized before reads as a hook it never was.
14
14
 
15
15
  The exact bit values are the contract: a registration serialized by one version must decode the same in
16
16
  another. A member taking the wrong value, WARMUP collapsing back into LOAD, RESET/CHECK overlapping an
17
- existing bit, or ROLLOUT being re-bound is caught bit-by-bit (see tests), not waved away with "an IntFlag
17
+ existing bit, or bit 8192 being given out again is caught bit-by-bit (see tests), not waved away with "an IntFlag
18
18
  is naturally bit-composable".
19
19
  """
20
20
  from __future__ import annotations
@@ -48,9 +48,6 @@ class SeqFlags(IntFlag):
48
48
 
49
49
 
50
50
 
51
- ROLLOUT = 8192
52
-
53
-
54
51
 
55
52
 
56
53
  BENCHMARK_BINDABLE: frozenset[SeqFlags] = frozenset(
@@ -172,7 +172,7 @@ class VolumeMount(BaseModel):
172
172
 
173
173
 
174
174
  class VolumeRef(BaseModel):
175
- """PolicySpec.volumes value — at least a `uri`; a `mount` may pin the container path."""
175
+ """A volume a benchmark mounts (BenchmarkSpec.assets): at least a `uri`; a `mount` may pin the container path."""
176
176
 
177
177
  model_config = ConfigDict(extra="forbid")
178
178
 
@@ -243,17 +243,15 @@ class PolicySpec(BaseModel):
243
243
  model_config = ConfigDict(extra="forbid")
244
244
 
245
245
  name: str
246
- gpu: str | list[str] = Field(..., description="A GPU type, or a list = cross-provider fallback")
246
+
247
+
248
+ gpu: str = Field(..., description='The one card a worker runs on: "L4", "H100:2" for two of one type, or "cpu"')
247
249
  image: ImageSpec
248
250
 
249
251
  weights: str | None = Field(None, description="Weights URI: template:// (an official template), hf:// or vol:// "
250
252
  "(an uploaded volume); none for a policy without a checkpoint")
251
- volumes: dict[str, VolumeRef] = Field(default_factory=dict)
252
253
  secrets: list[SecretRef] = Field(default_factory=list)
253
254
  min_containers: int = 0
254
-
255
-
256
- max_containers: int | None = None
257
255
  max_gpus: int | None = Field(default=None, ge=1, le=256)
258
256
  buffer_containers: int | None = None
259
257
  scaledown_window: int = 600
@@ -262,9 +260,6 @@ class PolicySpec(BaseModel):
262
260
  concurrency: Concurrency | None = None
263
261
  streaming: bool = False
264
262
 
265
-
266
- frames_per_chunk: int | None = None
267
-
268
263
  action: ActionContract | None = None
269
264
 
270
265
  observation: ObservationContract | None = None
@@ -56,7 +56,6 @@ from sequence_base.contract.deployments import (
56
56
  DeploymentStatusResponse,
57
57
  Resources,
58
58
  Timeouts,
59
- VolumeAttach,
60
59
  )
61
60
  from sequence_base.contract.errors import ErrorBody, WarmingError, error_codes_json_schema
62
61
  from sequence_base.contract.volumes import (
@@ -67,7 +66,6 @@ from sequence_base.contract.volumes import (
67
66
  VolumeUploadResponse,
68
67
  )
69
68
  from sequence_base.contract.eval import (
70
- ClampInfo,
71
69
  Estimate,
72
70
  EvalDryRunResponse,
73
71
  EvalReport,
@@ -136,7 +134,6 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
136
134
  "Resources": Resources,
137
135
  "Autoscaler": Autoscaler,
138
136
  "Timeouts": Timeouts,
139
- "VolumeAttach": VolumeAttach,
140
137
  "CodeBundle": CodeBundle,
141
138
  "DeploymentPolicy": DeploymentPolicy,
142
139
  "InferParam": InferParam,
@@ -159,7 +156,6 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
159
156
  "BenchmarkStatusResponse": BenchmarkStatusResponse,
160
157
 
161
158
  "EvalRequest": EvalRequest,
162
- "ClampInfo": ClampInfo,
163
159
  "Estimate": Estimate,
164
160
  "EvalResponse": EvalResponse,
165
161
  "EvalDryRunResponse": EvalDryRunResponse,
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "ActRequest",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.13"
82
+ "x-contract-version": "0.5.15"
83
83
  }
@@ -89,5 +89,5 @@
89
89
  ],
90
90
  "title": "ActResponse",
91
91
  "type": "object",
92
- "x-contract-version": "0.5.13"
92
+ "x-contract-version": "0.5.15"
93
93
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.13"
102
+ "x-contract-version": "0.5.15"
103
103
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "ActionContract",
86
86
  "type": "object",
87
- "x-contract-version": "0.5.13"
87
+ "x-contract-version": "0.5.15"
88
88
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.5.13"
22
+ "x-contract-version": "0.5.15"
23
23
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.13"
26
+ "x-contract-version": "0.5.15"
27
27
  }
@@ -14,18 +14,6 @@
14
14
  "default": null,
15
15
  "title": "Buffer Containers"
16
16
  },
17
- "max_containers": {
18
- "anyOf": [
19
- {
20
- "type": "integer"
21
- },
22
- {
23
- "type": "null"
24
- }
25
- ],
26
- "default": null,
27
- "title": "Max Containers"
28
- },
29
17
  "max_gpus": {
30
18
  "anyOf": [
31
19
  {
@@ -69,5 +57,5 @@
69
57
  },
70
58
  "title": "Autoscaler",
71
59
  "type": "object",
72
- "x-contract-version": "0.5.13"
60
+ "x-contract-version": "0.5.15"
73
61
  }
@@ -50,5 +50,5 @@
50
50
  ],
51
51
  "title": "BenchmarkConditionSpec",
52
52
  "type": "object",
53
- "x-contract-version": "0.5.13"
53
+ "x-contract-version": "0.5.15"
54
54
  }
@@ -664,7 +664,7 @@
664
664
  },
665
665
  "VolumeRef": {
666
666
  "additionalProperties": false,
667
- "description": "PolicySpec.volumes value — at least a `uri`; a `mount` may pin the container path.",
667
+ "description": "A volume a benchmark mounts (BenchmarkSpec.assets): at least a `uri`; a `mount` may pin the container path.",
668
668
  "properties": {
669
669
  "mount": {
670
670
  "anyOf": [
@@ -962,5 +962,5 @@
962
962
  ],
963
963
  "title": "BenchmarkRegisterRequest",
964
964
  "type": "object",
965
- "x-contract-version": "0.5.13"
965
+ "x-contract-version": "0.5.15"
966
966
  }
@@ -359,7 +359,6 @@
359
359
  16,
360
360
  1024,
361
361
  4096,
362
- 8192,
363
362
  16384,
364
363
  32768,
365
364
  65536,
@@ -368,7 +367,7 @@
368
367
  ],
369
368
  "title": "SeqFlags",
370
369
  "type": "integer",
371
- "x-contract-version": "0.5.13",
370
+ "x-contract-version": "0.5.15",
372
371
  "x-flag-names": {
373
372
  "CHECK": 65536,
374
373
  "INFER": 16,
@@ -377,7 +376,6 @@
377
376
  "ON_EPISODE": 1024,
378
377
  "PLAN": 4,
379
378
  "RESET": 32768,
380
- "ROLLOUT": 8192,
381
379
  "SCORE": 16384,
382
380
  "SETUP": 4096,
383
381
  "SHUTDOWN": 8,
@@ -435,7 +433,7 @@
435
433
  },
436
434
  "VolumeRef": {
437
435
  "additionalProperties": false,
438
- "description": "PolicySpec.volumes value — at least a `uri`; a `mount` may pin the container path.",
436
+ "description": "A volume a benchmark mounts (BenchmarkSpec.assets): at least a `uri`; a `mount` may pin the container path.",
439
437
  "properties": {
440
438
  "mount": {
441
439
  "anyOf": [
@@ -462,7 +460,7 @@
462
460
  }
463
461
  },
464
462
  "additionalProperties": false,
465
- "description": "What `@seq.benchmark(...)` accrues — symmetric to PolicySpec. `secrets` are by-name only (accounts\n⑦: a benchmark also references secrets by name). `assets` are versioned scene/mesh/URDF/MJCF/USD volumes\nthe worker mounts at /assets (reusing S2's Volume mechanism). `render` optionally declares the mp4.\n`max_steps` is the platform SAFETY cap (cost backstop, records `truncated` — NOT semantic termination;\n`done` is decided by @seq.check). `bindings` covers SETUP / RESET / CHECK / SCORE (ROLLOUT is deprecated\nand must not appear).",
463
+ "description": "What `@seq.benchmark(...)` accrues — symmetric to PolicySpec. `secrets` are by-name only (accounts\n⑦: a benchmark also references secrets by name). `assets` are versioned scene/mesh/URDF/MJCF/USD volumes\nthe worker mounts at /assets (reusing S2's Volume mechanism). `render` optionally declares the mp4.\n`max_steps` is the platform SAFETY cap (cost backstop, records `truncated` — NOT semantic termination;\n`done` is decided by @seq.check). `bindings` covers SETUP / RESET / CHECK / SCORE (+ OBSERVE / STEP).",
466
464
  "properties": {
467
465
  "assets": {
468
466
  "items": {
@@ -485,7 +483,6 @@
485
483
  "16",
486
484
  "1024",
487
485
  "4096",
488
- "8192",
489
486
  "16384",
490
487
  "32768",
491
488
  "65536",
@@ -544,12 +541,6 @@
544
541
  {
545
542
  "type": "string"
546
543
  },
547
- {
548
- "items": {
549
- "type": "string"
550
- },
551
- "type": "array"
552
- },
553
544
  {
554
545
  "type": "null"
555
546
  }
@@ -625,5 +616,5 @@
625
616
  ],
626
617
  "title": "BenchmarkSpec",
627
618
  "type": "object",
628
- "x-contract-version": "0.5.13"
619
+ "x-contract-version": "0.5.15"
629
620
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.13"
43
+ "x-contract-version": "0.5.15"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.13"
82
+ "x-contract-version": "0.5.15"
83
83
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "Camera",
74
74
  "type": "object",
75
- "x-contract-version": "0.5.13"
75
+ "x-contract-version": "0.5.15"
76
76
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.13"
26
+ "x-contract-version": "0.5.15"
27
27
  }
@@ -96,5 +96,5 @@
96
96
  },
97
97
  "title": "Concurrency",
98
98
  "type": "object",
99
- "x-contract-version": "0.5.13"
99
+ "x-contract-version": "0.5.15"
100
100
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.13"
58
+ "x-contract-version": "0.5.15"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.13"
28
+ "x-contract-version": "0.5.15"
29
29
  }
@@ -310,5 +310,5 @@
310
310
  ],
311
311
  "title": "ConnectResponse",
312
312
  "type": "object",
313
- "x-contract-version": "0.5.13"
313
+ "x-contract-version": "0.5.15"
314
314
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.5.13"
21
+ "x-contract-version": "0.5.15"
22
22
  }
@@ -408,18 +408,6 @@
408
408
  "default": null,
409
409
  "title": "Family"
410
410
  },
411
- "frames_per_chunk": {
412
- "anyOf": [
413
- {
414
- "type": "integer"
415
- },
416
- {
417
- "type": "null"
418
- }
419
- ],
420
- "default": null,
421
- "title": "Frames Per Chunk"
422
- },
423
411
  "handler_ref": {
424
412
  "title": "Handler Ref",
425
413
  "type": "string"
@@ -498,5 +486,5 @@
498
486
  ],
499
487
  "title": "DeploymentPolicy",
500
488
  "type": "object",
501
- "x-contract-version": "0.5.13"
489
+ "x-contract-version": "0.5.15"
502
490
  }