sequence-base 0.3.29__tar.gz → 0.4.1__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.
Files changed (106) hide show
  1. {sequence_base-0.3.29 → sequence_base-0.4.1}/PKG-INFO +1 -1
  2. {sequence_base-0.3.29 → sequence_base-0.4.1}/README.md +4 -5
  3. {sequence_base-0.3.29 → sequence_base-0.4.1}/pyproject.toml +1 -1
  4. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/__init__.py +1 -2
  5. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/constants/version.py +3 -1
  6. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/__init__.py +1 -2
  7. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/accounts.py +1 -16
  8. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/connect.py +0 -2
  9. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/deployments.py +13 -20
  10. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/errors.py +0 -10
  11. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/flags.py +0 -3
  12. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/policy.py +11 -5
  13. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/errors/transport.py +2 -4
  14. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/obs/rid.py +0 -4
  15. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schema_export.py +0 -2
  16. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ActRequest.json +1 -1
  17. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ActResponse.json +1 -1
  18. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ActionChunk.json +1 -1
  19. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ActionContract.json +1 -1
  20. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ActionStep.json +1 -1
  21. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/AdapterTransform.json +1 -1
  22. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/AddLocal.json +1 -1
  23. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Autoscaler.json +1 -1
  24. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  25. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/BenchmarkRegisterRequest.json +1 -1
  26. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  27. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  28. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/BootstrapResponse.json +1 -1
  29. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Camera.json +1 -1
  30. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ClampInfo.json +1 -1
  31. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/CodeBundle.json +1 -1
  32. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Concurrency.json +1 -1
  33. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Conditions.json +1 -1
  34. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ConnectRequest.json +1 -1
  35. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ConnectResponse.json +1 -20
  36. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  37. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/DeploymentPolicy.json +1 -1
  38. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/DeploymentRequest.json +5 -1
  39. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  40. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Embodiment.json +1 -1
  41. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ErrorBody.json +1 -1
  42. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ErrorCodes.json +1 -1
  43. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Estimate.json +1 -1
  44. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  45. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/EvalReport.json +1 -1
  46. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/EvalRequest.json +1 -1
  47. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/EvalResponse.json +1 -1
  48. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageFrame.json +1 -1
  49. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageSpec.json +1 -1
  50. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  51. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageStepApt.json +1 -1
  52. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageStepEnv.json +1 -1
  53. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageStepRun.json +1 -1
  54. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  55. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/InferParam.json +1 -1
  56. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Lease.json +1 -1
  57. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/LossyTransform.json +1 -1
  58. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/MetricAgg.json +1 -1
  59. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Observation.json +1 -1
  60. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/ObservationContract.json +1 -1
  61. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/PolicyRegistration.json +2 -2
  62. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/PolicySpec.json +1 -1
  63. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Proprioception.json +1 -1
  64. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/RenderSpec.json +1 -1
  65. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Resources.json +1 -1
  66. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/RolloutResult.json +1 -1
  67. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  68. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/SecretInfo.json +1 -1
  69. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/SecretRef.json +1 -1
  70. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/SeqFlags.json +1 -1
  71. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Step.json +1 -1
  72. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/SuiteAgg.json +1 -1
  73. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/TaskAgg.json +1 -1
  74. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Timeouts.json +5 -1
  75. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/UploadTarget.json +1 -1
  76. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/Variant.json +1 -1
  77. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeAttach.json +1 -1
  78. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeFile.json +1 -1
  79. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeInfo.json +1 -1
  80. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeMount.json +1 -1
  81. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeRef.json +1 -1
  82. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  83. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  84. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/schemas/WarmingError.json +1 -1
  85. sequence_base-0.3.29/sequence_base/constants/env.py +0 -7
  86. sequence_base-0.3.29/sequence_base/schemas/UsageReport.json +0 -38
  87. {sequence_base-0.3.29 → sequence_base-0.4.1}/.gitignore +0 -0
  88. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/auth.py +0 -0
  89. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/codec/__init__.py +0 -0
  90. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/codec/image.py +0 -0
  91. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/constants/__init__.py +0 -0
  92. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/constants/headers.py +0 -0
  93. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/act.py +0 -0
  94. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/benchmarks.py +0 -0
  95. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/eval.py +0 -0
  96. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/io.py +0 -0
  97. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/templates.py +0 -0
  98. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/volumes.py +0 -0
  99. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/contract/wire.py +0 -0
  100. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/errors/__init__.py +0 -0
  101. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/obs/__init__.py +0 -0
  102. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/obs/log.py +0 -0
  103. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/presets/__init__.py +0 -0
  104. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/presets/robot_arm.py +0 -0
  105. {sequence_base-0.3.29 → sequence_base-0.4.1}/sequence_base/telemetry/__init__.py +0 -0
  106. {sequence_base-0.3.29 → sequence_base-0.4.1}/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.29
