sequence-base 0.3.27__tar.gz → 0.3.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.3.27 → sequence_base-0.3.29}/PKG-INFO +1 -1
- sequence_base-0.3.29/pyproject.toml +20 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/__init__.py +25 -25
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/codec/image.py +17 -17
- sequence_base-0.3.29/sequence_base/constants/env.py +7 -0
- sequence_base-0.3.29/sequence_base/constants/headers.py +4 -0
- sequence_base-0.3.29/sequence_base/constants/version.py +29 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/__init__.py +20 -20
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/accounts.py +10 -10
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/act.py +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/benchmarks.py +34 -34
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/connect.py +6 -6
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/deployments.py +48 -48
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/errors.py +13 -13
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/eval.py +36 -36
- sequence_base-0.3.29/sequence_base/contract/flags.py +82 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/io.py +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/policy.py +47 -42
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/templates.py +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/volumes.py +5 -5
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/contract/wire.py +3 -3
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/obs/rid.py +3 -3
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/presets/__init__.py +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/presets/robot_arm.py +31 -31
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schema_export.py +13 -13
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ActRequest.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ActResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ActionChunk.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ActionContract.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/AdapterTransform.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/AddLocal.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/BenchmarkConditionSpec.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/BenchmarkRegisterRequest.json +6 -6
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/BenchmarkSpec.json +4 -4
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/BootstrapResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ClampInfo.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Concurrency.json +18 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ConnectResponse.json +4 -4
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/DeploymentPolicy.json +5 -5
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/DeploymentRequest.json +24 -8
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Embodiment.json +3 -3
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Estimate.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/EvalDryRunResponse.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/EvalReport.json +3 -3
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/EvalRequest.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/EvalResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageSpec.json +3 -3
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageStepAddLocal.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageStepRun.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/InferParam.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/LossyTransform.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/ObservationContract.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/PolicyRegistration.json +24 -8
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/PolicySpec.json +23 -7
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/RenderSpec.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/RolloutResult.json +2 -2
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/SecretCreateRequest.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/SecretRef.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/SuiteAgg.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/TaskAgg.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/UsageReport.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeAttach.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/schemas/WarmingError.json +1 -1
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/telemetry/events.py +8 -8
- sequence_base-0.3.27/pyproject.toml +0 -27
- sequence_base-0.3.27/sequence_base/constants/env.py +0 -7
- sequence_base-0.3.27/sequence_base/constants/headers.py +0 -4
- sequence_base-0.3.27/sequence_base/constants/version.py +0 -28
- sequence_base-0.3.27/sequence_base/contract/flags.py +0 -82
- {sequence_base-0.3.27 → sequence_base-0.3.29}/.gitignore +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/README.md +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/auth.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/obs/log.py +0 -0
- {sequence_base-0.3.27 → sequence_base-0.3.29}/sequence_base/telemetry/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sequence-base
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.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
|
Requires-Python: >=3.10
|
|
6
6
|
Requires-Dist: pydantic>=2.0
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "sequence-base"
|
|
3
|
+
version = "0.3.29"
|
|
4
|
+
description = "Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness."
|
|
5
|
+
requires-python = ">=3.10"
|
|
6
|
+
dependencies = ["pydantic>=2.0"]
|
|
7
|
+
|
|
8
|
+
[project.optional-dependencies]
|
|
9
|
+
codec = ["pillow>=10", "numpy>=1.26"]
|
|
10
|
+
test = ["pytest", "jsonschema>=4"]
|
|
11
|
+
|
|
12
|
+
[build-system]
|
|
13
|
+
requires = ["hatchling"]
|
|
14
|
+
build-backend = "hatchling.build"
|
|
15
|
+
|
|
16
|
+
[tool.hatch.build.targets.wheel]
|
|
17
|
+
packages = ["sequence_base"]
|
|
18
|
+
|
|
19
|
+
[tool.hatch.build.targets.sdist]
|
|
20
|
+
include = ["/sequence_base", "/README.md", "/pyproject.toml"]
|
|
@@ -11,9 +11,9 @@ defined once so they cannot drift. Import from here; never redefine.
|
|
|
11
11
|
Only shared-by-≥2-and-drifts-if-duplicated things live here. Model-specific, provider-specific, and
|
|
12
12
|
catalogue values stay in container / gateway / spec.py.
|
|
13
13
|
"""
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
from sequence_base.contract import (
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from sequence_base.contract import (
|
|
17
17
|
ActRequest,
|
|
18
18
|
ActResponse,
|
|
19
19
|
AddLocal,
|
|
@@ -98,14 +98,14 @@ from sequence_base.contract import ( # noqa: F401 (re-export surface)
|
|
|
98
98
|
code_for_status,
|
|
99
99
|
)
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
from sequence_base.constants.version import CONTRACT_VERSION
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
|
|
105
105
|
from sequence_base.obs.log import Timer, enabled, log
|
|
106
106
|
from sequence_base.obs.rid import HEADER, clean, new_rid
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
from sequence_base.errors.transport import (
|
|
110
110
|
TransportOverloaded,
|
|
111
111
|
TransportRejected,
|
|
@@ -113,55 +113,55 @@ from sequence_base.errors.transport import (
|
|
|
113
113
|
TransportWarming,
|
|
114
114
|
)
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
from sequence_base import auth
|
|
118
118
|
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
123
|
|
|
124
124
|
__all__ = [
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
"ImageFrame", "Proprioception", "Observation", "ActionSpace", "ActionStep", "ActionChunk",
|
|
127
127
|
"ActRequest", "ActResponse",
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
"SeqFlags", "ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
|
|
130
130
|
"ImageStep", "ImageSpec",
|
|
131
131
|
"VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
|
|
132
132
|
"PolicySpec", "PolicyRegistration",
|
|
133
|
-
|
|
133
|
+
|
|
134
134
|
"MAX_CODE_BUNDLE_BYTES", "CodeBundle",
|
|
135
135
|
"Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
|
|
136
136
|
"DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
"Lease", "ConnectRequest", "ConnectResponse",
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
"Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
141
141
|
"EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
|
|
142
142
|
"EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
|
|
143
143
|
"AdapterKind", "AdapterTransform",
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
"SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse", "UsageReport",
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
"VolumeFile", "VolumeUploadRequest", "UploadTarget", "VolumeUploadResponse", "VolumeInfo", "parse_vol",
|
|
148
|
-
|
|
148
|
+
|
|
149
149
|
"TEMPLATE_SCHEME", "parse_template",
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
"ErrorCode", "ErrorBody", "WarmingError", "ERRORS", "ErrorSpec", "code_for_status", "CONTRACT_VERSION",
|
|
152
|
-
|
|
152
|
+
|
|
153
153
|
"HEADER", "new_rid", "clean", "log", "Timer", "enabled",
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
"TransportUnavailable", "TransportWarming", "TransportRejected", "TransportOverloaded",
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
"auth",
|
|
158
158
|
]
|
|
159
159
|
|
|
160
160
|
try:
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
|
|
162
|
+
|
|
163
163
|
from importlib.metadata import PackageNotFoundError, version as _version
|
|
164
164
|
|
|
165
165
|
__version__ = _version("sequence-base")
|
|
166
|
-
except PackageNotFoundError:
|
|
166
|
+
except PackageNotFoundError:
|
|
167
167
|
__version__ = "dev"
|
|
@@ -16,19 +16,19 @@ import io
|
|
|
16
16
|
from typing import Any
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
25
|
DEFAULT_JPEG_QUALITY = 95
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
32
|
MAX_UPLOAD_EDGE = 640
|
|
33
33
|
|
|
34
34
|
|
|
@@ -48,7 +48,7 @@ def encode(frame: Any, *, quality: int = DEFAULT_JPEG_QUALITY) -> str:
|
|
|
48
48
|
|
|
49
49
|
try:
|
|
50
50
|
from PIL import Image
|
|
51
|
-
except ImportError as e:
|
|
51
|
+
except ImportError as e:
|
|
52
52
|
raise ImportError(
|
|
53
53
|
"encoding an array or PIL image needs Pillow: pip install 'sequence-base[codec]'. "
|
|
54
54
|
"Pass an already-encoded base64 str or bytes to avoid it."
|
|
@@ -59,8 +59,8 @@ def encode(frame: Any, *, quality: int = DEFAULT_JPEG_QUALITY) -> str:
|
|
|
59
59
|
img = img.convert("RGB")
|
|
60
60
|
if max(img.size) > MAX_UPLOAD_EDGE:
|
|
61
61
|
scale = MAX_UPLOAD_EDGE / max(img.size)
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
|
|
63
|
+
|
|
64
64
|
img = img.resize((max(1, round(img.width * scale)),
|
|
65
65
|
max(1, round(img.height * scale))), Image.LANCZOS)
|
|
66
66
|
|
|
@@ -85,7 +85,7 @@ def decode(data: str) -> "Any":
|
|
|
85
85
|
return np.asarray(Image.open(io.BytesIO(raw)).convert("RGB"), dtype=np.uint8)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
_DEPTH_UNITS = {"m": 1000.0, "mm": 1.0}
|
|
90
90
|
|
|
91
91
|
|
|
@@ -93,8 +93,8 @@ def encode_depth(depth: Any, *, unit: str = "m") -> str:
|
|
|
93
93
|
"""A depth map -> the base64 16-bit PNG a depth frame (ImageFrame kind="depth") carries: millimetres as uint16, 0
|
|
94
94
|
where there is no reading (NaN, inf, <= 0), clipped at 65.535 m. `unit` is what the array holds: "m" (float metres,
|
|
95
95
|
the default) or "mm". Lossless, unlike the JPEG colour frames take — a depth error is a geometry error.
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
|
|
97
|
+
"""
|
|
98
98
|
import numpy as np
|
|
99
99
|
from PIL import Image
|
|
100
100
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""SEQ_* environment variable NAMES — a single source. Values live in ~/.config/sequences/, never here."""
|
|
2
|
+
|
|
3
|
+
DIRECT_SECRET = "SEQ_DIRECT_SECRET"
|
|
4
|
+
INTERNAL_SECRET = "SEQ_INTERNAL_SECRET"
|
|
5
|
+
GATEWAY_URL = "SEQ_GATEWAY_URL"
|
|
6
|
+
VOLUME_ROOT = "SEQ_VOLUME_ROOT"
|
|
7
|
+
MANIFEST = "SEQ_MANIFEST"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""
|
|
2
2
|
The shared wire contract — one definition per shape, imported (never redeclared) by the SDK, gateway,
|
|
3
|
-
and container harness. Grouped by
|
|
3
|
+
and container harness. Grouped by contract number.
|
|
4
4
|
"""
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
from sequence_base.contract.act import (
|
|
7
7
|
ActionChunk,
|
|
8
8
|
ActionSpace,
|
|
@@ -12,10 +12,10 @@ from sequence_base.contract.act import (
|
|
|
12
12
|
Proprioception,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
from sequence_base.contract.wire import ActRequest, ActResponse
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
from sequence_base.contract.flags import SeqFlags
|
|
20
20
|
from sequence_base.contract.policy import (
|
|
21
21
|
Camera,
|
|
@@ -37,7 +37,7 @@ from sequence_base.contract.policy import (
|
|
|
37
37
|
VolumeRef,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
from sequence_base.contract.deployments import (
|
|
42
42
|
MAX_CODE_BUNDLE_BYTES,
|
|
43
43
|
Autoscaler,
|
|
@@ -53,10 +53,10 @@ from sequence_base.contract.deployments import (
|
|
|
53
53
|
VolumeAttach,
|
|
54
54
|
)
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
from sequence_base.contract.connect import ConnectRequest, ConnectResponse, Lease
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
from sequence_base.contract.benchmarks import (
|
|
61
61
|
BenchmarkConditionSpec,
|
|
62
62
|
BenchmarkRegisterRequest,
|
|
@@ -84,7 +84,7 @@ from sequence_base.contract.eval import (
|
|
|
84
84
|
TaskAgg,
|
|
85
85
|
)
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
from sequence_base.contract.accounts import (
|
|
89
89
|
BootstrapResponse,
|
|
90
90
|
SecretCreateRequest,
|
|
@@ -93,10 +93,10 @@ from sequence_base.contract.accounts import (
|
|
|
93
93
|
UsageReport,
|
|
94
94
|
)
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
from sequence_base.contract.templates import TEMPLATE_SCHEME, parse_template
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
|
|
100
100
|
from sequence_base.contract.volumes import (
|
|
101
101
|
MAX_FILES,
|
|
102
102
|
MAX_UPLOAD_BYTES,
|
|
@@ -109,37 +109,37 @@ from sequence_base.contract.volumes import (
|
|
|
109
109
|
parse_vol,
|
|
110
110
|
)
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
from sequence_base.contract.errors import ERRORS, ErrorBody, ErrorCode, ErrorSpec, WarmingError, code_for_status
|
|
114
114
|
|
|
115
115
|
__all__ = [
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
"ImageFrame", "Proprioception", "Observation", "ActionSpace", "ActionStep", "ActionChunk",
|
|
118
118
|
"ActRequest", "ActResponse",
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
"SeqFlags",
|
|
121
121
|
"ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal", "ImageStep",
|
|
122
122
|
"ImageSpec",
|
|
123
123
|
"VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
|
|
124
124
|
"PolicySpec", "PolicyRegistration",
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
"MAX_CODE_BUNDLE_BYTES", "CodeBundle",
|
|
127
127
|
"Resources", "Autoscaler", "Timeouts", "VolumeAttach", "DeploymentPolicy", "InferParam", "DeploymentRequest",
|
|
128
128
|
"DeploymentAccepted", "DeploymentState", "DeploymentStatusResponse",
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
"Lease", "ConnectRequest", "ConnectResponse",
|
|
131
|
-
|
|
131
|
+
|
|
132
132
|
"Variant", "Conditions", "RenderSpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
|
|
133
133
|
"EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
|
|
134
134
|
"EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
|
|
135
135
|
"AdapterKind", "AdapterTransform",
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
"SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse", "UsageReport",
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
"MAX_FILES", "MAX_UPLOAD_BYTES", "VolumeFile", "VolumeUploadRequest", "UploadTarget", "VolumeUploadResponse",
|
|
140
140
|
"VolumeInfo", "check_volume_name", "parse_vol",
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
"TEMPLATE_SCHEME", "parse_template",
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
"ErrorCode", "ErrorBody", "WarmingError", "ERRORS", "ErrorSpec", "code_for_status",
|
|
145
145
|
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Contract 6 — accounts / secret / billing wire types.
|
|
3
3
|
|
|
4
4
|
Secret-leak rule, mechanically checkable (goal 15). Two kinds of secret:
|
|
5
5
|
(a) platform-minted — `direct_secret`, TLS private key. May appear in the DOWN direction only:
|
|
@@ -40,8 +40,8 @@ class SecretCreateRequest(BaseModel):
|
|
|
40
40
|
"""POST /v1/secrets — one name = one group of env values (e.g. planner = {PLANNER_API_KEY}).
|
|
41
41
|
`env` carries plaintext values; this is the WRITE-direction allow-list field (goal 15)."""
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
|
|
44
|
+
|
|
45
45
|
model_config = ConfigDict(extra="forbid", hide_input_in_errors=True)
|
|
46
46
|
|
|
47
47
|
name: str
|
|
@@ -51,10 +51,10 @@ class SecretCreateRequest(BaseModel):
|
|
|
51
51
|
class SecretInfo(BaseModel):
|
|
52
52
|
"""GET /v1/secrets element — metadata only, NO values. Exposes `env_keys`, not `env`."""
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
58
|
model_config = ConfigDict(extra="forbid", hide_input_in_errors=True)
|
|
59
59
|
|
|
60
60
|
name: str
|
|
@@ -67,15 +67,15 @@ class BootstrapResponse(BaseModel):
|
|
|
67
67
|
"""What a worker receives when it starts — everything it needs to serve direct TLS `/act`. `direct_secret` + `tls_key` are DOWN-direction platform secrets; `env` is the
|
|
68
68
|
WRITE-direction injection of the policy's declared user secrets into its subprocess (goal 15)."""
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
|
|
71
|
+
|
|
72
72
|
model_config = ConfigDict(extra="forbid", hide_input_in_errors=True)
|
|
73
73
|
|
|
74
74
|
direct_secret: str = Field(..., description="Platform-minted bearer the worker's guard checks")
|
|
75
75
|
tls_key: str = Field(..., description="Self-signed TLS private key (down-direction platform secret)")
|
|
76
76
|
tls_cert: str = Field(..., description="Self-signed TLS certificate (public)")
|
|
77
77
|
env: dict[str, str] = Field(..., description="Policy's user secrets, expanded ENV_KEY → value")
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
weights_uri: str | None = None
|
|
80
80
|
lease: Lease
|
|
81
81
|
|
|
@@ -5,7 +5,7 @@ They are no longer the platform's wire: since contract 0.4.14 the worker passes
|
|
|
5
5
|
(`sequence_base.contract.wire`). This module keeps `from sequence_base.contract.act import Observation` resolving to the
|
|
6
6
|
same classes for the gateway, harness and SDK code that still uses the preset.
|
|
7
7
|
"""
|
|
8
|
-
from sequence_base.presets.robot_arm import (
|
|
8
|
+
from sequence_base.presets.robot_arm import (
|
|
9
9
|
ActionChunk,
|
|
10
10
|
ActionSpace,
|
|
11
11
|
ActionStep,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Contract 5 (registration half) — benchmark is a second authorizable artifact, its registration symmetric to
|
|
3
3
|
a policy's. `BenchmarkSpec` carries the same infra declaration a PolicySpec does, plus a structured
|
|
4
4
|
`Conditions` (the eval matrix), versioned `assets` volumes, an optional `render` (mp4) declaration, and
|
|
5
5
|
SeqFlags→method bindings covering SETUP / RESET / CHECK / SCORE. The eval *run* wire types (RolloutResult,
|
|
@@ -60,10 +60,10 @@ class RenderSpec(BaseModel):
|
|
|
60
60
|
|
|
61
61
|
camera: str = Field(..., description="Which camera to pull frames from, e.g. 'wrist' / 'agentview'")
|
|
62
62
|
fps: int = 30
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
67
|
flip: Literal["vertical", "horizontal", "both"] | None = Field(
|
|
68
68
|
None, description="'vertical': rows reversed (upside down); 'horizontal': mirrored; 'both': turned 180°; "
|
|
69
69
|
"None: as drawn")
|
|
@@ -103,20 +103,20 @@ class BenchmarkSpec(BaseModel):
|
|
|
103
103
|
handler_ref: str
|
|
104
104
|
bindings: dict[SeqFlags, str] = Field(..., description="SETUP / RESET / CHECK / SCORE (+ OBSERVE / STEP) → method name")
|
|
105
105
|
gpu: str | list[str] | None = None
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
envs: int | None = Field(default=None, ge=1, le=65536)
|
|
108
108
|
assets: list[VolumeRef] = Field(default_factory=list)
|
|
109
109
|
render: RenderSpec | None = None
|
|
110
110
|
cpu: int | None = None
|
|
111
111
|
memory_gb: int | None = None
|
|
112
112
|
secrets: list[SecretRef] = Field(default_factory=list)
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
engine: str | None = Field(default=None, pattern=KIND_NAME)
|
|
115
115
|
|
|
116
116
|
@model_validator(mode="after")
|
|
117
117
|
def _bindings_only_benchmark_hooks(self) -> "BenchmarkSpec":
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
|
|
119
|
+
|
|
120
120
|
bad = set(self.bindings) - set(BENCHMARK_BINDABLE)
|
|
121
121
|
if bad:
|
|
122
122
|
names = ", ".join(sorted(f.name or str(f.value) for f in bad))
|
|
@@ -132,7 +132,7 @@ class BenchmarkSpec(BaseModel):
|
|
|
132
132
|
|
|
133
133
|
class BenchmarkConditionSpec(BaseModel):
|
|
134
134
|
"""One episode setting exactly as the author declared it — a sparse list or a cross product, with its own step
|
|
135
|
-
cap, wall-clock limit and suite.
|
|
135
|
+
cap, wall-clock limit and suite."""
|
|
136
136
|
|
|
137
137
|
model_config = ConfigDict(extra="forbid")
|
|
138
138
|
|
|
@@ -160,43 +160,43 @@ class BenchmarkRegisterRequest(BaseModel):
|
|
|
160
160
|
render: RenderSpec | None = None
|
|
161
161
|
cpu: int | None = None
|
|
162
162
|
memory_gb: int | None = None
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
|
|
164
|
+
|
|
165
165
|
code: CodeBundle | None = None
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
|
|
167
|
+
|
|
168
168
|
suite_of: dict[str, str] = Field(default_factory=dict)
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
|
|
170
|
+
|
|
171
171
|
action_contract: ActionContract | None = None
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
|
|
173
|
+
|
|
174
174
|
secrets: list[SecretRef] = Field(default_factory=list)
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
|
|
176
|
+
|
|
177
177
|
score: bool = False
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
|
|
179
|
+
|
|
180
180
|
condition_list: list[BenchmarkConditionSpec] | None = Field(default=None, max_length=5000)
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
timeout_s: float | None = Field(default=None, gt=0)
|
|
183
|
-
|
|
183
|
+
|
|
184
184
|
default_adapter_ref: str | None = None
|
|
185
|
-
|
|
186
|
-
|
|
185
|
+
|
|
186
|
+
|
|
187
187
|
gpu: str | None = Field(default=None, max_length=32)
|
|
188
|
-
|
|
188
|
+
|
|
189
189
|
envs: int | None = Field(default=None, ge=1, le=65536)
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
193
|
params: dict[str, InferParam] | None = Field(default=None, max_length=32)
|
|
194
|
-
|
|
194
|
+
|
|
195
195
|
batched: bool = False
|
|
196
|
-
|
|
196
|
+
|
|
197
197
|
image_context: CodeBundle | None = None
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
|
|
199
|
+
|
|
200
200
|
engine: str | None = Field(default=None, pattern=KIND_NAME)
|
|
201
201
|
|
|
202
202
|
@model_validator(mode="after")
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""
|
|
2
|
-
|
|
2
|
+
Contract 3 — connect / lease (client → gateway; control plane, first call + renewal).
|
|
3
3
|
|
|
4
4
|
Control plane / data plane split: `connect(model)` goes through the gateway once (admission → acquire →
|
|
5
5
|
ensure worker up) and hands back the *direct* coordinates the client then uses to hit the worker's
|
|
6
|
-
`/act` without the gateway in the hot path (
|
|
6
|
+
`/act` without the gateway in the hot path (contract 4). The cold-start fallback is a defined wire body,
|
|
7
7
|
not an HTTP header alone — a 503 returns `WarmingError` (contract/errors.py), so `503 + Retry-After`
|
|
8
8
|
and the warming ETA are typed and checkable.
|
|
9
9
|
"""
|
|
@@ -13,7 +13,7 @@ from datetime import datetime
|
|
|
13
13
|
|
|
14
14
|
from pydantic import BaseModel, ConfigDict, Field
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
from sequence_base.contract.errors import WarmingError
|
|
18
18
|
from sequence_base.contract.io import ActionContract, ObservationContract
|
|
19
19
|
|
|
@@ -43,7 +43,7 @@ class ConnectResponse(BaseModel):
|
|
|
43
43
|
"""200 — the full set of coordinates for a direct worker connection.
|
|
44
44
|
|
|
45
45
|
`direct_secret` is a plaintext platform-minted bearer for the worker's `/act`; it is on the
|
|
46
|
-
allow-list of fields permitted to carry a secret value in the down direction (
|
|
46
|
+
allow-list of fields permitted to carry a secret value in the down direction (contract 6 / goal 15)."""
|
|
47
47
|
|
|
48
48
|
model_config = ConfigDict(extra="forbid")
|
|
49
49
|
|
|
@@ -53,9 +53,9 @@ class ConnectResponse(BaseModel):
|
|
|
53
53
|
lease: Lease
|
|
54
54
|
warming: bool = Field(default=False, description="True → worker still warming; see warming_eta_s")
|
|
55
55
|
warming_eta_s: int | None = Field(default=None, description="Seconds until warm, when warming")
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
action: ActionContract | None = None
|
|
58
58
|
observation: ObservationContract | None = None
|
|
59
59
|
embodiment: str | None = None
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
io: str | None = None
|