sequence-base 0.3.25__tar.gz → 0.3.27__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.25 → sequence_base-0.3.27}/PKG-INFO +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/pyproject.toml +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/auth.py +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/constants/env.py +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/constants/version.py +4 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/accounts.py +4 -5
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/benchmarks.py +6 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/deployments.py +7 -3
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/eval.py +4 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/policy.py +8 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/volumes.py +0 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ActRequest.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ActResponse.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ActionChunk.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ActionContract.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/AdapterTransform.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/AddLocal.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BenchmarkRegisterRequest.json +15 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BenchmarkSpec.json +16 -3
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BootstrapResponse.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ClampInfo.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Concurrency.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ConnectResponse.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/DeploymentPolicy.json +15 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/DeploymentRequest.json +15 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Embodiment.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Estimate.json +13 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/EvalDryRunResponse.json +13 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/EvalReport.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/EvalRequest.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/EvalResponse.json +13 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageSpec.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageStepRun.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/InferParam.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/LossyTransform.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/ObservationContract.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/PolicyRegistration.json +16 -3
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/PolicySpec.json +15 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/RenderSpec.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/RolloutResult.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/SecretCreateRequest.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/SecretRef.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/SuiteAgg.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/TaskAgg.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/UsageReport.json +2 -2
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeAttach.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/WarmingError.json +1 -1
- {sequence_base-0.3.25 → sequence_base-0.3.27}/.gitignore +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/README.md +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/codec/image.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/constants/headers.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/act.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/connect.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/errors.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/flags.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/io.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/templates.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/contract/wire.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/obs/log.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/obs/rid.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/presets/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/presets/robot_arm.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schema_export.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/telemetry/__init__.py +0 -0
- {sequence_base-0.3.25 → sequence_base-0.3.27}/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.3.
|
|
3
|
+
Version: 0.3.27
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sequence-base"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.27"
|
|
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
|
# 3.10, not 3.11: `seq` (which imports this) must run on ROS 2 Humble's Python 3.10, and nothing here needs 3.11.
|
|
6
6
|
# {2026-10-03 the full suite on CPython 3.10.20: "147 PASSED"; vermin --eval-annotations: "MINIMUM REQUIRED VERSIONS: 3.9"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Bearer-token auth helpers — one implementation of the direct-connect / internal secret check.
|
|
3
3
|
|
|
4
4
|
Three consumers, one rule: the container's inbound guard on a directly-exposed pod's /act, the
|
|
5
|
-
gateway's
|
|
6
|
-
|
|
5
|
+
gateway's issuance of that secret and its check of a worker's own reports, and the worker's emit() which
|
|
6
|
+
builds the outbound header. compare_digest, not `==`, everywhere — a wrong secret must
|
|
7
7
|
not be recoverable from response timing.
|
|
8
8
|
"""
|
|
9
9
|
from __future__ import annotations
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""SEQ_* environment variable NAMES — a single source. Values live in ~/.config/sequences/, never here."""
|
|
2
2
|
|
|
3
3
|
DIRECT_SECRET = "SEQ_DIRECT_SECRET" # inbound /act auth on a public pod
|
|
4
|
-
INTERNAL_SECRET = "SEQ_INTERNAL_SECRET" # auth for
|
|
4
|
+
INTERNAL_SECRET = "SEQ_INTERNAL_SECRET" # auth for a worker's own reports
|
|
5
5
|
GATEWAY_URL = "SEQ_GATEWAY_URL" # where the container sends telemetry
|
|
6
6
|
VOLUME_ROOT = "SEQ_VOLUME_ROOT" # where fetched weights land
|
|
7
7
|
MANIFEST = "SEQ_MANIFEST" # the policy manifest a container serves
|
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
# across deployments / repos can tell which version of a shape it is validating against. MUST change
|
|
5
5
|
# whenever any shared wire shape changes (a field added / removed / retyped) — that is what makes
|
|
6
6
|
# contract evolution mechanically detectable instead of eyeballed. Bump on any shape change.
|
|
7
|
-
CONTRACT_VERSION = "0.4.
|
|
7
|
+
CONTRACT_VERSION = "0.4.24" # 0.4.23 -> 0.4.24: PolicySpec / DeploymentPolicy.family and BenchmarkSpec / BenchmarkRegisterRequest.engine — the model family a policy declares and the physics engine a benchmark runs on (a short lowercase name, KIND_NAME), each its icon in the console (gs-plans U14)
|
|
8
|
+
# previous: 0.4.23 # 0.4.22 -> 0.4.23: Estimate.held_usd — what an eval holds from the balance when it differs from the estimate (the estimate on each machine's first card, the hold on its costliest; gs-plans inbox/audit-2026-10-07 B4)
|
|
9
|
+
# previous: 0.4.22 # 0.4.21 -> 0.4.22: ParamUsed.source "deployment" — an eval of a policy runs with the default its deployment sets (`seq policy params`), and its report says so (gs-plans deploy-serving/35)
|
|
8
10
|
# previous: 0.4.21 # 0.4.20 -> 0.4.21: InferParam.min / max / choices — the values an inference parameter allows (seq.Range / seq.OneOf), refused before inference outside them; None, left off the wire, as before (gs-plans deploy-serving/35)
|
|
9
11
|
# previous: 0.4.20 # 0.4.19 -> 0.4.20: BenchmarkRegisterRequest.params — the parameters a benchmark's @seq.setup declares (InferParam: type and default), which an eval may set; EvalReport.arm_params — per arm each parameter's value and source, and the steps that asked the policy of all it took (gs-plans eval-adapters/36)
|
|
10
12
|
# previous: 0.4.19 # 0.4.18 -> 0.4.19: RenderSpec.flip — how the platform turns a recorded camera's frames before encoding ("vertical" / "horizontal" / "both"; None, left off the wire, as drawn), declared once by the benchmark's author (seq.Record(flip=...)); gs-plans benchmarks
|
|
11
13
|
# previous: 0.4.18 # 0.4.17 -> 0.4.18: DeploymentPolicy.models — the platform models a policy calls while it runs (catalogue ids), which the act key driving it may call on /v1/chat and /v1/decide (gs-plans models-api/11)
|
|
12
14
|
# previous: 0.4.17 # 0.4.16 -> 0.4.17: weights optional — PolicySpec.weights, DeploymentRequest.weights and BootstrapResponse.weights_uri may be None, for a policy without a checkpoint (nothing copied or mounted; gs-plans storage T13)
|
|
13
15
|
# previous: 0.4.16 # 0.4.15 -> 0.4.16: batched benchmarks — SeqFlags.OBSERVE / STEP, BenchmarkSpec / BenchmarkRegisterRequest.envs and .batched; per-arm eval reports — EvalReport.arms / paired / timing / stop_reason, EvalStatus.CANCELED, Estimate.breakdown / default_timing, EvalResponse.arms, EvalDryRunResponse.layout / notes
|
|
14
|
-
# previous: 0.4.15 # 0.4.14 -> 0.4.15: limits count GPUs and CPU/memory are billed
|
|
16
|
+
# previous: 0.4.15 # 0.4.14 -> 0.4.15: limits count GPUs and CPU/memory are billed per second — Resources.cpu / memory_gb optional floats + cpu_limit / memory_limit_gb; Autoscaler.max_gpus / on_full / queue_timeout_s replace max_containers; Concurrency fields optional + replicas_per_gpu / gpus_per_replica; DeploymentStatusResponse.reason; EvalRequest.policy_instances / policy_gpu / benchmark_instances / benchmark_gpu / envs replace gpus / envs_per_gpu; EvalStatus.QUEUED; EvalCards / EvalQueue
|
|
15
17
|
# previous: 0.4.14 # 0.4.13 -> 0.4.14: the /act wire is opaque (ActRequest.inputs / ActResponse.outputs); action / observation contracts optional + DeploymentPolicy/PolicySpec/ConnectResponse .io; the robot-arm types live in sequence_base.presets.robot_arm (contract.act / contract.io re-export them); ImageStepAddLocal (seq.Image.add_local_*); ActionSpace.JOINT_VELOCITY (pi0.5 DROID's joint velocities + gripper position)
|
|
16
18
|
# previous: 0.4.13 # 0.4.12 -> 0.4.13: template://<name>[@v<n>] — official template weights (parse_template); gs:// / s3:// / https:// still accepted until their removal
|
|
17
19
|
# previous: 0.4.12 # 0.4.11 -> 0.4.12: one error definition — ErrorBody is every non-2xx body (detail, code, retryable, retry_after_s, request_id, hint, details), ErrorCode covers every case, ERRORS / ErrorCodes.json give each code its status, retryability, SDK class and CLI exit code
|
|
@@ -29,7 +29,7 @@ __all__ = [
|
|
|
29
29
|
|
|
30
30
|
class SecretRef(BaseModel):
|
|
31
31
|
"""A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the
|
|
32
|
-
|
|
32
|
+
platform keeps the value and injects it when a worker starts. Never carries a value."""
|
|
33
33
|
|
|
34
34
|
model_config = ConfigDict(extra="forbid")
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ class SecretRef(BaseModel):
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
class SecretCreateRequest(BaseModel):
|
|
40
|
-
"""POST /v1/secrets — one name = one group of env values (e.g.
|
|
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
43
|
# F6: write-direction plaintext carrier — hide_input_in_errors so a malformed body's ValidationError
|
|
@@ -64,8 +64,7 @@ class SecretInfo(BaseModel):
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class BootstrapResponse(BaseModel):
|
|
67
|
-
"""
|
|
68
|
-
direct TLS `/act`. `direct_secret` + `tls_key` are DOWN-direction platform secrets; `env` is the
|
|
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
|
|
69
68
|
WRITE-direction injection of the policy's declared user secrets into its subprocess (goal 15)."""
|
|
70
69
|
|
|
71
70
|
# F6: carries down-direction platform secrets + write-direction user env — hide_input_in_errors so a
|
|
@@ -82,7 +81,7 @@ class BootstrapResponse(BaseModel):
|
|
|
82
81
|
|
|
83
82
|
|
|
84
83
|
class UsageReport(BaseModel):
|
|
85
|
-
"""
|
|
84
|
+
"""A worker's metering report, sent as it serves. Carries counts only, no secrets.
|
|
86
85
|
This usage shape is defined here (sequence-base) once, so gateway and worker cannot drift."""
|
|
87
86
|
|
|
88
87
|
model_config = ConfigDict(extra="forbid")
|
|
@@ -19,7 +19,7 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
|
19
19
|
from sequence_base.contract.accounts import SecretRef
|
|
20
20
|
from sequence_base.contract.deployments import CodeBundle, DeploymentState, InferParam
|
|
21
21
|
from sequence_base.contract.flags import BENCHMARK_BATCHED, BENCHMARK_BINDABLE, SeqFlags
|
|
22
|
-
from sequence_base.contract.policy import ActionContract, ImageSpec, VolumeRef
|
|
22
|
+
from sequence_base.contract.policy import KIND_NAME, ActionContract, ImageSpec, VolumeRef
|
|
23
23
|
|
|
24
24
|
__all__ = [
|
|
25
25
|
"Variant",
|
|
@@ -110,6 +110,8 @@ class BenchmarkSpec(BaseModel):
|
|
|
110
110
|
cpu: int | None = None
|
|
111
111
|
memory_gb: int | None = None
|
|
112
112
|
secrets: list[SecretRef] = Field(default_factory=list)
|
|
113
|
+
# The physics engine its simulation runs on (mujoco, sapien, isaac, genesis, pybullet): its icon in the console.
|
|
114
|
+
engine: str | None = Field(default=None, pattern=KIND_NAME)
|
|
113
115
|
|
|
114
116
|
@model_validator(mode="after")
|
|
115
117
|
def _bindings_only_benchmark_hooks(self) -> "BenchmarkSpec":
|
|
@@ -193,6 +195,9 @@ class BenchmarkRegisterRequest(BaseModel):
|
|
|
193
195
|
batched: bool = False
|
|
194
196
|
# The Dockerfile's build context, as for a deployment.
|
|
195
197
|
image_context: CodeBundle | None = None
|
|
198
|
+
# The physics engine the benchmark declares (`@seq.benchmark(engine="mujoco")`): its icon in the console. None:
|
|
199
|
+
# undeclared, or an SDK from before it.
|
|
200
|
+
engine: str | None = Field(default=None, pattern=KIND_NAME)
|
|
196
201
|
|
|
197
202
|
@model_validator(mode="after")
|
|
198
203
|
def _param_names(self) -> "BenchmarkRegisterRequest":
|
|
@@ -25,6 +25,7 @@ from sequence_base.contract.templates import TEMPLATE_SCHEME, parse_template
|
|
|
25
25
|
from sequence_base.contract.volumes import VOL_SCHEME, parse_vol
|
|
26
26
|
from sequence_base.contract.io import Embodiment, ObservationContract
|
|
27
27
|
from sequence_base.contract.policy import (
|
|
28
|
+
KIND_NAME,
|
|
28
29
|
ActionContract,
|
|
29
30
|
Concurrency,
|
|
30
31
|
ImageSpec,
|
|
@@ -52,9 +53,9 @@ class Resources(BaseModel):
|
|
|
52
53
|
model_config = ConfigDict(extra="forbid")
|
|
53
54
|
|
|
54
55
|
gpu: list[str]
|
|
55
|
-
# Physical cores and GiB the worker requests, billed
|
|
56
|
-
#
|
|
57
|
-
#
|
|
56
|
+
# Physical cores and GiB the worker requests, billed per second at the greater of the request and what it uses.
|
|
57
|
+
# None requests the minimum (0.125 cores, 0.125 GiB) and the worker may use more. A limit caps what it may use;
|
|
58
|
+
# None leaves it free to burst.
|
|
58
59
|
cpu: float | None = Field(default=None, ge=0.125, le=64)
|
|
59
60
|
cpu_limit: float | None = Field(default=None, ge=0.125, le=128)
|
|
60
61
|
memory_gb: float | None = Field(default=None, ge=0.125, le=1024)
|
|
@@ -194,6 +195,9 @@ class DeploymentPolicy(BaseModel):
|
|
|
194
195
|
# The author's own description of what infer() takes and returns; stored, handed to the robot at connect, never
|
|
195
196
|
# interpreted by the platform.
|
|
196
197
|
io: str | None = Field(default=None, max_length=4000)
|
|
198
|
+
# The model family the policy declares (`@seq.policy(family="pi")`): its icon in the console. None: undeclared,
|
|
199
|
+
# or an SDK from before it.
|
|
200
|
+
family: str | None = Field(default=None, pattern=KIND_NAME)
|
|
197
201
|
# The inference parameters @seq.infer takes beyond the observation (name -> type, default). None: an older
|
|
198
202
|
# SDK that did not look; {}: the policy declares none.
|
|
199
203
|
params: dict[str, InferParam] | None = Field(default=None, max_length=32)
|
|
@@ -102,6 +102,10 @@ class Estimate(BaseModel):
|
|
|
102
102
|
breakdown: dict[str, float] | None = None
|
|
103
103
|
# True when no run of this benchmark version has been measured yet and the estimate uses the default step time.
|
|
104
104
|
default_timing: bool | None = None
|
|
105
|
+
# What is held from the balance while the eval runs, when it differs from the estimate: the estimate prices each
|
|
106
|
+
# machine on the first card of its list (where it starts when one is free), the hold on the costliest (the most it
|
|
107
|
+
# can come to), with the reserve buffer, at most max_usd. None from a gateway before contract 0.4.23.
|
|
108
|
+
held_usd: float | None = None
|
|
105
109
|
|
|
106
110
|
|
|
107
111
|
class EvalResponse(BaseModel):
|
|
@@ -175,6 +175,12 @@ class Concurrency(BaseModel):
|
|
|
175
175
|
return self
|
|
176
176
|
|
|
177
177
|
|
|
178
|
+
# A family or an engine as a declaration names it: a short lowercase name (pi, gr00t, cosmos; mujoco, sapien, isaac).
|
|
179
|
+
# The console draws a policy's or a benchmark's icon from it, and the default icon for a name it does not know; the
|
|
180
|
+
# platform reads nothing else into it. {gs-plans U14 "声明参数 @seq.policy(family=) 和 @seq.benchmark(engine=)"}
|
|
181
|
+
KIND_NAME = r"^[a-z0-9][a-z0-9._-]{0,31}$"
|
|
182
|
+
|
|
183
|
+
|
|
178
184
|
class PolicySpec(BaseModel):
|
|
179
185
|
"""What `@seq.policy(...)` accrues — a policy's complete infra declaration, losslessly. `action` /
|
|
180
186
|
`observation` / `embodiments` are optional (contract 0.4.14): a policy that declares none defines its I/O in its own
|
|
@@ -215,6 +221,8 @@ class PolicySpec(BaseModel):
|
|
|
215
221
|
# The author's own description of what infer() takes and returns. Stored and shown (connect hands it to the
|
|
216
222
|
# robot); the platform never interprets it.
|
|
217
223
|
io: str | None = Field(default=None, max_length=4000)
|
|
224
|
+
# The model family it belongs to (pi, gr00t, cosmos, lerobot): its icon in the console. None: undeclared.
|
|
225
|
+
family: str | None = Field(default=None, pattern=KIND_NAME)
|
|
218
226
|
|
|
219
227
|
@field_validator("weights")
|
|
220
228
|
@classmethod
|
|
@@ -10,7 +10,6 @@ WHY direct-to-storage targets rather than streaming through the API: a checkpoin
|
|
|
10
10
|
host caps a request body at 32 MiB and would carry every byte twice. WHY the md5 list up front: the commit can
|
|
11
11
|
then prove the platform holds exactly the bytes the client had — a truncated or corrupted upload is refused
|
|
12
12
|
instead of becoming the weights a robot runs on.
|
|
13
|
-
{gs-plans/customization/volumes.md "上传流程" + "为什么不直接上传进 MODAL VOLUME"}
|
|
14
13
|
"""
|
|
15
14
|
from __future__ import annotations
|
|
16
15
|
|
{sequence_base-0.3.25 → sequence_base-0.3.27}/sequence_base/schemas/BenchmarkRegisterRequest.json
RENAMED
|
@@ -558,7 +558,7 @@
|
|
|
558
558
|
},
|
|
559
559
|
"SecretRef": {
|
|
560
560
|
"additionalProperties": false,
|
|
561
|
-
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\
|
|
561
|
+
"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.",
|
|
562
562
|
"properties": {
|
|
563
563
|
"name": {
|
|
564
564
|
"title": "Name",
|
|
@@ -702,6 +702,19 @@
|
|
|
702
702
|
"default": null,
|
|
703
703
|
"title": "Default Adapter Ref"
|
|
704
704
|
},
|
|
705
|
+
"engine": {
|
|
706
|
+
"anyOf": [
|
|
707
|
+
{
|
|
708
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,31}$",
|
|
709
|
+
"type": "string"
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"type": "null"
|
|
713
|
+
}
|
|
714
|
+
],
|
|
715
|
+
"default": null,
|
|
716
|
+
"title": "Engine"
|
|
717
|
+
},
|
|
705
718
|
"envs": {
|
|
706
719
|
"anyOf": [
|
|
707
720
|
{
|
|
@@ -836,5 +849,5 @@
|
|
|
836
849
|
],
|
|
837
850
|
"title": "BenchmarkRegisterRequest",
|
|
838
851
|
"type": "object",
|
|
839
|
-
"x-contract-version": "0.4.
|
|
852
|
+
"x-contract-version": "0.4.24"
|
|
840
853
|
}
|
|
@@ -264,7 +264,7 @@
|
|
|
264
264
|
},
|
|
265
265
|
"SecretRef": {
|
|
266
266
|
"additionalProperties": false,
|
|
267
|
-
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\
|
|
267
|
+
"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.",
|
|
268
268
|
"properties": {
|
|
269
269
|
"name": {
|
|
270
270
|
"title": "Name",
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
],
|
|
298
298
|
"title": "SeqFlags",
|
|
299
299
|
"type": "integer",
|
|
300
|
-
"x-contract-version": "0.4.
|
|
300
|
+
"x-contract-version": "0.4.24",
|
|
301
301
|
"x-flag-names": {
|
|
302
302
|
"CHECK": 65536,
|
|
303
303
|
"INFER": 16,
|
|
@@ -416,6 +416,19 @@
|
|
|
416
416
|
"default": null,
|
|
417
417
|
"title": "Cpu"
|
|
418
418
|
},
|
|
419
|
+
"engine": {
|
|
420
|
+
"anyOf": [
|
|
421
|
+
{
|
|
422
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,31}$",
|
|
423
|
+
"type": "string"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"type": "null"
|
|
427
|
+
}
|
|
428
|
+
],
|
|
429
|
+
"default": null,
|
|
430
|
+
"title": "Engine"
|
|
431
|
+
},
|
|
419
432
|
"envs": {
|
|
420
433
|
"anyOf": [
|
|
421
434
|
{
|
|
@@ -505,5 +518,5 @@
|
|
|
505
518
|
],
|
|
506
519
|
"title": "BenchmarkSpec",
|
|
507
520
|
"type": "object",
|
|
508
|
-
"x-contract-version": "0.4.
|
|
521
|
+
"x-contract-version": "0.4.24"
|
|
509
522
|
}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"additionalProperties": false,
|
|
32
|
-
"description": "
|
|
32
|
+
"description": "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\nWRITE-direction injection of the policy's declared user secrets into its subprocess (goal 15).",
|
|
33
33
|
"properties": {
|
|
34
34
|
"direct_secret": {
|
|
35
35
|
"description": "Platform-minted bearer the worker's guard checks",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
],
|
|
80
80
|
"title": "BootstrapResponse",
|
|
81
81
|
"type": "object",
|
|
82
|
-
"x-contract-version": "0.4.
|
|
82
|
+
"x-contract-version": "0.4.24"
|
|
83
83
|
}
|
|
@@ -318,7 +318,7 @@
|
|
|
318
318
|
},
|
|
319
319
|
"SecretRef": {
|
|
320
320
|
"additionalProperties": false,
|
|
321
|
-
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\
|
|
321
|
+
"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.",
|
|
322
322
|
"properties": {
|
|
323
323
|
"name": {
|
|
324
324
|
"title": "Name",
|
|
@@ -373,6 +373,19 @@
|
|
|
373
373
|
"default": null,
|
|
374
374
|
"title": "Embodiments"
|
|
375
375
|
},
|
|
376
|
+
"family": {
|
|
377
|
+
"anyOf": [
|
|
378
|
+
{
|
|
379
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,31}$",
|
|
380
|
+
"type": "string"
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"type": "null"
|
|
384
|
+
}
|
|
385
|
+
],
|
|
386
|
+
"default": null,
|
|
387
|
+
"title": "Family"
|
|
388
|
+
},
|
|
376
389
|
"frames_per_chunk": {
|
|
377
390
|
"anyOf": [
|
|
378
391
|
{
|
|
@@ -463,5 +476,5 @@
|
|
|
463
476
|
],
|
|
464
477
|
"title": "DeploymentPolicy",
|
|
465
478
|
"type": "object",
|
|
466
|
-
"x-contract-version": "0.4.
|
|
479
|
+
"x-contract-version": "0.4.24"
|
|
467
480
|
}
|
|
@@ -368,6 +368,19 @@
|
|
|
368
368
|
"default": null,
|
|
369
369
|
"title": "Embodiments"
|
|
370
370
|
},
|
|
371
|
+
"family": {
|
|
372
|
+
"anyOf": [
|
|
373
|
+
{
|
|
374
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,31}$",
|
|
375
|
+
"type": "string"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"type": "null"
|
|
379
|
+
}
|
|
380
|
+
],
|
|
381
|
+
"default": null,
|
|
382
|
+
"title": "Family"
|
|
383
|
+
},
|
|
371
384
|
"frames_per_chunk": {
|
|
372
385
|
"anyOf": [
|
|
373
386
|
{
|
|
@@ -890,7 +903,7 @@
|
|
|
890
903
|
},
|
|
891
904
|
"SecretRef": {
|
|
892
905
|
"additionalProperties": false,
|
|
893
|
-
"description": "A by-name reference to a secret (PolicySpec.secrets / BenchmarkSpec.secrets). Name only — the\
|
|
906
|
+
"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.",
|
|
894
907
|
"properties": {
|
|
895
908
|
"name": {
|
|
896
909
|
"title": "Name",
|
|
@@ -1077,5 +1090,5 @@
|
|
|
1077
1090
|
],
|
|
1078
1091
|
"title": "DeploymentRequest",
|
|
1079
1092
|
"type": "object",
|
|
1080
|
-
"x-contract-version": "0.4.
|
|
1093
|
+
"x-contract-version": "0.4.24"
|
|
1081
1094
|
}
|
|
@@ -32,6 +32,18 @@
|
|
|
32
32
|
"default": null,
|
|
33
33
|
"title": "Default Timing"
|
|
34
34
|
},
|
|
35
|
+
"held_usd": {
|
|
36
|
+
"anyOf": [
|
|
37
|
+
{
|
|
38
|
+
"type": "number"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "null"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"default": null,
|
|
45
|
+
"title": "Held Usd"
|
|
46
|
+
},
|
|
35
47
|
"vlm_calls": {
|
|
36
48
|
"title": "Vlm Calls",
|
|
37
49
|
"type": "integer"
|
|
@@ -48,5 +60,5 @@
|
|
|
48
60
|
],
|
|
49
61
|
"title": "Estimate",
|
|
50
62
|
"type": "object",
|
|
51
|
-
"x-contract-version": "0.4.
|
|
63
|
+
"x-contract-version": "0.4.24"
|
|
52
64
|
}
|
|
@@ -91,6 +91,18 @@
|
|
|
91
91
|
"default": null,
|
|
92
92
|
"title": "Default Timing"
|
|
93
93
|
},
|
|
94
|
+
"held_usd": {
|
|
95
|
+
"anyOf": [
|
|
96
|
+
{
|
|
97
|
+
"type": "number"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"type": "null"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"default": null,
|
|
104
|
+
"title": "Held Usd"
|
|
105
|
+
},
|
|
94
106
|
"vlm_calls": {
|
|
95
107
|
"title": "Vlm Calls",
|
|
96
108
|
"type": "integer"
|
|
@@ -228,5 +240,5 @@
|
|
|
228
240
|
],
|
|
229
241
|
"title": "EvalDryRunResponse",
|
|
230
242
|
"type": "object",
|
|
231
|
-
"x-contract-version": "0.4.
|
|
243
|
+
"x-contract-version": "0.4.24"
|
|
232
244
|
}
|