3
+ Version: 0.4.1
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
@@ -14,13 +14,12 @@ from sequence_base import TransportWarming, TransportOverloaded # error taxonom
14
14
  ```
15
15
  sequence_base/
16
16
  contract/ act.py — Observation / ActionChunk / ImageFrame / Proprioception / ActionSpace / ActionStep
17
- (grows: chat.py, perceive.py) · sdk + gateway + container
17
+ · sdk + gateway + container
18
18
  obs/ rid.py (HEADER, new_rid, clean) · log.py (log, Timer) · sdk + gateway + container
19
19
  errors/ transport.py (Warming / Rejected / Overloaded / Unavailable) · gateway + container
20
- (grows: client.py)
21
- constants/ headers.py · env.py · version.py · all three
22
- codec/ [P1] image.py (encode/decode) · resize.py — sdk encodes, container decodes; MUST match
23
- telemetry/ [P1] events.py — container→gateway event shapes
20
+ constants/ headers.py · version.py · all three
21
+ codec/ [P1] image.py (encode/decode) — sdk encodes, container decodes; MUST match
22
+ telemetry/ [P1] events.py — the cold-start Stage vocabulary a worker logs
24
23
  ```
25
24
 
26
25
  ## The one rule for what goes in here
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.3.29"
3
+ version = "0.4.1"
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"]
@@ -89,7 +89,6 @@ from sequence_base.contract import (
89
89
  SuiteAgg,
90
90
  TaskAgg,
91
91
  Timeouts,
92
- UsageReport,
93
92
  Variant,
94
93
  VolumeAttach,
95
94
  VolumeMount,
@@ -142,7 +141,7 @@ __all__ = [
142
141
  "EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
143
142
  "AdapterKind", "AdapterTransform",
144
143
 
145
- "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse", "UsageReport",
144
+ "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
146
145
 
147
146
  "VolumeFile", "VolumeUploadRequest", "UploadTarget", "VolumeUploadResponse", "VolumeInfo", "parse_vol",
148
147
 
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.4.25"
7
+ CONTRACT_VERSION = "0.5.1"
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -90,7 +90,6 @@ from sequence_base.contract.accounts import (
90
90
  SecretCreateRequest,
91
91
  SecretInfo,
92
92
  SecretRef,
93
- UsageReport,
94
93
  )
95
94
 
96
95
 
@@ -134,7 +133,7 @@ __all__ = [
134
133
  "EvalStatus", "SuiteAgg", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
135
134
  "AdapterKind", "AdapterTransform",
136
135
 
137
- "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse", "UsageReport",
136
+ "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
138
137
 
139
138
  "MAX_FILES", "MAX_UPLOAD_BYTES", "VolumeFile", "VolumeUploadRequest", "UploadTarget", "VolumeUploadResponse",
140
139
  "VolumeInfo", "check_volume_name", "parse_vol",
@@ -7,8 +7,7 @@ Secret-leak rule, mechanically checkable (goal 15). Two kinds of secret:
7
7
  (b) user Secret-Manager values. May appear in the WRITE direction only:
8
8
  SecretCreateRequest.env, BootstrapResponse.env (injected into the worker subprocess).
9
9
  These four fields are the entire allow-list for carrying a plaintext secret value. Everything returned
10
- to a client, reported asynchronously, or written to a report/log (SecretRef, SecretInfo, UsageReport,
11
- eval report, /act response) exposes only names / env_keys — never a value-bearing field.
10
+ to a client or written to a report/log (SecretRef, SecretInfo, eval report, /act response) exposes only names / env_keys — never a value-bearing field.
12
11
  """
13
12
  from __future__ import annotations
14
13
 
@@ -23,7 +22,6 @@ __all__ = [
23
22
  "SecretCreateRequest",
24
23
  "SecretInfo",
25
24
  "BootstrapResponse",
26
- "UsageReport",
27
25
  ]
28
26
 
29
27
 
@@ -78,16 +76,3 @@ class BootstrapResponse(BaseModel):
78
76
 
79
77
  weights_uri: str | None = None
80
78
  lease: Lease
81
-
82
-
83
- class UsageReport(BaseModel):
84
- """A worker's metering report, sent as it serves. Carries counts only, no secrets.
85
- This usage shape is defined here (sequence-base) once, so gateway and worker cannot drift."""
86
-
87
- model_config = ConfigDict(extra="forbid")
88
-
89
- deployment_id: str
90
- window_start: datetime
91
- window_end: datetime
92
- requests: int
93
- controlled_seconds: float
@@ -51,8 +51,6 @@ class ConnectResponse(BaseModel):
51
51
  cert_fingerprint: str = Field(..., description="Self-signed cert fingerprint the SDK pins")
52
52
  direct_secret: str = Field(..., description="Bearer for the worker /act; valid within the lease")
53
53
  lease: Lease
54
- warming: bool = Field(default=False, description="True → worker still warming; see warming_eta_s")
55
- warming_eta_s: int | None = Field(default=None, description="Seconds until warm, when warming")
56
54
 
57
55
  action: ActionContract | None = None
58
56
  observation: ObservationContract | None = None
@@ -21,8 +21,6 @@ from typing import Literal
21
21
  from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
22
22
 
23
23
  from sequence_base.contract.accounts import SecretRef
24
- from sequence_base.contract.templates import TEMPLATE_SCHEME, parse_template
25
- from sequence_base.contract.volumes import VOL_SCHEME, parse_vol
26
24
  from sequence_base.contract.io import Embodiment, ObservationContract
27
25
  from sequence_base.contract.policy import (
28
26
  KIND_NAME,
@@ -95,8 +93,14 @@ class Autoscaler(BaseModel):
95
93
  class Timeouts(BaseModel):
96
94
  model_config = ConfigDict(extra="forbid")
97
95
 
98
- request: int
99
- startup: int
96
+
97
+
98
+
99
+ request: int = Field(..., ge=1, le=3600)
100
+
101
+
102
+
103
+ startup: int = Field(..., ge=60, le=18000)
100
104
 
101
105
 
102
106
  class VolumeAttach(BaseModel):
@@ -304,9 +308,10 @@ class DeploymentRequest(BaseModel):
304
308
 
305
309
  @model_validator(mode="after")
306
310
  def _weights_have_an_origin(self) -> "DeploymentRequest":
307
- """The checkpoint the build provisions: an official template://, an hf:// repo or an uploaded vol:// volume —
308
- and, until they are removed, a gs:// or s3:// prefix or an https:// file — never empty. PolicySpec already enforces this for SDK-authored deploys; this holds it for any POSTed body."""
309
- from sequence_base.contract.policy import check_weights_parts
311
+ """The checkpoint the build provisions, when there is one: an official template://, an hf:// repo or an
312
+ uploaded vol:// volume, never empty. PolicySpec already enforces this for SDK-authored deploys; this holds it
313
+ for any POSTed body."""
314
+ from sequence_base.contract.policy import check_weights_parts, check_weights_uri
310
315
 
311
316
  if self.weights is None:
312
317
  if self.weights_name or self.extra_weights:
@@ -315,25 +320,13 @@ class DeploymentRequest(BaseModel):
315
320
  check_weights_parts(self.weights_name, dict(self.extra_weights or {}))
316
321
  for what, ref in [("weights.uri", self.weights)] + [(f"extra_weights[{n!r}].uri", r)
317
322
  for n, r in (self.extra_weights or {}).items()]:
318
- uri = ref.uri.strip()
319
- if uri.startswith(TEMPLATE_SCHEME):
320
- parse_template(uri)
321
- continue
322
- if uri.startswith(VOL_SCHEME):
323
- parse_vol(uri)
324
- continue
325
- if not any(uri.startswith(s) and len(uri) > len(s) for s in _WEIGHTS_SCHEMES):
326
- raise ValueError(f"{what} must be a template://<name> official template, an hf://org/model repo or "
327
- "a vol://<name> volume (gs://, s3:// and https:// are still accepted until they "
328
- "are removed)")
323
+ check_weights_uri(ref.uri.strip(), what)
329
324
  return self
330
325
 
331
326
 
332
327
 
333
328
  _NAME = re.compile(r"[A-Za-z0-9][A-Za-z0-9._-]{0,63}")
334
329
 
335
- _WEIGHTS_SCHEMES = ("gs://", "hf://", "s3://", "https://")
336
-
337
330
 
338
331
  class DeploymentAccepted(BaseModel):
339
332
  """202 — the build is async; the id comes back first, status pinned to `building`."""
@@ -111,16 +111,6 @@ class ErrorBody(BaseModel):
111
111
 
112
112
  if not isinstance(data, dict):
113
113
  return data
114
-
115
-
116
-
117
- if "message" in data and "detail" not in data:
118
- data = {k: v for k, v in data.items() if k != "message"} | {"detail": data["message"]}
119
- if "eta_s" in data:
120
- eta = data["eta_s"]
121
- data = {k: v for k, v in data.items() if k != "eta_s"}
122
- if eta is not None:
123
- data["details"] = {**data.get("details", {}), "eta_s": eta}
124
114
  code = data.get("code")
125
115
  if code is None:
126
116
  default = cls.model_fields["code"].default
@@ -61,9 +61,6 @@ BENCHMARK_BINDABLE: frozenset[SeqFlags] = frozenset(
61
61
  BENCHMARK_BATCHED: frozenset[SeqFlags] = frozenset({SeqFlags.OBSERVE, SeqFlags.STEP})
62
62
 
63
63
 
64
- DEPRECATED_FLAGS: frozenset[SeqFlags] = frozenset({SeqFlags.ROLLOUT})
65
-
66
-
67
64
  def seqflags_json_schema(contract_version: str) -> dict:
68
65
  """`SeqFlags` is an IntFlag, so `model_json_schema()` does not apply. Export it as an integer whose
69
66
  named members are enumerated, with `x-flag-names` giving name→value for every member (WARMUP, PLAN and
@@ -251,7 +251,8 @@ MAX_WEIGHTS_PARTS = 8
251
251
 
252
252
  def check_weights_uri(v: str, what: str = "weights") -> str:
253
253
  """A weights origin the build can provision: an official template://, an hf:// repo or an uploaded vol://
254
- volume — and, until they are removed, a gs:// or s3:// prefix or an https:// file."""
254
+ volume. gs://, s3:// and https:// were removed in contract 0.5.0, after a release that warned for 7 days: files
255
+ from a bucket or a URL are uploaded once as a volume."""
255
256
 
256
257
  if v.startswith("template://"):
257
258
  from sequence_base.contract.templates import parse_template
@@ -262,12 +263,17 @@ def check_weights_uri(v: str, what: str = "weights") -> str:
262
263
  from sequence_base.contract.volumes import parse_vol
263
264
  parse_vol(v)
264
265
  return v
266
+ if v.startswith("hf://") and len(v) > len("hf://"):
267
+ return v
268
+ if v.startswith(LEGACY_WEIGHTS_SCHEMES):
269
+
270
+ raise ValueError(f"{what}: weights from your own storage bucket or an https URL are no longer supported; upload "
271
+ "the files once as a volume (seq volume put <name> <dir>) and use vol://<name>, or an hf:// repo")
272
+ raise ValueError(f"{what} must be a template:// official template, an hf:// repo or a vol:// volume")
273
+
265
274
 
266
275
 
267
- if not v.startswith(("gs://", "hf://", "s3://", "https://")):
268
- raise ValueError(f"{what} must be a template:// official template, an hf:// repo or a vol:// volume "
269
- "(gs://, s3:// and https:// are still accepted until they are removed)")
270
- return v
276
+ LEGACY_WEIGHTS_SCHEMES = ("gs://", "s3://", "https://", "http://")
271
277
 
272
278
 
273
279
  def check_weights_parts(weights_name: str | None, extra: dict) -> None:
@@ -12,13 +12,11 @@ class TransportUnavailable(RuntimeError):
12
12
 
13
13
  class TransportWarming(RuntimeError):
14
14
  """Model loading, not ready yet → 503 + Retry-After. Distinct from Unavailable: it WILL succeed
15
- shortly and the only useful action is to wait `eta_s`. `job_id` (if set) is the warming job, left
16
- running so the retry lands on a hot worker."""
15
+ shortly and the only useful action is to wait `eta_s`."""
17
16
 
18
- def __init__(self, message: str, eta_s: float, job_id: str | None = None) -> None:
17
+ def __init__(self, message: str, eta_s: float) -> None:
19
18
  super().__init__(message)
20
19
  self.eta_s = eta_s
21
- self.job_id = job_id
22
20
 
23
21
 
24
22
  class TransportRejected(RuntimeError):
@@ -25,7 +25,3 @@ def clean(v: object) -> str:
25
25
  let anything user-supplied forge keys into the line; 200 chars keeps a real error readable."""
26
26
  s = _UNSAFE.sub("_", str(v))
27
27
  return s if len(s) <= 200 else s[:197] + "..."
28
-
29
-
30
-
31
- _clean = clean
@@ -25,7 +25,6 @@ from sequence_base.contract.accounts import (
25
25
  SecretCreateRequest,
26
26
  SecretInfo,
27
27
  SecretRef,
28
- UsageReport,
29
28
  )
30
29
  from sequence_base.contract.act import (
31
30
  ActionChunk,
@@ -173,7 +172,6 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
173
172
  "SecretCreateRequest": SecretCreateRequest,
174
173
  "SecretInfo": SecretInfo,
175
174
  "BootstrapResponse": BootstrapResponse,
176
- "UsageReport": UsageReport,
177
175
 
178
176
  "VolumeFile": VolumeFile,
179
177
  "VolumeUploadRequest": VolumeUploadRequest,
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "ActRequest",
67
67
  "type": "object",
68
- "x-contract-version": "0.4.25"
68
+ "x-contract-version": "0.5.1"
69
69
  }
@@ -75,5 +75,5 @@
75
75
  ],
76
76
  "title": "ActResponse",
77
77
  "type": "object",
78
- "x-contract-version": "0.4.25"
78
+ "x-contract-version": "0.5.1"
79
79
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.4.25"
102
+ "x-contract-version": "0.5.1"
103
103
  }
@@ -100,5 +100,5 @@
100
100
  ],
101
101
  "title": "ActionContract",
102
102
  "type": "object",
103
- "x-contract-version": "0.4.25"
103
+ "x-contract-version": "0.5.1"
104
104
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.25"
22
+ "x-contract-version": "0.5.1"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.25"
41
+ "x-contract-version": "0.5.1"
42
42
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.25"
26
+ "x-contract-version": "0.5.1"
27
27
  }
@@ -69,5 +69,5 @@
69
69
  },
70
70
  "title": "Autoscaler",
71
71
  "type": "object",
72
- "x-contract-version": "0.4.25"
72
+ "x-contract-version": "0.5.1"
73
73
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.25"
65
+ "x-contract-version": "0.5.1"
66
66
  }
@@ -849,5 +849,5 @@
849
849
  ],
850
850
  "title": "BenchmarkRegisterRequest",
851
851
  "type": "object",
852
- "x-contract-version": "0.4.25"
852
+ "x-contract-version": "0.5.1"
853
853
  }
@@ -297,7 +297,7 @@
297
297
  ],
298
298
  "title": "SeqFlags",
299
299
  "type": "integer",
300
- "x-contract-version": "0.4.25",
300
+ "x-contract-version": "0.5.1",
301
301
  "x-flag-names": {
302
302
  "CHECK": 65536,
303
303
  "INFER": 16,
@@ -518,5 +518,5 @@
518
518
  ],
519
519
  "title": "BenchmarkSpec",
520
520
  "type": "object",
521
- "x-contract-version": "0.4.25"
521
+ "x-contract-version": "0.5.1"
522
522
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.25"
43
+ "x-contract-version": "0.5.1"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.4.25"
82
+ "x-contract-version": "0.5.1"
83
83
  }
@@ -34,5 +34,5 @@
34
34
  ],
35
35
  "title": "Camera",
36
36
  "type": "object",
37
- "x-contract-version": "0.4.25"
37
+ "x-contract-version": "0.5.1"
38
38
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.25"
26
+ "x-contract-version": "0.5.1"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.25"
26
+ "x-contract-version": "0.5.1"
27
27
  }
@@ -77,5 +77,5 @@
77
77
  },
78
78
  "title": "Concurrency",
79
79
  "type": "object",
80
- "x-contract-version": "0.4.25"
80
+ "x-contract-version": "0.5.1"
81
81
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.25"
58
+ "x-contract-version": "0.5.1"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.25"
28
+ "x-contract-version": "0.5.1"
29
29
  }
@@ -274,25 +274,6 @@
274
274
  ],
275
275
  "default": null
276
276
  },
277
- "warming": {
278
- "default": false,
279
- "description": "True → worker still warming; see warming_eta_s",
280
- "title": "Warming",
281
- "type": "boolean"
282
- },
283
- "warming_eta_s": {
284
- "anyOf": [
285
- {
286
- "type": "integer"
287
- },
288
- {
289
- "type": "null"
290
- }
291
- ],
292
- "default": null,
293
- "description": "Seconds until warm, when warming",
294
- "title": "Warming Eta S"
295
- },
296
277
  "worker_url": {
297
278
  "description": "Worker static-IP direct URL, e.g. https://<ip>:8080",
298
279
  "title": "Worker Url",
@@ -307,5 +288,5 @@
307
288
  ],
308
289
  "title": "ConnectResponse",
309
290
  "type": "object",
310
- "x-contract-version": "0.4.25"
291
+ "x-contract-version": "0.5.1"
311
292
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.25"
21
+ "x-contract-version": "0.5.1"
22
22
  }
@@ -476,5 +476,5 @@
476
476
  ],
477
477
  "title": "DeploymentPolicy",
478
478
  "type": "object",
479
- "x-contract-version": "0.4.25"
479
+ "x-contract-version": "0.5.1"
480
480
  }
@@ -936,10 +936,14 @@
936
936
  "additionalProperties": false,
937
937
  "properties": {
938
938
  "request": {
939
+ "maximum": 3600,
940
+ "minimum": 1,
939
941
  "title": "Request",
940
942
  "type": "integer"
941
943
  },
942
944
  "startup": {
945
+ "maximum": 18000,
946
+ "minimum": 60,
943
947
  "title": "Startup",
944
948
  "type": "integer"
945
949
  }
@@ -1106,5 +1110,5 @@
1106
1110
  ],
1107
1111
  "title": "DeploymentRequest",
1108
1112
  "type": "object",
1109
- "x-contract-version": "0.4.25"
1113
+ "x-contract-version": "0.5.1"
1110
1114
  }
@@ -58,5 +58,5 @@
58
58
  ],
59
59
  "title": "DeploymentStatusResponse",
60
60
  "type": "object",
61
- "x-contract-version": "0.4.25"
61
+ "x-contract-version": "0.5.1"
62
62
  }
@@ -213,5 +213,5 @@
213
213
  ],
214
214
  "title": "Embodiment",
215
215
  "type": "object",
216
- "x-contract-version": "0.4.25"
216
+ "x-contract-version": "0.5.1"
217
217
  }
@@ -94,5 +94,5 @@
94
94
  ],
95
95
  "title": "ErrorBody",
96
96
  "type": "object",
97
- "x-contract-version": "0.4.25"
97
+ "x-contract-version": "0.5.1"
98
98
  }
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "title": "ErrorCode",
24
24
  "type": "string",
25
- "x-contract-version": "0.4.25",
25
+ "x-contract-version": "0.5.1",
26
26
  "x-errors": {
27
27
  "budget_exhausted": {
28
28
  "exit_code": 6,
@@ -60,5 +60,5 @@
60
60
  ],
61
61
  "title": "Estimate",
62
62
  "type": "object",
63
- "x-contract-version": "0.4.25"
63
+ "x-contract-version": "0.5.1"
64
64
  }
@@ -240,5 +240,5 @@
240
240
  ],
241
241
  "title": "EvalDryRunResponse",
242
242
  "type": "object",
243
- "x-contract-version": "0.4.25"
243
+ "x-contract-version": "0.5.1"
244
244
  }
@@ -523,5 +523,5 @@
523
523
  ],
524
524
  "title": "EvalReport",
525
525
  "type": "object",
526
- "x-contract-version": "0.4.25"
526
+ "x-contract-version": "0.5.1"
527
527
  }
@@ -281,5 +281,5 @@
281
281
  ],
282
282
  "title": "EvalRequest",
283
283
  "type": "object",
284
- "x-contract-version": "0.4.25"
284
+ "x-contract-version": "0.5.1"
285
285
  }
@@ -190,5 +190,5 @@
190
190
  ],
191
191
  "title": "EvalResponse",
192
192
  "type": "object",
193
- "x-contract-version": "0.4.25"
193
+ "x-contract-version": "0.5.1"
194
194
  }
@@ -49,5 +49,5 @@
49
49
  ],
50
50
  "title": "ImageFrame",
51
51
  "type": "object",
52
- "x-contract-version": "0.4.25"
52
+ "x-contract-version": "0.5.1"
53
53
  }
@@ -204,5 +204,5 @@
204
204
  },
205
205
  "title": "ImageSpec",
206
206
  "type": "object",
207
- "x-contract-version": "0.4.25"
207
+ "x-contract-version": "0.5.1"
208
208
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "ImageStepAddLocal",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.25"
41
+ "x-contract-version": "0.5.1"
42
42
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.25"
17
+ "x-contract-version": "0.5.1"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.25"
17
+ "x-contract-version": "0.5.1"
18
18
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "ImageStepRun",
48
48
  "type": "object",
49
- "x-contract-version": "0.4.25"
49
+ "x-contract-version": "0.5.1"
50
50
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.25"
17
+ "x-contract-version": "0.5.1"
18
18
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "InferParam",
101
101
  "type": "object",
102
- "x-contract-version": "0.4.25"
102
+ "x-contract-version": "0.5.1"
103
103
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "Lease",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.25"
27
+ "x-contract-version": "0.5.1"
28
28
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "LossyTransform",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.25"
20
+ "x-contract-version": "0.5.1"
21
21
  }
@@ -83,5 +83,5 @@
83
83
  ],
84
84
  "title": "MetricAgg",
85
85
  "type": "object",
86
- "x-contract-version": "0.4.25"
86
+ "x-contract-version": "0.5.1"
87
87
  }
@@ -164,5 +164,5 @@
164
164
  ],
165
165
  "title": "Observation",
166
166
  "type": "object",
167
- "x-contract-version": "0.4.25"
167
+ "x-contract-version": "0.5.1"
168
168
  }
@@ -82,5 +82,5 @@
82
82
  },
83
83
  "title": "ObservationContract",
84
84
  "type": "object",
85
- "x-contract-version": "0.4.25"
85
+ "x-contract-version": "0.5.1"
86
86
  }
@@ -763,7 +763,7 @@
763
763
  ],
764
764
  "title": "SeqFlags",
765
765
  "type": "integer",
766
- "x-contract-version": "0.4.25",
766
+ "x-contract-version": "0.5.1",
767
767
  "x-flag-names": {
768
768
  "CHECK": 65536,
769
769
  "INFER": 16,
@@ -867,5 +867,5 @@
867
867
  ],
868
868
  "title": "PolicyRegistration",
869
869
  "type": "object",
870
- "x-contract-version": "0.4.25"
870
+ "x-contract-version": "0.5.1"
871
871
  }
@@ -769,5 +769,5 @@
769
769
  ],
770
770
  "title": "PolicySpec",
771
771
  "type": "object",
772
- "x-contract-version": "0.4.25"
772
+ "x-contract-version": "0.5.1"
773
773
  }
@@ -63,5 +63,5 @@
63
63
  ],
64
64
  "title": "Proprioception",
65
65
  "type": "object",
66
- "x-contract-version": "0.4.25"
66
+ "x-contract-version": "0.5.1"
67
67
  }
@@ -36,5 +36,5 @@
36
36
  ],
37
37
  "title": "RenderSpec",
38
38
  "type": "object",
39
- "x-contract-version": "0.4.25"
39
+ "x-contract-version": "0.5.1"
40
40
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "Resources",
86
86
  "type": "object",
87
- "x-contract-version": "0.4.25"
87
+ "x-contract-version": "0.5.1"
88
88
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "RolloutResult",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.25"
58
+ "x-contract-version": "0.5.1"
59
59
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "SecretCreateRequest",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.25"
24
+ "x-contract-version": "0.5.1"
25
25
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "SecretInfo",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.25"
43
+ "x-contract-version": "0.5.1"
44
44
  }
@@ -12,5 +12,5 @@
12
12
  ],
13
13
  "title": "SecretRef",
14
14
  "type": "object",
15
- "x-contract-version": "0.4.25"
15
+ "x-contract-version": "0.5.1"
16
16
  }
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "title": "SeqFlags",
20
20
  "type": "integer",
21
- "x-contract-version": "0.4.25",
21
+ "x-contract-version": "0.5.1",
22
22
  "x-flag-names": {
23
23
  "CHECK": 65536,
24
24
  "INFER": 16,
@@ -82,5 +82,5 @@
82
82
  ],
83
83
  "title": "Step",
84
84
  "type": "object",
85
- "x-contract-version": "0.4.25"
85
+ "x-contract-version": "0.5.1"
86
86
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "SuiteAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.25"
25
+ "x-contract-version": "0.5.1"
26
26
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TaskAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.25"
25
+ "x-contract-version": "0.5.1"
26
26
  }
@@ -2,10 +2,14 @@
2
2
  "additionalProperties": false,
3
3
  "properties": {
4
4
  "request": {
5
+ "maximum": 3600,
6
+ "minimum": 1,
5
7
  "title": "Request",
6
8
  "type": "integer"
7
9
  },
8
10
  "startup": {
11
+ "maximum": 18000,
12
+ "minimum": 60,
9
13
  "title": "Startup",
10
14
  "type": "integer"
11
15
  }
@@ -16,5 +20,5 @@
16
20
  ],
17
21
  "title": "Timeouts",
18
22
  "type": "object",
19
- "x-contract-version": "0.4.25"
23
+ "x-contract-version": "0.5.1"
20
24
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "UploadTarget",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.25"
27
+ "x-contract-version": "0.5.1"
28
28
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Variant",
22
22
  "type": "object",
23
- "x-contract-version": "0.4.25"
23
+ "x-contract-version": "0.5.1"
24
24
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "VolumeAttach",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.25"
25
+ "x-contract-version": "0.5.1"
26
26
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "VolumeFile",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.25"
28
+ "x-contract-version": "0.5.1"
29
29
  }
@@ -68,5 +68,5 @@
68
68
  ],
69
69
  "title": "VolumeInfo",
70
70
  "type": "object",
71
- "x-contract-version": "0.4.25"
71
+ "x-contract-version": "0.5.1"
72
72
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "VolumeMount",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.25"
20
+ "x-contract-version": "0.5.1"
21
21
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "VolumeRef",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.25"
27
+ "x-contract-version": "0.5.1"
28
28
  }
@@ -56,5 +56,5 @@
56
56
  ],
57
57
  "title": "VolumeUploadRequest",
58
58
  "type": "object",
59
- "x-contract-version": "0.4.25"
59
+ "x-contract-version": "0.5.1"
60
60
  }
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "VolumeUploadResponse",
67
67
  "type": "object",
68
- "x-contract-version": "0.4.25"
68
+ "x-contract-version": "0.5.1"
69
69
  }
@@ -86,5 +86,5 @@
86
86
  ],
87
87
  "title": "WarmingError",
88
88
  "type": "object",
89
- "x-contract-version": "0.4.25"
89
+ "x-contract-version": "0.5.1"
90
90
  }
@@ -1,7 +0,0 @@
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,38 +0,0 @@
1
- {
2
- "additionalProperties": false,
3
- "description": "A worker's metering report, sent as it serves. Carries counts only, no secrets.\nThis usage shape is defined here (sequence-base) once, so gateway and worker cannot drift.",
4
- "properties": {
5
- "controlled_seconds": {
6
- "title": "Controlled Seconds",
7
- "type": "number"
8
- },
9
- "deployment_id": {
10
- "title": "Deployment Id",
11
- "type": "string"
12
- },
13
- "requests": {
14
- "title": "Requests",
15
- "type": "integer"
16
- },
17
- "window_end": {
18
- "format": "date-time",
19
- "title": "Window End",
20
- "type": "string"
21
- },
22
- "window_start": {
23
- "format": "date-time",
24
- "title": "Window Start",
25
- "type": "string"
26
- }
27
- },
28
- "required": [
29
- "deployment_id",
30
- "window_start",
31
- "window_end",
32
- "requests",
33
- "controlled_seconds"
34
- ],
35
- "title": "UsageReport",
36
- "type": "object",
37
- "x-contract-version": "0.4.25"
38
- }
File without changes