sequence-base 0.4.4__tar.gz → 0.4.6__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.
- {sequence_base-0.4.4 → sequence_base-0.4.6}/PKG-INFO +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/pyproject.toml +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/__init__.py +2 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/constants/version.py +4 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/__init__.py +2 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/benchmarks.py +25 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/eval.py +3 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/policy.py +23 -2
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/wire.py +7 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schema_export.py +2 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ActRequest.json +15 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ActResponse.json +15 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ActionChunk.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ActionContract.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/AdapterTransform.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/AddLocal.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BenchmarkRegisterRequest.json +67 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BenchmarkSpec.json +68 -2
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BootstrapResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ClampInfo.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Concurrency.json +21 -2
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ConnectResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/DeploymentPolicy.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/DeploymentRequest.json +21 -2
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Embodiment.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Estimate.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/EvalReport.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/EvalRequest.json +17 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/EvalResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageSpec.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepRun.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/InferParam.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/LossyTransform.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/ObservationContract.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/PolicyRegistration.json +22 -3
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/PolicySpec.json +21 -2
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/RenderSpec.json +1 -1
- sequence_base-0.4.6/sequence_base/schemas/ReplaySpec.json +56 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/RolloutResult.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/SecretCreateRequest.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/SecretRef.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/SuiteAgg.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/TaskAgg.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/TemplateFiles.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeAttach.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/WarmingError.json +1 -1
- {sequence_base-0.4.4 → sequence_base-0.4.6}/.gitignore +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/README.md +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/auth.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/codec/image.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/constants/headers.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/accounts.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/act.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/connect.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/deployments.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/errors.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/flags.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/io.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/templates.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/contract/volumes.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/obs/log.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/obs/rid.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/presets/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/presets/robot_arm.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/telemetry/__init__.py +0 -0
- {sequence_base-0.4.4 → sequence_base-0.4.6}/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.
|
|
3
|
+
Version: 0.4.6
|
|
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.
|
|
3
|
+
version = "0.4.6"
|
|
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"]
|
|
@@ -82,6 +82,7 @@ from sequence_base.contract import (
|
|
|
82
82
|
PolicySpec,
|
|
83
83
|
Proprioception,
|
|
84
84
|
RenderSpec,
|
|
85
|
+
ReplaySpec,
|
|
85
86
|
Resources,
|
|
86
87
|
RolloutResult,
|
|
87
88
|
SecretCreateRequest,
|
|
@@ -139,7 +140,7 @@ __all__ = [
|
|
|
139
140
|
|
|
140
141
|
"Lease", "ConnectRequest", "ConnectResponse",
|
|
141
142
|
|
|
142
|
-
"Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
143
|
+
"Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
143
144
|
"EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
|
|
144
145
|
"EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
|
|
145
146
|
"AdapterKind", "AdapterTransform",
|
|
@@ -67,6 +67,7 @@ from sequence_base.contract.benchmarks import (
|
|
|
67
67
|
BenchmarkSpec,
|
|
68
68
|
Conditions,
|
|
69
69
|
RenderSpec,
|
|
70
|
+
ReplaySpec,
|
|
70
71
|
Step,
|
|
71
72
|
Variant,
|
|
72
73
|
)
|
|
@@ -131,7 +132,7 @@ __all__ = [
|
|
|
131
132
|
|
|
132
133
|
"Lease", "ConnectRequest", "ConnectResponse",
|
|
133
134
|
|
|
134
|
-
"Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
135
|
+
"Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
135
136
|
"EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
|
|
136
137
|
"EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
|
|
137
138
|
"AdapterKind", "AdapterTransform",
|
|
@@ -25,6 +25,7 @@ __all__ = [
|
|
|
25
25
|
"Variant",
|
|
26
26
|
"Conditions",
|
|
27
27
|
"RenderSpec",
|
|
28
|
+
"ReplaySpec",
|
|
28
29
|
"Step",
|
|
29
30
|
"BenchmarkSpec",
|
|
30
31
|
"BenchmarkRegisterRequest",
|
|
@@ -69,6 +70,26 @@ class RenderSpec(BaseModel):
|
|
|
69
70
|
"None: as drawn")
|
|
70
71
|
|
|
71
72
|
|
|
73
|
+
class ReplaySpec(BaseModel):
|
|
74
|
+
"""a.k.a. `seq.Replay` — declares that the platform records the eval's 3D replay: each step every node's world
|
|
75
|
+
transform, drawn in the owner's browser after the eval. `engine` picks the platform's
|
|
76
|
+
adapter that reads the simulation's state ("mujoco", "sapien", "isaac"); "own" means the benchmark hands the frames itself
|
|
77
|
+
(`seq.replay.scene` / `seq.replay.frame`); None takes the benchmark's own `engine`. `state` names the benchmark
|
|
78
|
+
method an adapter calls for the engine's state of an env (or of a batched benchmark's slots), `looks` the one that
|
|
79
|
+
says what the adapter cannot read - a colour or a visibility each episode sets. Whether an eval records it is the
|
|
80
|
+
eval's `replay` ("3d" by default, "none")."""
|
|
81
|
+
|
|
82
|
+
model_config = ConfigDict(extra="forbid")
|
|
83
|
+
|
|
84
|
+
engine: Literal["mujoco", "sapien", "isaac", "own"] | None = Field(
|
|
85
|
+
None, description="The adapter that reads the simulation: 'mujoco' (incl. MuJoCo Warp), 'sapien', 'isaac', or "
|
|
86
|
+
"'own' (the benchmark hands frames itself); None: the benchmark's engine")
|
|
87
|
+
state: str | None = Field(None, pattern=r"^[A-Za-z_][A-Za-z0-9_]*$",
|
|
88
|
+
description="The benchmark method an adapter calls for an env's (or slots') engine state")
|
|
89
|
+
looks: str | None = Field(None, pattern=r"^[A-Za-z_][A-Za-z0-9_]*$",
|
|
90
|
+
description="The benchmark method that says each episode's colours or visibility")
|
|
91
|
+
|
|
92
|
+
|
|
72
93
|
class Step(BaseModel):
|
|
73
94
|
"""What `@seq.check` returns each step. The platform settles each env per-step from this and NEVER
|
|
74
95
|
invents a success metric — `done` is the user's call, and `metrics` keys are user-named (the platform
|
|
@@ -107,6 +128,8 @@ class BenchmarkSpec(BaseModel):
|
|
|
107
128
|
envs: int | None = Field(default=None, ge=1, le=65536)
|
|
108
129
|
assets: list[VolumeRef] = Field(default_factory=list)
|
|
109
130
|
render: RenderSpec | None = None
|
|
131
|
+
|
|
132
|
+
replay: ReplaySpec | None = None
|
|
110
133
|
cpu: int | None = None
|
|
111
134
|
memory_gb: int | None = None
|
|
112
135
|
secrets: list[SecretRef] = Field(default_factory=list)
|
|
@@ -158,6 +181,8 @@ class BenchmarkRegisterRequest(BaseModel):
|
|
|
158
181
|
handler_ref: str
|
|
159
182
|
assets: list[VolumeRef] = Field(default_factory=list)
|
|
160
183
|
render: RenderSpec | None = None
|
|
184
|
+
|
|
185
|
+
replay: ReplaySpec | None = None
|
|
161
186
|
cpu: int | None = None
|
|
162
187
|
memory_gb: int | None = None
|
|
163
188
|
|
|
@@ -82,6 +82,9 @@ class EvalRequest(BaseModel):
|
|
|
82
82
|
record: Literal["per-task", "all", "none"] | None = None
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
replay: Literal["3d", "none"] | None = None
|
|
86
|
+
|
|
87
|
+
|
|
85
88
|
class ClampInfo(BaseModel):
|
|
86
89
|
"""Why the granted GPU count was clamped below the request — structured, not a bare value."""
|
|
87
90
|
|
|
@@ -10,7 +10,7 @@ from __future__ import annotations
|
|
|
10
10
|
|
|
11
11
|
import re
|
|
12
12
|
|
|
13
|
-
from typing import
|
|
13
|
+
from typing import Literal
|
|
14
14
|
|
|
15
15
|
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
16
16
|
|
|
@@ -185,10 +185,27 @@ class Concurrency(BaseModel):
|
|
|
185
185
|
its own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the
|
|
186
186
|
worker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions
|
|
187
187
|
a worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the
|
|
188
|
-
slots.
|
|
188
|
+
slots.
|
|
189
|
+
|
|
190
|
+
`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the
|
|
191
|
+
most acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act
|
|
192
|
+
alone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,
|
|
193
|
+
planning when each sends - apart while each can be served alone, together only when they cannot; False seats
|
|
194
|
+
max_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something
|
|
195
|
+
only beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader
|
|
196
|
+
takes it for one robot a copy. The SDK takes `gpus_per_replica` and
|
|
197
|
+
`replica_start` in `@seq.policy(...)` from then on.
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's
|
|
201
|
+
request still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.
|
|
202
|
+
|
|
203
|
+
"""
|
|
189
204
|
|
|
190
205
|
model_config = ConfigDict(extra="forbid")
|
|
191
206
|
|
|
207
|
+
max_concurrent: int | None = Field(default=None, ge=2, le=256)
|
|
208
|
+
dynamic: bool = True
|
|
192
209
|
max_inputs: int | None = Field(default=None, ge=1, le=1024)
|
|
193
210
|
target_inputs: int | None = Field(default=None, ge=1, le=1024)
|
|
194
211
|
replicas_per_gpu: int | None = Field(default=None, ge=1, le=64)
|
|
@@ -201,6 +218,10 @@ class Concurrency(BaseModel):
|
|
|
201
218
|
|
|
202
219
|
@model_validator(mode="after")
|
|
203
220
|
def _consistent(self) -> "Concurrency":
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
if self.dynamic is False and self.max_concurrent is None:
|
|
224
|
+
raise ValueError("dynamic=False seats max_concurrent robots a worker: it needs max_concurrent")
|
|
204
225
|
if self.max_inputs is not None and self.target_inputs is not None and self.max_inputs < self.target_inputs:
|
|
205
226
|
raise ValueError("max_inputs must be at least target_inputs")
|
|
206
227
|
if (self.gpus_per_replica or 1) > 1 and (self.replicas_per_gpu or 1) > 1:
|
|
@@ -37,6 +37,10 @@ class ActRequest(BaseModel):
|
|
|
37
37
|
description="Robot-arm preset only: which declared embodiment this session drives")
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
plan: dict[str, Any] | None = Field(default=None,
|
|
41
|
+
description="The robot's session, the steps it holds, its rate and network p95")
|
|
42
|
+
|
|
43
|
+
|
|
40
44
|
class ActResponse(BaseModel):
|
|
41
45
|
"""200 from /act, version 2. `outputs` is infer()'s return value, unchanged; the rest is platform metadata."""
|
|
42
46
|
|
|
@@ -51,3 +55,6 @@ class ActResponse(BaseModel):
|
|
|
51
55
|
|
|
52
56
|
action_chunk: dict[str, Any] | None = Field(default=None,
|
|
53
57
|
description="Version-1 key for a robot-arm preset chunk (= outputs)")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
plan: dict[str, Any] | None = Field(default=None, description="When to send the next act, and how this chunk plays")
|
|
@@ -40,6 +40,7 @@ from sequence_base.contract.benchmarks import (
|
|
|
40
40
|
BenchmarkSpec,
|
|
41
41
|
Conditions,
|
|
42
42
|
RenderSpec,
|
|
43
|
+
ReplaySpec,
|
|
43
44
|
Step,
|
|
44
45
|
Variant,
|
|
45
46
|
)
|
|
@@ -153,6 +154,7 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
|
|
|
153
154
|
"Variant": Variant,
|
|
154
155
|
"Conditions": Conditions,
|
|
155
156
|
"RenderSpec": RenderSpec,
|
|
157
|
+
"ReplaySpec": ReplaySpec,
|
|
156
158
|
"Step": Step,
|
|
157
159
|
"BenchmarkSpec": BenchmarkSpec,
|
|
158
160
|
"BenchmarkConditionSpec": BenchmarkConditionSpec,
|
|
@@ -46,6 +46,20 @@
|
|
|
46
46
|
"description": "Values for the inference parameters the policy declares",
|
|
47
47
|
"title": "Params"
|
|
48
48
|
},
|
|
49
|
+
"plan": {
|
|
50
|
+
"anyOf": [
|
|
51
|
+
{
|
|
52
|
+
"additionalProperties": true,
|
|
53
|
+
"type": "object"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "null"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"default": null,
|
|
60
|
+
"description": "The robot's session, the steps it holds, its rate and network p95",
|
|
61
|
+
"title": "Plan"
|
|
62
|
+
},
|
|
49
63
|
"seed": {
|
|
50
64
|
"anyOf": [
|
|
51
65
|
{
|
|
@@ -65,5 +79,5 @@
|
|
|
65
79
|
],
|
|
66
80
|
"title": "ActRequest",
|
|
67
81
|
"type": "object",
|
|
68
|
-
"x-contract-version": "0.5.
|
|
82
|
+
"x-contract-version": "0.5.6"
|
|
69
83
|
}
|
|
@@ -34,6 +34,20 @@
|
|
|
34
34
|
"description": "Per-phase timings of this call",
|
|
35
35
|
"title": "Perf"
|
|
36
36
|
},
|
|
37
|
+
"plan": {
|
|
38
|
+
"anyOf": [
|
|
39
|
+
{
|
|
40
|
+
"additionalProperties": true,
|
|
41
|
+
"type": "object"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "null"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"default": null,
|
|
48
|
+
"description": "When to send the next act, and how this chunk plays",
|
|
49
|
+
"title": "Plan"
|
|
50
|
+
},
|
|
37
51
|
"request_id": {
|
|
38
52
|
"anyOf": [
|
|
39
53
|
{
|
|
@@ -75,5 +89,5 @@
|
|
|
75
89
|
],
|
|
76
90
|
"title": "ActResponse",
|
|
77
91
|
"type": "object",
|
|
78
|
-
"x-contract-version": "0.5.
|
|
92
|
+
"x-contract-version": "0.5.6"
|
|
79
93
|
}
|
{sequence_base-0.4.4 → sequence_base-0.4.6}/sequence_base/schemas/BenchmarkRegisterRequest.json
RENAMED
|
@@ -588,6 +588,61 @@
|
|
|
588
588
|
"title": "RenderSpec",
|
|
589
589
|
"type": "object"
|
|
590
590
|
},
|
|
591
|
+
"ReplaySpec": {
|
|
592
|
+
"additionalProperties": false,
|
|
593
|
+
"description": "a.k.a. `seq.Replay` — declares that the platform records the eval's 3D replay: each step every node's world\ntransform, drawn in the owner's browser after the eval. `engine` picks the platform's\nadapter that reads the simulation's state (\"mujoco\", \"sapien\", \"isaac\"); \"own\" means the benchmark hands the frames itself\n(`seq.replay.scene` / `seq.replay.frame`); None takes the benchmark's own `engine`. `state` names the benchmark\nmethod an adapter calls for the engine's state of an env (or of a batched benchmark's slots), `looks` the one that\nsays what the adapter cannot read - a colour or a visibility each episode sets. Whether an eval records it is the\neval's `replay` (\"3d\" by default, \"none\").",
|
|
594
|
+
"properties": {
|
|
595
|
+
"engine": {
|
|
596
|
+
"anyOf": [
|
|
597
|
+
{
|
|
598
|
+
"enum": [
|
|
599
|
+
"mujoco",
|
|
600
|
+
"sapien",
|
|
601
|
+
"isaac",
|
|
602
|
+
"own"
|
|
603
|
+
],
|
|
604
|
+
"type": "string"
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"type": "null"
|
|
608
|
+
}
|
|
609
|
+
],
|
|
610
|
+
"default": null,
|
|
611
|
+
"description": "The adapter that reads the simulation: 'mujoco' (incl. MuJoCo Warp), 'sapien', 'isaac', or 'own' (the benchmark hands frames itself); None: the benchmark's engine",
|
|
612
|
+
"title": "Engine"
|
|
613
|
+
},
|
|
614
|
+
"looks": {
|
|
615
|
+
"anyOf": [
|
|
616
|
+
{
|
|
617
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
|
|
618
|
+
"type": "string"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"type": "null"
|
|
622
|
+
}
|
|
623
|
+
],
|
|
624
|
+
"default": null,
|
|
625
|
+
"description": "The benchmark method that says each episode's colours or visibility",
|
|
626
|
+
"title": "Looks"
|
|
627
|
+
},
|
|
628
|
+
"state": {
|
|
629
|
+
"anyOf": [
|
|
630
|
+
{
|
|
631
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
|
|
632
|
+
"type": "string"
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"type": "null"
|
|
636
|
+
}
|
|
637
|
+
],
|
|
638
|
+
"default": null,
|
|
639
|
+
"description": "The benchmark method an adapter calls for an env's (or slots') engine state",
|
|
640
|
+
"title": "State"
|
|
641
|
+
}
|
|
642
|
+
},
|
|
643
|
+
"title": "ReplaySpec",
|
|
644
|
+
"type": "object"
|
|
645
|
+
},
|
|
591
646
|
"SecretRef": {
|
|
592
647
|
"additionalProperties": false,
|
|
593
648
|
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\nplatform keeps the value and injects it when a worker starts. Never carries a value.",
|
|
@@ -864,6 +919,17 @@
|
|
|
864
919
|
],
|
|
865
920
|
"default": null
|
|
866
921
|
},
|
|
922
|
+
"replay": {
|
|
923
|
+
"anyOf": [
|
|
924
|
+
{
|
|
925
|
+
"$ref": "#/$defs/ReplaySpec"
|
|
926
|
+
},
|
|
927
|
+
{
|
|
928
|
+
"type": "null"
|
|
929
|
+
}
|
|
930
|
+
],
|
|
931
|
+
"default": null
|
|
932
|
+
},
|
|
867
933
|
"score": {
|
|
868
934
|
"default": false,
|
|
869
935
|
"title": "Score",
|
|
@@ -906,5 +972,5 @@
|
|
|
906
972
|
],
|
|
907
973
|
"title": "BenchmarkRegisterRequest",
|
|
908
974
|
"type": "object",
|
|
909
|
-
"x-contract-version": "0.5.
|
|
975
|
+
"x-contract-version": "0.5.6"
|
|
910
976
|
}
|
|
@@ -278,6 +278,61 @@
|
|
|
278
278
|
"title": "RenderSpec",
|
|
279
279
|
"type": "object"
|
|
280
280
|
},
|
|
281
|
+
"ReplaySpec": {
|
|
282
|
+
"additionalProperties": false,
|
|
283
|
+
"description": "a.k.a. `seq.Replay` — declares that the platform records the eval's 3D replay: each step every node's world\ntransform, drawn in the owner's browser after the eval. `engine` picks the platform's\nadapter that reads the simulation's state (\"mujoco\", \"sapien\", \"isaac\"); \"own\" means the benchmark hands the frames itself\n(`seq.replay.scene` / `seq.replay.frame`); None takes the benchmark's own `engine`. `state` names the benchmark\nmethod an adapter calls for the engine's state of an env (or of a batched benchmark's slots), `looks` the one that\nsays what the adapter cannot read - a colour or a visibility each episode sets. Whether an eval records it is the\neval's `replay` (\"3d\" by default, \"none\").",
|
|
284
|
+
"properties": {
|
|
285
|
+
"engine": {
|
|
286
|
+
"anyOf": [
|
|
287
|
+
{
|
|
288
|
+
"enum": [
|
|
289
|
+
"mujoco",
|
|
290
|
+
"sapien",
|
|
291
|
+
"isaac",
|
|
292
|
+
"own"
|
|
293
|
+
],
|
|
294
|
+
"type": "string"
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"type": "null"
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"default": null,
|
|
301
|
+
"description": "The adapter that reads the simulation: 'mujoco' (incl. MuJoCo Warp), 'sapien', 'isaac', or 'own' (the benchmark hands frames itself); None: the benchmark's engine",
|
|
302
|
+
"title": "Engine"
|
|
303
|
+
},
|
|
304
|
+
"looks": {
|
|
305
|
+
"anyOf": [
|
|
306
|
+
{
|
|
307
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
|
|
308
|
+
"type": "string"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"type": "null"
|
|
312
|
+
}
|
|
313
|
+
],
|
|
314
|
+
"default": null,
|
|
315
|
+
"description": "The benchmark method that says each episode's colours or visibility",
|
|
316
|
+
"title": "Looks"
|
|
317
|
+
},
|
|
318
|
+
"state": {
|
|
319
|
+
"anyOf": [
|
|
320
|
+
{
|
|
321
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
|
|
322
|
+
"type": "string"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"type": "null"
|
|
326
|
+
}
|
|
327
|
+
],
|
|
328
|
+
"default": null,
|
|
329
|
+
"description": "The benchmark method an adapter calls for an env's (or slots') engine state",
|
|
330
|
+
"title": "State"
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
"title": "ReplaySpec",
|
|
334
|
+
"type": "object"
|
|
335
|
+
},
|
|
281
336
|
"SecretRef": {
|
|
282
337
|
"additionalProperties": false,
|
|
283
338
|
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\nplatform keeps the value and injects it when a worker starts. Never carries a value.",
|
|
@@ -313,7 +368,7 @@
|
|
|
313
368
|
],
|
|
314
369
|
"title": "SeqFlags",
|
|
315
370
|
"type": "integer",
|
|
316
|
-
"x-contract-version": "0.5.
|
|
371
|
+
"x-contract-version": "0.5.6",
|
|
317
372
|
"x-flag-names": {
|
|
318
373
|
"CHECK": 65536,
|
|
319
374
|
"INFER": 16,
|
|
@@ -541,6 +596,17 @@
|
|
|
541
596
|
],
|
|
542
597
|
"default": null
|
|
543
598
|
},
|
|
599
|
+
"replay": {
|
|
600
|
+
"anyOf": [
|
|
601
|
+
{
|
|
602
|
+
"$ref": "#/$defs/ReplaySpec"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"type": "null"
|
|
606
|
+
}
|
|
607
|
+
],
|
|
608
|
+
"default": null
|
|
609
|
+
},
|
|
544
610
|
"secrets": {
|
|
545
611
|
"items": {
|
|
546
612
|
"$ref": "#/$defs/SecretRef"
|
|
@@ -559,5 +625,5 @@
|
|
|
559
625
|
],
|
|
560
626
|
"title": "BenchmarkSpec",
|
|
561
627
|
"type": "object",
|
|
562
|
-
"x-contract-version": "0.5.
|
|
628
|
+
"x-contract-version": "0.5.6"
|
|
563
629
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"additionalProperties": false,
|
|
3
|
-
"description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.",
|
|
3
|
+
"description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.\n\n`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the\nmost acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act\nalone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,\nplanning when each sends - apart while each can be served alone, together only when they cannot; False seats\nmax_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something\nonly beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader\ntakes it for one robot a copy. The SDK takes `gpus_per_replica` and\n`replica_start` in `@seq.policy(...)` from then on.\n\n\n`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's\nrequest still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.",
|
|
4
4
|
"properties": {
|
|
5
|
+
"dynamic": {
|
|
6
|
+
"default": true,
|
|
7
|
+
"title": "Dynamic",
|
|
8
|
+
"type": "boolean"
|
|
9
|
+
},
|
|
5
10
|
"gpus_per_replica": {
|
|
6
11
|
"anyOf": [
|
|
7
12
|
{
|
|
@@ -16,6 +21,20 @@
|
|
|
16
21
|
"default": null,
|
|
17
22
|
"title": "Gpus Per Replica"
|
|
18
23
|
},
|
|
24
|
+
"max_concurrent": {
|
|
25
|
+
"anyOf": [
|
|
26
|
+
{
|
|
27
|
+
"maximum": 256,
|
|
28
|
+
"minimum": 2,
|
|
29
|
+
"type": "integer"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "null"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"default": null,
|
|
36
|
+
"title": "Max Concurrent"
|
|
37
|
+
},
|
|
19
38
|
"max_inputs": {
|
|
20
39
|
"anyOf": [
|
|
21
40
|
{
|
|
@@ -77,5 +96,5 @@
|
|
|
77
96
|
},
|
|
78
97
|
"title": "Concurrency",
|
|
79
98
|
"type": "object",
|
|
80
|
-
"x-contract-version": "0.5.
|
|
99
|
+
"x-contract-version": "0.5.6"
|
|
81
100
|
}
|