sequence-base 0.4.28__tar.gz → 0.4.29__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.28 → sequence_base-0.4.29}/PKG-INFO +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/pyproject.toml +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/__init__.py +4 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/constants/version.py +2 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/connect.py +3 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/deployments.py +3 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/own_io.py +3 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/policy.py +4 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/wire.py +5 -0
- sequence_base-0.4.29/sequence_base/feedback.py +106 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/presets/robot_arm.py +4 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ActRequest.json +15 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ActResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ActionChunk.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ActionContract.json +13 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Actions.json +13 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/AdapterPair.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/AddLocal.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BenchmarkRegisterRequest.json +13 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BenchmarkSpec.json +2 -2
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BootstrapResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Concurrency.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ConnectResponse.json +37 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/DeploymentPolicy.json +37 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/DeploymentRequest.json +37 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Embodiment.json +13 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Estimate.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/EvalReport.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/EvalRequest.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/EvalResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageSpec.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepProject.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepRun.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/InferParam.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ObservationContract.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Observations.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ObserveRequest.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ObserveResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/PolicyRegistration.json +38 -2
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/PolicySpec.json +37 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Project.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/RenderSpec.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/ReplaySpec.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/RolloutResult.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/SecretCreateRequest.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/SecretRef.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Stream.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/TaskAgg.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/TemplateFiles.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Tensors.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/WarmingError.json +1 -1
- {sequence_base-0.4.28 → sequence_base-0.4.29}/.gitignore +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/README.md +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/auth.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/codec/image.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/constants/cards.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/constants/headers.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/constants/limits.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/construct.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/accounts.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/act.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/adapters.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/benchmarks.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/errors.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/eval.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/flags.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/io.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/obs_schedule.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/observe.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/templates.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/contract/volumes.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/episode.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/msgpack_io.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/obs/log.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/obs/rid.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/presets/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/presets/frames.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schema_export.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/telemetry/__init__.py +0 -0
- {sequence_base-0.4.28 → sequence_base-0.4.29}/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.29
|
|
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.29"
|
|
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"]
|
|
@@ -130,6 +130,9 @@ from sequence_base.errors.transport import (
|
|
|
130
130
|
from sequence_base.episode import Episode
|
|
131
131
|
|
|
132
132
|
|
|
133
|
+
from sequence_base.feedback import Feedback
|
|
134
|
+
|
|
135
|
+
|
|
133
136
|
from sequence_base import auth
|
|
134
137
|
|
|
135
138
|
|
|
@@ -174,7 +177,7 @@ __all__ = [
|
|
|
174
177
|
|
|
175
178
|
"TransportUnavailable", "TransportWarming", "TransportRejected", "TransportOverloaded",
|
|
176
179
|
|
|
177
|
-
"Episode",
|
|
180
|
+
"Episode", "Feedback",
|
|
178
181
|
|
|
179
182
|
"auth",
|
|
180
183
|
]
|
|
@@ -163,6 +163,9 @@ class Actions(BaseModel):
|
|
|
163
163
|
open_loop_horizon: int | None = Field(default=None, ge=1, le=100_000)
|
|
164
164
|
|
|
165
165
|
|
|
166
|
+
aligned: bool | None = None
|
|
167
|
+
|
|
168
|
+
|
|
166
169
|
class Tensors(BaseModel):
|
|
167
170
|
"""A policy's inputs reach its code as torch tensors on its device - a batch dimension first when `batch` - and the
|
|
168
171
|
tensors it answers with go back as arrays; float64 arrays arrive as float32. Converted in the replica, last before
|
|
@@ -46,6 +46,11 @@ class ActRequest(BaseModel):
|
|
|
46
46
|
description="The newest observation's number in its episode's stream (POST /observe)")
|
|
47
47
|
|
|
48
48
|
|
|
49
|
+
|
|
50
|
+
feedback: dict[str, Any] | None = Field(default=None,
|
|
51
|
+
description="What the robot was playing: left, delay, played, last")
|
|
52
|
+
|
|
53
|
+
|
|
49
54
|
class ActResponse(BaseModel):
|
|
50
55
|
"""200 from /act, version 2. `outputs` is infer()'s return value, unchanged; the rest is platform metadata."""
|
|
51
56
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
What a policy that asks for execution feedback is handed (PolicySpec.feedback): its infer declares `feedback` and gets,
|
|
3
|
+
with each act, what the robot was playing when it sent that act - the rows it had not played yet, how many control
|
|
4
|
+
steps it expects to play before the answer is back, how many rows of its chunk it had played, and the row it played
|
|
5
|
+
last.
|
|
6
|
+
|
|
7
|
+
In one sentence: the robot's executor (sequence_ai.Player, or an eval's) → puts {left, delay, played, last} in the act
|
|
8
|
+
it sends → the worker checks it by feedback_of and hands infer a Feedback → a policy that inpaints (RTC) freezes the rows
|
|
9
|
+
the delay covers, one trained on its last action reads `last`.
|
|
10
|
+
|
|
11
|
+
WHY the executor fills it, act by act, and the platform keeps none of it: which rows are left and how long a round
|
|
12
|
+
trip takes only the robot knows - a worker times the inference alone.
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import numbers
|
|
18
|
+
from collections.abc import Mapping
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
__all__ = ["Feedback", "feedback_of", "KEYS"]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
KEYS = ("left", "delay", "played", "last")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class Feedback:
|
|
28
|
+
"""What the robot was playing when it sent this act: `left` - the rows of the chunk it was playing that it had not
|
|
29
|
+
played yet, in order, the ones due first and then the chunk's spare ones (empty on an episode's first act, or when
|
|
30
|
+
it held none); `delay` - how many control steps it expects to play before this answer is back, its longest of its
|
|
31
|
+
last 10 round trips times its control rate, rounded up (0 before it measured one, and in an eval); `played` - how
|
|
32
|
+
many rows of that chunk it had played when it observed; `last` - the row it played last, as the platform clipped it
|
|
33
|
+
(None before it played one). All four are the robot's: they are read, never set."""
|
|
34
|
+
|
|
35
|
+
__slots__ = ("_left", "_delay", "_played", "_last")
|
|
36
|
+
|
|
37
|
+
def __init__(self, left: Any = (), delay: int = 0, played: int = 0, last: Any = None) -> None:
|
|
38
|
+
object.__setattr__(self, "_left", tuple(left))
|
|
39
|
+
object.__setattr__(self, "_delay", int(delay))
|
|
40
|
+
object.__setattr__(self, "_played", int(played))
|
|
41
|
+
object.__setattr__(self, "_last", last)
|
|
42
|
+
|
|
43
|
+
@property
|
|
44
|
+
def left(self) -> tuple:
|
|
45
|
+
return self._left
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def delay(self) -> int:
|
|
49
|
+
return self._delay
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def played(self) -> int:
|
|
53
|
+
return self._played
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def last(self) -> Any:
|
|
57
|
+
return self._last
|
|
58
|
+
|
|
59
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
|
60
|
+
raise AttributeError(f"Feedback.{name} is what the robot was playing: read it, never set it")
|
|
61
|
+
|
|
62
|
+
def __repr__(self) -> str:
|
|
63
|
+
return (f"Feedback(left={len(self._left)} rows, delay={self._delay}, played={self._played}, "
|
|
64
|
+
f"last={self._last!r})")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def feedback_of(value: Any, width: int | None = None) -> Feedback:
|
|
68
|
+
"""The Feedback an act's `feedback` says - a dict of `left` (a list of rows, or an array of them), `delay` and
|
|
69
|
+
`played` (counts from 0) and `last` (a row, or None) - checked, the one rule a worker and a robot's SDK read it by:
|
|
70
|
+
with `width` (the robot-arm preset's action_dim) each row is that many numbers; without, a row of a policy's own
|
|
71
|
+
outputs is handed as it came. Raises ValueError saying what is wrong."""
|
|
72
|
+
if not isinstance(value, Mapping):
|
|
73
|
+
raise ValueError(f"feedback is a dict of {', '.join(KEYS)}, not {type(value).__name__}")
|
|
74
|
+
unknown = [k for k in value if k not in KEYS]
|
|
75
|
+
if unknown:
|
|
76
|
+
raise ValueError(f"feedback has no {', '.join(map(repr, unknown))}: it holds {', '.join(KEYS)}")
|
|
77
|
+
left = value.get("left")
|
|
78
|
+
if left is None:
|
|
79
|
+
left = ()
|
|
80
|
+
elif isinstance(left, (str, bytes, Mapping)) or not (isinstance(left, (list, tuple))
|
|
81
|
+
or (getattr(left, "ndim", 0) or 0) >= 1):
|
|
82
|
+
raise ValueError(f"feedback's left is the rows the robot had not played, a list of them, not "
|
|
83
|
+
f"{type(left).__name__}")
|
|
84
|
+
rows = list(left)
|
|
85
|
+
counts = {}
|
|
86
|
+
for key in ("delay", "played"):
|
|
87
|
+
n = value.get(key, 0)
|
|
88
|
+
if isinstance(n, bool) or not isinstance(n, numbers.Integral) or n < 0:
|
|
89
|
+
raise ValueError(f"feedback's {key} is a count of control steps from 0, not {n!r}")
|
|
90
|
+
counts[key] = int(n)
|
|
91
|
+
last = value.get("last")
|
|
92
|
+
if width is not None:
|
|
93
|
+
for where, row in [*((f"left[{i}]", r) for i, r in enumerate(rows)),
|
|
94
|
+
*((("last", last),) if last is not None else ())]:
|
|
95
|
+
_fits(where, row, width)
|
|
96
|
+
return Feedback(rows, counts["delay"], counts["played"], last)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _fits(where: str, row: Any, width: int) -> None:
|
|
100
|
+
if isinstance(row, (str, bytes, Mapping)) or not (isinstance(row, (list, tuple)) or getattr(row, "ndim", None) == 1):
|
|
101
|
+
raise ValueError(f"feedback's {where} is a row of {width} numbers (the policy's action_dim), not "
|
|
102
|
+
f"{type(row).__name__}")
|
|
103
|
+
if len(row) != width:
|
|
104
|
+
raise ValueError(f"feedback's {where} has {len(row)} values; the policy's action_dim is {width}")
|
|
105
|
+
if not all(isinstance(v, numbers.Real) and not isinstance(v, bool) for v in row):
|
|
106
|
+
raise ValueError(f"feedback's {where} is a row of {width} numbers (the policy's action_dim)")
|
|
@@ -129,6 +129,10 @@ class ActionContract(BaseModel):
|
|
|
129
129
|
bounds: list[tuple[float, float]] | None = Field(default=None, max_length=256)
|
|
130
130
|
max_delta: float | list[float] | None = None
|
|
131
131
|
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
aligned: bool | None = None
|
|
135
|
+
|
|
132
136
|
@model_validator(mode="after")
|
|
133
137
|
def _limits_fit(self) -> "ActionContract":
|
|
134
138
|
if self.bounds is not None:
|
|
@@ -28,6 +28,20 @@
|
|
|
28
28
|
"description": "The episode this call belongs to (per-episode state)",
|
|
29
29
|
"title": "Episode Id"
|
|
30
30
|
},
|
|
31
|
+
"feedback": {
|
|
32
|
+
"anyOf": [
|
|
33
|
+
{
|
|
34
|
+
"additionalProperties": true,
|
|
35
|
+
"type": "object"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "null"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"default": null,
|
|
42
|
+
"description": "What the robot was playing: left, delay, played, last",
|
|
43
|
+
"title": "Feedback"
|
|
44
|
+
},
|
|
31
45
|
"inputs": {
|
|
32
46
|
"description": "Whatever the policy's infer() takes, exactly as the robot's code built it",
|
|
33
47
|
"title": "Inputs"
|
|
@@ -93,5 +107,5 @@
|
|
|
93
107
|
],
|
|
94
108
|
"title": "ActRequest",
|
|
95
109
|
"type": "object",
|
|
96
|
-
"x-contract-version": "0.5.
|
|
110
|
+
"x-contract-version": "0.5.26"
|
|
97
111
|
}
|
|
@@ -23,6 +23,18 @@
|
|
|
23
23
|
"action_space": {
|
|
24
24
|
"$ref": "#/$defs/ActionSpace"
|
|
25
25
|
},
|
|
26
|
+
"aligned": {
|
|
27
|
+
"anyOf": [
|
|
28
|
+
{
|
|
29
|
+
"type": "boolean"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "null"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"default": null,
|
|
36
|
+
"title": "Aligned"
|
|
37
|
+
},
|
|
26
38
|
"bounds": {
|
|
27
39
|
"anyOf": [
|
|
28
40
|
{
|
|
@@ -84,5 +96,5 @@
|
|
|
84
96
|
],
|
|
85
97
|
"title": "ActionContract",
|
|
86
98
|
"type": "object",
|
|
87
|
-
"x-contract-version": "0.5.
|
|
99
|
+
"x-contract-version": "0.5.26"
|
|
88
100
|
}
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
"additionalProperties": false,
|
|
3
3
|
"description": "Which rows of a policy's answer play. `key`: the answer's field that holds them (None: the answer itself) - a\nlist of rows or a 2-D array, played in order, `hz` rows a second, `open_loop_horizon` of them before the next act\n(None: all). A shorter answer plays whole and the next act comes sooner; a longer one is cut there. With `hz` a worker\nknows how long one answer plays (open_loop_horizon / hz) and a control period (1 / hz) and times a copy's robots by\nthem, as a robot-arm chunk's covers_seconds and control_frequency_hz do. Undeclared, an answer plays as the default\nsays: a dict or a 1-D list one action, a 2-D one row by row.",
|
|
4
4
|
"properties": {
|
|
5
|
+
"aligned": {
|
|
6
|
+
"anyOf": [
|
|
7
|
+
{
|
|
8
|
+
"type": "boolean"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "null"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"default": null,
|
|
15
|
+
"title": "Aligned"
|
|
16
|
+
},
|
|
5
17
|
"hz": {
|
|
6
18
|
"anyOf": [
|
|
7
19
|
{
|
|
@@ -47,5 +59,5 @@
|
|
|
47
59
|
},
|
|
48
60
|
"title": "Actions",
|
|
49
61
|
"type": "object",
|
|
50
|
-
"x-contract-version": "0.5.
|
|
62
|
+
"x-contract-version": "0.5.26"
|
|
51
63
|
}
|
{sequence_base-0.4.28 → sequence_base-0.4.29}/sequence_base/schemas/BenchmarkRegisterRequest.json
RENAMED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
"action_space": {
|
|
12
12
|
"$ref": "#/$defs/ActionSpace"
|
|
13
13
|
},
|
|
14
|
+
"aligned": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "boolean"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"default": null,
|
|
24
|
+
"title": "Aligned"
|
|
25
|
+
},
|
|
14
26
|
"bounds": {
|
|
15
27
|
"anyOf": [
|
|
16
28
|
{
|
|
@@ -1077,5 +1089,5 @@
|
|
|
1077
1089
|
],
|
|
1078
1090
|
"title": "BenchmarkRegisterRequest",
|
|
1079
1091
|
"type": "object",
|
|
1080
|
-
"x-contract-version": "0.5.
|
|
1092
|
+
"x-contract-version": "0.5.26"
|
|
1081
1093
|
}
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
],
|
|
472
472
|
"title": "SeqFlags",
|
|
473
473
|
"type": "integer",
|
|
474
|
-
"x-contract-version": "0.5.
|
|
474
|
+
"x-contract-version": "0.5.26",
|
|
475
475
|
"x-flag-names": {
|
|
476
476
|
"CHECK": 65536,
|
|
477
477
|
"INFER": 16,
|
|
@@ -722,5 +722,5 @@
|
|
|
722
722
|
],
|
|
723
723
|
"title": "BenchmarkSpec",
|
|
724
724
|
"type": "object",
|
|
725
|
-
"x-contract-version": "0.5.
|
|
725
|
+
"x-contract-version": "0.5.26"
|
|
726
726
|
}
|
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
"action_space": {
|
|
12
12
|
"$ref": "#/$defs/ActionSpace"
|
|
13
13
|
},
|
|
14
|
+
"aligned": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "boolean"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"default": null,
|
|
24
|
+
"title": "Aligned"
|
|
25
|
+
},
|
|
14
26
|
"bounds": {
|
|
15
27
|
"anyOf": [
|
|
16
28
|
{
|
|
@@ -89,6 +101,18 @@
|
|
|
89
101
|
"additionalProperties": false,
|
|
90
102
|
"description": "Which rows of a policy's answer play. `key`: the answer's field that holds them (None: the answer itself) - a\nlist of rows or a 2-D array, played in order, `hz` rows a second, `open_loop_horizon` of them before the next act\n(None: all). A shorter answer plays whole and the next act comes sooner; a longer one is cut there. With `hz` a worker\nknows how long one answer plays (open_loop_horizon / hz) and a control period (1 / hz) and times a copy's robots by\nthem, as a robot-arm chunk's covers_seconds and control_frequency_hz do. Undeclared, an answer plays as the default\nsays: a dict or a 1-D list one action, a 2-D one row by row.",
|
|
91
103
|
"properties": {
|
|
104
|
+
"aligned": {
|
|
105
|
+
"anyOf": [
|
|
106
|
+
{
|
|
107
|
+
"type": "boolean"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "null"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"default": null,
|
|
114
|
+
"title": "Aligned"
|
|
115
|
+
},
|
|
92
116
|
"hz": {
|
|
93
117
|
"anyOf": [
|
|
94
118
|
{
|
|
@@ -517,6 +541,18 @@
|
|
|
517
541
|
"default": null,
|
|
518
542
|
"title": "Embodiment"
|
|
519
543
|
},
|
|
544
|
+
"feedback": {
|
|
545
|
+
"anyOf": [
|
|
546
|
+
{
|
|
547
|
+
"type": "boolean"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"type": "null"
|
|
551
|
+
}
|
|
552
|
+
],
|
|
553
|
+
"default": null,
|
|
554
|
+
"title": "Feedback"
|
|
555
|
+
},
|
|
520
556
|
"io": {
|
|
521
557
|
"anyOf": [
|
|
522
558
|
{
|
|
@@ -568,5 +604,5 @@
|
|
|
568
604
|
],
|
|
569
605
|
"title": "ConnectResponse",
|
|
570
606
|
"type": "object",
|
|
571
|
-
"x-contract-version": "0.5.
|
|
607
|
+
"x-contract-version": "0.5.26"
|
|
572
608
|
}
|
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
"action_space": {
|
|
12
12
|
"$ref": "#/$defs/ActionSpace"
|
|
13
13
|
},
|
|
14
|
+
"aligned": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "boolean"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"default": null,
|
|
24
|
+
"title": "Aligned"
|
|
25
|
+
},
|
|
14
26
|
"bounds": {
|
|
15
27
|
"anyOf": [
|
|
16
28
|
{
|
|
@@ -89,6 +101,18 @@
|
|
|
89
101
|
"additionalProperties": false,
|
|
90
102
|
"description": "Which rows of a policy's answer play. `key`: the answer's field that holds them (None: the answer itself) - a\nlist of rows or a 2-D array, played in order, `hz` rows a second, `open_loop_horizon` of them before the next act\n(None: all). A shorter answer plays whole and the next act comes sooner; a longer one is cut there. With `hz` a worker\nknows how long one answer plays (open_loop_horizon / hz) and a control period (1 / hz) and times a copy's robots by\nthem, as a robot-arm chunk's covers_seconds and control_frequency_hz do. Undeclared, an answer plays as the default\nsays: a dict or a 1-D list one action, a 2-D one row by row.",
|
|
91
103
|
"properties": {
|
|
104
|
+
"aligned": {
|
|
105
|
+
"anyOf": [
|
|
106
|
+
{
|
|
107
|
+
"type": "boolean"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "null"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"default": null,
|
|
114
|
+
"title": "Aligned"
|
|
115
|
+
},
|
|
92
116
|
"hz": {
|
|
93
117
|
"anyOf": [
|
|
94
118
|
{
|
|
@@ -684,6 +708,18 @@
|
|
|
684
708
|
"default": null,
|
|
685
709
|
"title": "Family"
|
|
686
710
|
},
|
|
711
|
+
"feedback": {
|
|
712
|
+
"anyOf": [
|
|
713
|
+
{
|
|
714
|
+
"type": "boolean"
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
"type": "null"
|
|
718
|
+
}
|
|
719
|
+
],
|
|
720
|
+
"default": null,
|
|
721
|
+
"title": "Feedback"
|
|
722
|
+
},
|
|
687
723
|
"handler_ref": {
|
|
688
724
|
"title": "Handler Ref",
|
|
689
725
|
"type": "string"
|
|
@@ -797,5 +833,5 @@
|
|
|
797
833
|
],
|
|
798
834
|
"title": "DeploymentPolicy",
|
|
799
835
|
"type": "object",
|
|
800
|
-
"x-contract-version": "0.5.
|
|
836
|
+
"x-contract-version": "0.5.26"
|
|
801
837
|
}
|
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
"action_space": {
|
|
12
12
|
"$ref": "#/$defs/ActionSpace"
|
|
13
13
|
},
|
|
14
|
+
"aligned": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "boolean"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"default": null,
|
|
24
|
+
"title": "Aligned"
|
|
25
|
+
},
|
|
14
26
|
"bounds": {
|
|
15
27
|
"anyOf": [
|
|
16
28
|
{
|
|
@@ -89,6 +101,18 @@
|
|
|
89
101
|
"additionalProperties": false,
|
|
90
102
|
"description": "Which rows of a policy's answer play. `key`: the answer's field that holds them (None: the answer itself) - a\nlist of rows or a 2-D array, played in order, `hz` rows a second, `open_loop_horizon` of them before the next act\n(None: all). A shorter answer plays whole and the next act comes sooner; a longer one is cut there. With `hz` a worker\nknows how long one answer plays (open_loop_horizon / hz) and a control period (1 / hz) and times a copy's robots by\nthem, as a robot-arm chunk's covers_seconds and control_frequency_hz do. Undeclared, an answer plays as the default\nsays: a dict or a 1-D list one action, a 2-D one row by row.",
|
|
91
103
|
"properties": {
|
|
104
|
+
"aligned": {
|
|
105
|
+
"anyOf": [
|
|
106
|
+
{
|
|
107
|
+
"type": "boolean"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "null"
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"default": null,
|
|
114
|
+
"title": "Aligned"
|
|
115
|
+
},
|
|
92
116
|
"hz": {
|
|
93
117
|
"anyOf": [
|
|
94
118
|
{
|
|
@@ -553,6 +577,18 @@
|
|
|
553
577
|
"default": null,
|
|
554
578
|
"title": "Family"
|
|
555
579
|
},
|
|
580
|
+
"feedback": {
|
|
581
|
+
"anyOf": [
|
|
582
|
+
{
|
|
583
|
+
"type": "boolean"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"type": "null"
|
|
587
|
+
}
|
|
588
|
+
],
|
|
589
|
+
"default": null,
|
|
590
|
+
"title": "Feedback"
|
|
591
|
+
},
|
|
556
592
|
"handler_ref": {
|
|
557
593
|
"title": "Handler Ref",
|
|
558
594
|
"type": "string"
|
|
@@ -1578,5 +1614,5 @@
|
|
|
1578
1614
|
],
|
|
1579
1615
|
"title": "DeploymentRequest",
|
|
1580
1616
|
"type": "object",
|
|
1581
|
-
"x-contract-version": "0.5.
|
|
1617
|
+
"x-contract-version": "0.5.26"
|
|
1582
1618
|
}
|