sequence-base 0.4.2__tar.gz → 0.4.4__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.2 → sequence_base-0.4.4}/.gitignore +1 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/PKG-INFO +2 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/pyproject.toml +4 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/__init__.py +6 -3
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/constants/version.py +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/__init__.py +5 -2
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/policy.py +32 -4
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/obs/log.py +6 -2
- sequence_base-0.4.4/sequence_base/obs/rid.py +64 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schema_export.py +4 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ActRequest.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ActResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ActionChunk.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ActionContract.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/AdapterTransform.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/AddLocal.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BenchmarkRegisterRequest.json +43 -2
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BenchmarkSpec.json +44 -3
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BootstrapResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ClampInfo.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Concurrency.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ConnectResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/DeploymentPolicy.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/DeploymentRequest.json +43 -2
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Embodiment.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Estimate.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/EvalReport.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/EvalRequest.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/EvalResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageSpec.json +43 -2
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageStepRun.json +1 -1
- sequence_base-0.4.4/sequence_base/schemas/ImageStepTemplateFiles.json +41 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/InferParam.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/LossyTransform.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/ObservationContract.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/PolicyRegistration.json +44 -3
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/PolicySpec.json +43 -2
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/RenderSpec.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/RolloutResult.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/SecretCreateRequest.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/SecretRef.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/SuiteAgg.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/TaskAgg.json +1 -1
- sequence_base-0.4.4/sequence_base/schemas/TemplateFiles.json +26 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeAttach.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/WarmingError.json +1 -1
- sequence_base-0.4.2/sequence_base/obs/rid.py +0 -27
- {sequence_base-0.4.2 → sequence_base-0.4.4}/README.md +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/auth.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/codec/image.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/constants/headers.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/accounts.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/act.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/benchmarks.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/connect.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/deployments.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/errors.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/eval.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/flags.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/io.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/templates.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/volumes.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/contract/wire.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/presets/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/presets/robot_arm.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/telemetry/__init__.py +0 -0
- {sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/telemetry/events.py +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sequence-base
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
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
|
+
Project-URL: Changelog, https://generalsequences.com/docs/changelog/
|
|
5
6
|
Requires-Python: >=3.10
|
|
6
7
|
Requires-Dist: pydantic>=2.0
|
|
7
8
|
Provides-Extra: codec
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sequence-base"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.4"
|
|
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"]
|
|
7
7
|
|
|
8
|
+
[project.urls]
|
|
9
|
+
Changelog = "https://generalsequences.com/docs/changelog/"
|
|
10
|
+
|
|
8
11
|
[project.optional-dependencies]
|
|
9
12
|
codec = ["pillow>=10", "numpy>=1.26"]
|
|
10
13
|
test = ["pytest", "jsonschema>=4"]
|
|
@@ -18,6 +18,9 @@ from sequence_base.contract import (
|
|
|
18
18
|
ActResponse,
|
|
19
19
|
AddLocal,
|
|
20
20
|
ImageStepAddLocal,
|
|
21
|
+
FROZEN_PATH,
|
|
22
|
+
TemplateFiles,
|
|
23
|
+
ImageStepTemplateFiles,
|
|
21
24
|
Camera,
|
|
22
25
|
Embodiment,
|
|
23
26
|
ObservationContract,
|
|
@@ -102,7 +105,7 @@ from sequence_base.constants.version import CONTRACT_VERSION
|
|
|
102
105
|
|
|
103
106
|
|
|
104
107
|
from sequence_base.obs.log import Timer, enabled, log
|
|
105
|
-
from sequence_base.obs.rid import HEADER, clean, new_rid
|
|
108
|
+
from sequence_base.obs.rid import HEADER, clean, clean_text, new_rid, unescape_text
|
|
106
109
|
|
|
107
110
|
|
|
108
111
|
from sequence_base.errors.transport import (
|
|
@@ -126,7 +129,7 @@ __all__ = [
|
|
|
126
129
|
"ActRequest", "ActResponse",
|
|
127
130
|
|
|
128
131
|
"SeqFlags", "ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
|
|
129
|
-
"ImageStep", "ImageSpec",
|
|
132
|
+
"FROZEN_PATH", "TemplateFiles", "ImageStepTemplateFiles", "ImageStep", "ImageSpec",
|
|
130
133
|
"VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
|
|
131
134
|
"PolicySpec", "PolicyRegistration",
|
|
132
135
|
|
|
@@ -149,7 +152,7 @@ __all__ = [
|
|
|
149
152
|
|
|
150
153
|
"ErrorCode", "ErrorBody", "WarmingError", "ERRORS", "ErrorSpec", "code_for_status", "CONTRACT_VERSION",
|
|
151
154
|
|
|
152
|
-
"HEADER", "new_rid", "clean", "log", "Timer", "enabled",
|
|
155
|
+
"HEADER", "new_rid", "clean", "clean_text", "unescape_text", "log", "Timer", "enabled",
|
|
153
156
|
|
|
154
157
|
"TransportUnavailable", "TransportWarming", "TransportRejected", "TransportOverloaded",
|
|
155
158
|
|
|
@@ -31,6 +31,9 @@ from sequence_base.contract.policy import (
|
|
|
31
31
|
ImageStepUvPip,
|
|
32
32
|
AddLocal,
|
|
33
33
|
ImageStepAddLocal,
|
|
34
|
+
FROZEN_PATH,
|
|
35
|
+
TemplateFiles,
|
|
36
|
+
ImageStepTemplateFiles,
|
|
34
37
|
PolicyRegistration,
|
|
35
38
|
PolicySpec,
|
|
36
39
|
VolumeMount,
|
|
@@ -117,8 +120,8 @@ __all__ = [
|
|
|
117
120
|
"ActRequest", "ActResponse",
|
|
118
121
|
|
|
119
122
|
"SeqFlags",
|
|
120
|
-
"ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
|
|
121
|
-
"ImageSpec",
|
|
123
|
+
"ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
|
|
124
|
+
"TemplateFiles", "ImageStepTemplateFiles", "FROZEN_PATH", "ImageStep", "ImageSpec",
|
|
122
125
|
"VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
|
|
123
126
|
"PolicySpec", "PolicyRegistration",
|
|
124
127
|
|
|
@@ -32,6 +32,9 @@ __all__ = [
|
|
|
32
32
|
"ImageStepRun",
|
|
33
33
|
"AddLocal",
|
|
34
34
|
"ImageStepAddLocal",
|
|
35
|
+
"FROZEN_PATH",
|
|
36
|
+
"TemplateFiles",
|
|
37
|
+
"ImageStepTemplateFiles",
|
|
35
38
|
"ImageStep",
|
|
36
39
|
"ImageSpec",
|
|
37
40
|
"VolumeMount",
|
|
@@ -101,14 +104,36 @@ class ImageStepAddLocal(BaseModel):
|
|
|
101
104
|
add_local: AddLocal
|
|
102
105
|
|
|
103
106
|
|
|
104
|
-
|
|
107
|
+
|
|
108
|
+
FROZEN_PATH = "/seq/frozen"
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class TemplateFiles(BaseModel):
|
|
112
|
+
"""An official template version's frozen build files - the source at its pinned commit, every Python package and
|
|
113
|
+
system package its image installs, the assets it downloads - which the platform keeps itself, so a build never
|
|
114
|
+
reaches the sites they came from (`seq.Image.template_files`). Each run_commands step after this one reads them,
|
|
115
|
+
read-only, at FROZEN_PATH; nothing of them stays in the image unless a step copies or installs it.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
model_config = ConfigDict(extra="forbid")
|
|
119
|
+
|
|
120
|
+
template: str = Field(..., pattern=r"^[a-z0-9][a-z0-9-]{0,63}$", description="the template's name, as seq init takes it")
|
|
121
|
+
version: int = Field(..., ge=1, le=999_999_999, description="the template version whose files these are")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class ImageStepTemplateFiles(BaseModel):
|
|
125
|
+
model_config = ConfigDict(extra="forbid")
|
|
126
|
+
template_files: TemplateFiles
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
ImageStep = ImageStepUvPip | ImageStepApt | ImageStepEnv | ImageStepRun | ImageStepAddLocal | ImageStepTemplateFiles
|
|
105
130
|
|
|
106
131
|
|
|
107
132
|
class ImageSpec(BaseModel):
|
|
108
133
|
"""Declarative image, built by the platform. Exactly one of
|
|
109
134
|
`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile
|
|
110
135
|
is its OWN component, never smuggled into the `base` string, so the gateway can tell a
|
|
111
|
-
registry build from a Dockerfile build. `steps` is an ordered list of the
|
|
136
|
+
registry build from a Dockerfile build. `steps` is an ordered list of the step variants above
|
|
112
137
|
(a bare list[dict] is refused), extending whichever base was chosen."""
|
|
113
138
|
|
|
114
139
|
model_config = ConfigDict(extra="forbid")
|
|
@@ -130,6 +155,9 @@ class ImageSpec(BaseModel):
|
|
|
130
155
|
"(inline Dockerfile source); got "
|
|
131
156
|
+ ("both" if self.base is not None else "neither")
|
|
132
157
|
)
|
|
158
|
+
|
|
159
|
+
if sum(isinstance(s, ImageStepTemplateFiles) for s in self.steps) > 1:
|
|
160
|
+
raise ValueError("an image takes one template_files step - the files of one template version")
|
|
133
161
|
return self
|
|
134
162
|
|
|
135
163
|
|
|
@@ -251,8 +279,8 @@ MAX_WEIGHTS_PARTS = 8
|
|
|
251
279
|
|
|
252
280
|
def check_weights_uri(v: str, what: str = "weights") -> str:
|
|
253
281
|
"""A weights origin the build can provision: an official template://, an hf:// repo or an uploaded vol://
|
|
254
|
-
volume.
|
|
255
|
-
|
|
282
|
+
volume. Weights from a storage bucket or a URL were removed in contract 0.5.0, after a release that warned for 7
|
|
283
|
+
days: their files are uploaded once as a volume."""
|
|
256
284
|
|
|
257
285
|
if v.startswith("template://"):
|
|
258
286
|
from sequence_base.contract.templates import parse_template
|
|
@@ -9,7 +9,11 @@ import os
|
|
|
9
9
|
import sys
|
|
10
10
|
import time
|
|
11
11
|
|
|
12
|
-
from sequence_base.obs.rid import clean
|
|
12
|
+
from sequence_base.obs.rid import clean, clean_text
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
TEXT_FIELDS = frozenset({"error"})
|
|
13
17
|
|
|
14
18
|
|
|
15
19
|
def enabled() -> bool:
|
|
@@ -24,7 +28,7 @@ def log(ev: str, rid: str | None = None, **fields: object) -> None:
|
|
|
24
28
|
parts = [f"seq ev={clean(ev)}"]
|
|
25
29
|
if rid:
|
|
26
30
|
parts.append(f"rid={clean(rid)}")
|
|
27
|
-
parts.extend(f"{k}={clean(v)}" for k, v in fields.items() if v is not None)
|
|
31
|
+
parts.extend(f"{k}={clean_text(v) if k in TEXT_FIELDS else clean(v)}" for k, v in fields.items() if v is not None)
|
|
28
32
|
print(" ".join(parts), file=sys.stdout, flush=True)
|
|
29
33
|
|
|
30
34
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Correlation id — one value threads a call through sdk → gateway → worker, so "what happened to that
|
|
3
|
+
call" is one grep instead of three log stores and a stopwatch. {from general-sequences obs.py}
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
import uuid
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
HEADER = "X-Seq-Request-Id"
|
|
13
|
+
|
|
14
|
+
_UNSAFE = re.compile(r"\s+")
|
|
15
|
+
_BREAK = re.compile(r"\r\n|\r|\n")
|
|
16
|
+
_SPACE = re.compile(r"\s")
|
|
17
|
+
_ESCAPED = re.compile(r"\\(.)|_")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
FIELD_MAX = 200
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
TEXT_MAX = 4000
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def new_rid() -> str:
|
|
27
|
+
"""Short (read off a terminal, quoted in bug reports) + random (gateway instances don't
|
|
28
|
+
coordinate, so it must not collide)."""
|
|
29
|
+
return "r-" + uuid.uuid4().hex[:8]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def clean(v: object, limit: int = FIELD_MAX) -> str:
|
|
33
|
+
"""Collapse whitespace and cap length. A value with a space would split into two log fields and
|
|
34
|
+
let anything user-supplied forge keys into the line; 200 chars keeps a real error readable."""
|
|
35
|
+
s = _UNSAFE.sub("_", str(v))
|
|
36
|
+
return s if len(s) <= limit else s[:limit - 3] + "..."
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def clean_text(v: object, limit: int = TEXT_MAX) -> str:
|
|
40
|
+
"""A long text - an error with its traceback - as one log field that reads back as it was (unescape_text): a
|
|
41
|
+
backslash written `\\\\`, an underscore `\\_`, a line break `\\n`, every other whitespace character `_` (read
|
|
42
|
+
back as a space, so a traceback keeps its indentation), cut at `limit`. It holds no whitespace, so like clean() it
|
|
43
|
+
can neither split the line nor forge a field into it.
|
|
44
|
+
|
|
45
|
+
WHY escaped and not collapsed: clean() writes a traceback's line breaks and spaces both as `_`, and a reader that
|
|
46
|
+
turns `_` back into spaces breaks every name with one in it (infer_chunk); a traceback is read for those names."""
|
|
47
|
+
s = "\\n".join(_SPACE.sub("_", line.replace("\\", "\\\\").replace("_", "\\_")) for line in _BREAK.split(str(v)))
|
|
48
|
+
if len(s) <= limit:
|
|
49
|
+
return s
|
|
50
|
+
s = s[:limit - 3]
|
|
51
|
+
if (len(s) - len(s.rstrip("\\"))) % 2:
|
|
52
|
+
s = s[:-1]
|
|
53
|
+
return s + "..."
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def unescape_text(s: str) -> str:
|
|
57
|
+
"""clean_text's field as the text it was: `\\n` a line break, `\\\\` a backslash, `\\_` an underscore, `_` a
|
|
58
|
+
space; any other backslash as written. One pass, left to right."""
|
|
59
|
+
def one(m: re.Match) -> str:
|
|
60
|
+
if m.group(1) is None:
|
|
61
|
+
return " "
|
|
62
|
+
return {"n": "\n", "\\": "\\", "_": "_"}.get(m.group(1), m.group(0))
|
|
63
|
+
|
|
64
|
+
return _ESCAPED.sub(one, s)
|
|
@@ -92,6 +92,8 @@ from sequence_base.contract.policy import (
|
|
|
92
92
|
AddLocal,
|
|
93
93
|
ImageStepAddLocal,
|
|
94
94
|
ImageStepRun,
|
|
95
|
+
ImageStepTemplateFiles,
|
|
96
|
+
TemplateFiles,
|
|
95
97
|
ImageStepUvPip,
|
|
96
98
|
PolicyRegistration,
|
|
97
99
|
PolicySpec,
|
|
@@ -120,6 +122,8 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
|
|
|
120
122
|
"ImageStepRun": ImageStepRun,
|
|
121
123
|
"AddLocal": AddLocal,
|
|
122
124
|
"ImageStepAddLocal": ImageStepAddLocal,
|
|
125
|
+
"TemplateFiles": TemplateFiles,
|
|
126
|
+
"ImageStepTemplateFiles": ImageStepTemplateFiles,
|
|
123
127
|
"ImageSpec": ImageSpec,
|
|
124
128
|
"VolumeMount": VolumeMount,
|
|
125
129
|
"VolumeRef": VolumeRef,
|
{sequence_base-0.4.2 → sequence_base-0.4.4}/sequence_base/schemas/BenchmarkRegisterRequest.json
RENAMED
|
@@ -269,7 +269,7 @@
|
|
|
269
269
|
},
|
|
270
270
|
"ImageSpec": {
|
|
271
271
|
"additionalProperties": false,
|
|
272
|
-
"description": "Declarative image, built by the platform. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string, so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the
|
|
272
|
+
"description": "Declarative image, built by the platform. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string, so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the step variants above\n(a bare list[dict] is refused), extending whichever base was chosen.",
|
|
273
273
|
"properties": {
|
|
274
274
|
"base": {
|
|
275
275
|
"anyOf": [
|
|
@@ -325,6 +325,9 @@
|
|
|
325
325
|
},
|
|
326
326
|
{
|
|
327
327
|
"$ref": "#/$defs/ImageStepAddLocal"
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"$ref": "#/$defs/ImageStepTemplateFiles"
|
|
328
331
|
}
|
|
329
332
|
]
|
|
330
333
|
},
|
|
@@ -414,6 +417,19 @@
|
|
|
414
417
|
"title": "ImageStepRun",
|
|
415
418
|
"type": "object"
|
|
416
419
|
},
|
|
420
|
+
"ImageStepTemplateFiles": {
|
|
421
|
+
"additionalProperties": false,
|
|
422
|
+
"properties": {
|
|
423
|
+
"template_files": {
|
|
424
|
+
"$ref": "#/$defs/TemplateFiles"
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
"required": [
|
|
428
|
+
"template_files"
|
|
429
|
+
],
|
|
430
|
+
"title": "ImageStepTemplateFiles",
|
|
431
|
+
"type": "object"
|
|
432
|
+
},
|
|
417
433
|
"ImageStepUvPip": {
|
|
418
434
|
"additionalProperties": false,
|
|
419
435
|
"properties": {
|
|
@@ -587,6 +603,31 @@
|
|
|
587
603
|
"title": "SecretRef",
|
|
588
604
|
"type": "object"
|
|
589
605
|
},
|
|
606
|
+
"TemplateFiles": {
|
|
607
|
+
"additionalProperties": false,
|
|
608
|
+
"description": "An official template version's frozen build files - the source at its pinned commit, every Python package and\nsystem package its image installs, the assets it downloads - which the platform keeps itself, so a build never\nreaches the sites they came from (`seq.Image.template_files`). Each run_commands step after this one reads them,\nread-only, at FROZEN_PATH; nothing of them stays in the image unless a step copies or installs it.",
|
|
609
|
+
"properties": {
|
|
610
|
+
"template": {
|
|
611
|
+
"description": "the template's name, as seq init takes it",
|
|
612
|
+
"pattern": "^[a-z0-9][a-z0-9-]{0,63}$",
|
|
613
|
+
"title": "Template",
|
|
614
|
+
"type": "string"
|
|
615
|
+
},
|
|
616
|
+
"version": {
|
|
617
|
+
"description": "the template version whose files these are",
|
|
618
|
+
"maximum": 999999999,
|
|
619
|
+
"minimum": 1,
|
|
620
|
+
"title": "Version",
|
|
621
|
+
"type": "integer"
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
"required": [
|
|
625
|
+
"template",
|
|
626
|
+
"version"
|
|
627
|
+
],
|
|
628
|
+
"title": "TemplateFiles",
|
|
629
|
+
"type": "object"
|
|
630
|
+
},
|
|
590
631
|
"Variant": {
|
|
591
632
|
"additionalProperties": false,
|
|
592
633
|
"description": "One structured variant axis of the eval matrix (e.g. axis=\"lighting\", values=[\"day\",\"night\"]).",
|
|
@@ -865,5 +906,5 @@
|
|
|
865
906
|
],
|
|
866
907
|
"title": "BenchmarkRegisterRequest",
|
|
867
908
|
"type": "object",
|
|
868
|
-
"x-contract-version": "0.5.
|
|
909
|
+
"x-contract-version": "0.5.3"
|
|
869
910
|
}
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
"ImageSpec": {
|
|
63
63
|
"additionalProperties": false,
|
|
64
|
-
"description": "Declarative image, built by the platform. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string, so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the
|
|
64
|
+
"description": "Declarative image, built by the platform. Exactly one of\n`base` (a pullable registry ref) or `dockerfile` (inline Dockerfile source) is set — the Dockerfile\nis its OWN component, never smuggled into the `base` string, so the gateway can tell a\nregistry build from a Dockerfile build. `steps` is an ordered list of the step variants above\n(a bare list[dict] is refused), extending whichever base was chosen.",
|
|
65
65
|
"properties": {
|
|
66
66
|
"base": {
|
|
67
67
|
"anyOf": [
|
|
@@ -117,6 +117,9 @@
|
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"$ref": "#/$defs/ImageStepAddLocal"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"$ref": "#/$defs/ImageStepTemplateFiles"
|
|
120
123
|
}
|
|
121
124
|
]
|
|
122
125
|
},
|
|
@@ -206,6 +209,19 @@
|
|
|
206
209
|
"title": "ImageStepRun",
|
|
207
210
|
"type": "object"
|
|
208
211
|
},
|
|
212
|
+
"ImageStepTemplateFiles": {
|
|
213
|
+
"additionalProperties": false,
|
|
214
|
+
"properties": {
|
|
215
|
+
"template_files": {
|
|
216
|
+
"$ref": "#/$defs/TemplateFiles"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"required": [
|
|
220
|
+
"template_files"
|
|
221
|
+
],
|
|
222
|
+
"title": "ImageStepTemplateFiles",
|
|
223
|
+
"type": "object"
|
|
224
|
+
},
|
|
209
225
|
"ImageStepUvPip": {
|
|
210
226
|
"additionalProperties": false,
|
|
211
227
|
"properties": {
|
|
@@ -297,7 +313,7 @@
|
|
|
297
313
|
],
|
|
298
314
|
"title": "SeqFlags",
|
|
299
315
|
"type": "integer",
|
|
300
|
-
"x-contract-version": "0.5.
|
|
316
|
+
"x-contract-version": "0.5.3",
|
|
301
317
|
"x-flag-names": {
|
|
302
318
|
"CHECK": 65536,
|
|
303
319
|
"INFER": 16,
|
|
@@ -314,6 +330,31 @@
|
|
|
314
330
|
"WARMUP": 1
|
|
315
331
|
}
|
|
316
332
|
},
|
|
333
|
+
"TemplateFiles": {
|
|
334
|
+
"additionalProperties": false,
|
|
335
|
+
"description": "An official template version's frozen build files - the source at its pinned commit, every Python package and\nsystem package its image installs, the assets it downloads - which the platform keeps itself, so a build never\nreaches the sites they came from (`seq.Image.template_files`). Each run_commands step after this one reads them,\nread-only, at FROZEN_PATH; nothing of them stays in the image unless a step copies or installs it.",
|
|
336
|
+
"properties": {
|
|
337
|
+
"template": {
|
|
338
|
+
"description": "the template's name, as seq init takes it",
|
|
339
|
+
"pattern": "^[a-z0-9][a-z0-9-]{0,63}$",
|
|
340
|
+
"title": "Template",
|
|
341
|
+
"type": "string"
|
|
342
|
+
},
|
|
343
|
+
"version": {
|
|
344
|
+
"description": "the template version whose files these are",
|
|
345
|
+
"maximum": 999999999,
|
|
346
|
+
"minimum": 1,
|
|
347
|
+
"title": "Version",
|
|
348
|
+
"type": "integer"
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
"required": [
|
|
352
|
+
"template",
|
|
353
|
+
"version"
|
|
354
|
+
],
|
|
355
|
+
"title": "TemplateFiles",
|
|
356
|
+
"type": "object"
|
|
357
|
+
},
|
|
317
358
|
"Variant": {
|
|
318
359
|
"additionalProperties": false,
|
|
319
360
|
"description": "One structured variant axis of the eval matrix (e.g. axis=\"lighting\", values=[\"day\",\"night\"]).",
|
|
@@ -518,5 +559,5 @@
|
|
|
518
559
|
],
|
|
519
560
|
"title": "BenchmarkSpec",
|
|
520
561
|
"type": "object",
|
|
521
|
-
"x-contract-version": "0.5.
|
|
562
|
+
"x-contract-version": "0.5.3"
|
|
522
563
|
}
|