sequence-base 0.3.9__tar.gz → 0.3.10__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 (163) hide show
  1. {sequence_base-0.3.9 → sequence_base-0.3.10}/PKG-INFO +1 -1
  2. {sequence_base-0.3.9 → sequence_base-0.3.10}/pyproject.toml +1 -1
  3. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/constants/version.py +2 -1
  4. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/deployments.py +5 -4
  5. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/policy.py +4 -2
  6. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ActionChunk.json +1 -1
  7. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ActionContract.json +1 -1
  8. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ActionStep.json +1 -1
  9. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/AdapterTransform.json +1 -1
  10. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Autoscaler.json +1 -1
  11. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  12. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/BenchmarkRegisterRequest.json +1 -1
  13. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  14. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  15. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/BootstrapResponse.json +1 -1
  16. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Camera.json +1 -1
  17. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ClampInfo.json +1 -1
  18. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/CodeBundle.json +1 -1
  19. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Concurrency.json +1 -1
  20. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Conditions.json +1 -1
  21. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ConnectRequest.json +1 -1
  22. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ConnectResponse.json +1 -1
  23. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  24. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/DeploymentPolicy.json +1 -1
  25. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/DeploymentRequest.json +1 -1
  26. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  27. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Embodiment.json +1 -1
  28. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ErrorBody.json +1 -1
  29. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Estimate.json +1 -1
  30. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  31. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/EvalReport.json +1 -1
  32. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/EvalRequest.json +1 -1
  33. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/EvalResponse.json +1 -1
  34. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageFrame.json +1 -1
  35. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageSpec.json +1 -1
  36. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageStepApt.json +1 -1
  37. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageStepEnv.json +1 -1
  38. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageStepRun.json +1 -1
  39. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  40. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/InferParam.json +1 -1
  41. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Lease.json +1 -1
  42. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/LossyTransform.json +1 -1
  43. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/MetricAgg.json +1 -1
  44. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Observation.json +1 -1
  45. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/ObservationContract.json +1 -1
  46. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/PolicyRegistration.json +2 -2
  47. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/PolicySpec.json +1 -1
  48. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Proprioception.json +1 -1
  49. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/RenderSpec.json +1 -1
  50. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Resources.json +1 -1
  51. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/RolloutResult.json +1 -1
  52. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  53. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/SecretInfo.json +1 -1
  54. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/SecretRef.json +1 -1
  55. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/SeqFlags.json +1 -1
  56. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Step.json +1 -1
  57. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/SuiteAgg.json +1 -1
  58. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/TaskAgg.json +1 -1
  59. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Timeouts.json +1 -1
  60. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/UploadTarget.json +1 -1
  61. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/UsageReport.json +1 -1
  62. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/Variant.json +1 -1
  63. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeAttach.json +1 -1
  64. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeFile.json +1 -1
  65. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeInfo.json +1 -1
  66. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeMount.json +1 -1
  67. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeRef.json +1 -1
  68. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  69. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  70. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schemas/WarmingError.json +1 -1
  71. {sequence_base-0.3.9 → sequence_base-0.3.10}/tests/test_contracts.py +15 -5
  72. {sequence_base-0.3.9 → sequence_base-0.3.10}/.github/workflows/ci.yml +0 -0
  73. {sequence_base-0.3.9 → sequence_base-0.3.10}/.gitignore +0 -0
  74. {sequence_base-0.3.9 → sequence_base-0.3.10}/README.md +0 -0
  75. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/README.md +0 -0
  76. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/REVIEW.md +0 -0
  77. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/START.md +0 -0
  78. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/accounts.md +0 -0
  79. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/billing.md +0 -0
  80. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/build/BUILD_LOG.md +0 -0
  81. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/build/goal_sha256.json +0 -0
  82. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/build/gs-build-wave.js +0 -0
  83. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/build/gs-spec-goals.js +0 -0
  84. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/container.md +0 -0
  85. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/contracts.md +0 -0
  86. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/deploy/PLAN.md +0 -0
  87. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/deploy/PROD_REORG.md +0 -0
  88. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/deploy/SCHEMA_COMPAT.md +0 -0
  89. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/deploy/archive/sequences-gw.genseq-506918.20261001.yaml +0 -0
  90. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/eval.md +0 -0
  91. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/gateway.md +0 -0
  92. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/A1.yaml +0 -0
  93. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/A2.yaml +0 -0
  94. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/A3.yaml +0 -0
  95. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/C1.yaml +0 -0
  96. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/C2.yaml +0 -0
  97. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/C3.yaml +0 -0
  98. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/C4.yaml +0 -0
  99. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/C5.yaml +0 -0
  100. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/G1.yaml +0 -0
  101. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/G2.yaml +0 -0
  102. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/G3.yaml +0 -0
  103. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/G4.yaml +0 -0
  104. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/G5.yaml +0 -0
  105. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/O1.yaml +0 -0
  106. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/O2.yaml +0 -0
  107. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/O3.yaml +0 -0
  108. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/O4.yaml +0 -0
  109. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/O5.yaml +0 -0
  110. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/R1.yaml +0 -0
  111. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/R2.yaml +0 -0
  112. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/R3.yaml +0 -0
  113. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S1.yaml +0 -0
  114. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S2.yaml +0 -0
  115. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S3.yaml +0 -0
  116. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S4.yaml +0 -0
  117. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S5.yaml +0 -0
  118. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/S6.yaml +0 -0
  119. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/V1-storage.md +0 -0
  120. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/V2-user-quotas.md +0 -0
  121. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/W0.1.yaml +0 -0
  122. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/goals/W0.2.yaml +0 -0
  123. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/README.md +0 -0
  124. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/architecture.md +0 -0
  125. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/connect.md +0 -0
  126. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/cost.md +0 -0
  127. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/custom-domain.md +0 -0
  128. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/debugging.md +0 -0
  129. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/goals.md +0 -0
  130. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/limits.md +0 -0
  131. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/plan.md +0 -0
  132. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/white-label.md +0 -0
  133. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/modal/wiring.md +0 -0
  134. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/observability.md +0 -0
  135. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/references.md +0 -0
  136. {sequence_base-0.3.9 → sequence_base-0.3.10}/docs/platform/sdk.md +0 -0
  137. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/__init__.py +0 -0
  138. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/auth.py +0 -0
  139. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/codec/__init__.py +0 -0
  140. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/codec/image.py +0 -0
  141. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/codec/resize.py +0 -0
  142. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/constants/__init__.py +0 -0
  143. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/constants/env.py +0 -0
  144. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/constants/headers.py +0 -0
  145. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/__init__.py +0 -0
  146. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/accounts.py +0 -0
  147. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/act.py +0 -0
  148. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/benchmarks.py +0 -0
  149. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/connect.py +0 -0
  150. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/errors.py +0 -0
  151. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/eval.py +0 -0
  152. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/flags.py +0 -0
  153. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/io.py +0 -0
  154. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/contract/volumes.py +0 -0
  155. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/errors/__init__.py +0 -0
  156. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/errors/transport.py +0 -0
  157. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/obs/__init__.py +0 -0
  158. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/obs/log.py +0 -0
  159. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/obs/rid.py +0 -0
  160. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/schema_export.py +0 -0
  161. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/telemetry/__init__.py +0 -0
  162. {sequence_base-0.3.9 → sequence_base-0.3.10}/sequence_base/telemetry/events.py +0 -0
  163. {sequence_base-0.3.9 → sequence_base-0.3.10}/tests/test_codec_roundtrip.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sequence-base
3
- Version: 0.3.9
3
+ Version: 0.3.10
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.11
6
6
  Requires-Dist: pydantic>=2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.3.9"
3
+ version = "0.3.10"
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.11"
6
6
  dependencies = ["pydantic>=2.0"]
@@ -6,7 +6,8 @@ PROTOCOL_VERSION = "1"
6
6
  # across deployments / repos can tell which version of a shape it is validating against. MUST change
7
7
  # whenever any shared wire shape changes (a field added / removed / retyped) — that is what makes
8
8
  # contract evolution mechanically detectable instead of eyeballed. Bump on any shape change.
9
- CONTRACT_VERSION = "0.4.8" # 0.4.7 -> 0.4.8: ImageSpec.python, ImageStepRun.secrets, Resources.region, DeploymentRequest/BenchmarkRegisterRequest.image_context
9
+ CONTRACT_VERSION = "0.4.9" # 0.4.8 -> 0.4.9: weights may be s3:// or https://
10
+ # previous: 0.4.8 # 0.4.7 -> 0.4.8: ImageSpec.python, ImageStepRun.secrets, Resources.region, DeploymentRequest/BenchmarkRegisterRequest.image_context
10
11
  # previous: 0.4.7 # 0.4.6 -> 0.4.7: ActionContract.bounds / max_delta / on_violation (action limits)
11
12
  # previous: 0.4.6 # 0.4.5 -> 0.4.6: InferParam + DeploymentPolicy.params; EvalRequest.params / variants / record; BenchmarkRegisterRequest.gpu
12
13
  # previous: 0.4.5 # 0.4.4 -> 0.4.5: BenchmarkRegisterRequest.condition_list / timeout_s / default_adapter_ref (+ BenchmarkConditionSpec); EvalRequest.tasks / max_usd / rerun_of
@@ -220,22 +220,23 @@ class DeploymentRequest(BaseModel):
220
220
 
221
221
  @model_validator(mode="after")
222
222
  def _weights_have_an_origin(self) -> "DeploymentRequest":
223
- """The checkpoint the build provisions: a gs:// prefix, an hf:// repo or an uploaded vol:// volume, never
223
+ """The checkpoint the build provisions: a gs:// or s3:// prefix, an https:// file, an hf:// repo or an uploaded
224
+ vol:// volume, never
224
225
  empty. PolicySpec already enforces this for SDK-authored deploys; this holds it for any POSTed body."""
225
226
  uri = self.weights.uri.strip()
226
227
  if uri.startswith(VOL_SCHEME):
227
228
  parse_vol(uri)
228
229
  return self
229
230
  if not any(uri.startswith(s) and len(uri) > len(s) for s in _WEIGHTS_SCHEMES):
230
- raise ValueError("weights.uri must be a gs://bucket/prefix, an hf://org/model repo or a "
231
- "vol://<name> volume")
231
+ raise ValueError("weights.uri must be a gs://bucket/prefix, an s3://bucket/prefix, an https:// URL, an "
232
+ "hf://org/model repo or a vol://<name> volume")
232
233
  return self
233
234
 
234
235
 
235
236
  # A deployment name: what `connect(model=...)` and the console address. {DeploymentRequest._name_is_a_slug}
236
237
  _NAME = re.compile(r"[A-Za-z0-9][A-Za-z0-9._-]{0,63}")
237
238
  # The origins the build knows how to provision weights from.
238
- _WEIGHTS_SCHEMES = ("gs://", "hf://")
239
+ _WEIGHTS_SCHEMES = ("gs://", "hf://", "s3://", "https://")
239
240
 
240
241
 
241
242
  class DeploymentAccepted(BaseModel):
@@ -159,8 +159,10 @@ class PolicySpec(BaseModel):
159
159
  from sequence_base.contract.volumes import parse_vol
160
160
  parse_vol(v)
161
161
  return v
162
- if not (v.startswith("gs://") or v.startswith("hf://")):
163
- raise ValueError("weights must be a gs://, hf:// or vol:// URI")
162
+ # s3:// (the author's own bucket, or any S3-compatible store) and https:// (one file or archive at a URL):
163
+ # {gs-plans/customization/README.md P2 "S3:// / HTTPS:// 权重"}
164
+ if not v.startswith(("gs://", "hf://", "s3://", "https://")):
165
+ raise ValueError("weights must be a gs://, s3://, https://, hf:// or vol:// URI")
164
166
  return v
165
167
 
166
168
 
@@ -98,5 +98,5 @@
98
98
  ],
99
99
  "title": "ActionChunk",
100
100
  "type": "object",
101
- "x-contract-version": "0.4.8"
101
+ "x-contract-version": "0.4.9"
102
102
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionContract",
101
101
  "type": "object",
102
- "x-contract-version": "0.4.8"
102
+ "x-contract-version": "0.4.9"
103
103
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.8"
22
+ "x-contract-version": "0.4.9"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.8"
41
+ "x-contract-version": "0.4.9"
42
42
  }
@@ -39,5 +39,5 @@
39
39
  },
40
40
  "title": "Autoscaler",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.8"
42
+ "x-contract-version": "0.4.9"
43
43
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.8"
65
+ "x-contract-version": "0.4.9"
66
66
  }
@@ -638,5 +638,5 @@
638
638
  ],
639
639
  "title": "BenchmarkRegisterRequest",
640
640
  "type": "object",
641
- "x-contract-version": "0.4.8"
641
+ "x-contract-version": "0.4.9"
642
642
  }
@@ -235,7 +235,7 @@
235
235
  ],
236
236
  "title": "SeqFlags",
237
237
  "type": "integer",
238
- "x-contract-version": "0.4.8",
238
+ "x-contract-version": "0.4.9",
239
239
  "x-flag-names": {
240
240
  "CHECK": 65536,
241
241
  "INFER": 16,
@@ -425,5 +425,5 @@
425
425
  ],
426
426
  "title": "BenchmarkSpec",
427
427
  "type": "object",
428
- "x-contract-version": "0.4.8"
428
+ "x-contract-version": "0.4.9"
429
429
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.8"
43
+ "x-contract-version": "0.4.9"
44
44
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "BootstrapResponse",
74
74
  "type": "object",
75
- "x-contract-version": "0.4.8"
75
+ "x-contract-version": "0.4.9"
76
76
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Camera",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.8"
24
+ "x-contract-version": "0.4.9"
25
25
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.8"
26
+ "x-contract-version": "0.4.9"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.8"
26
+ "x-contract-version": "0.4.9"
27
27
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "Concurrency",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.8"
20
+ "x-contract-version": "0.4.9"
21
21
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.8"
58
+ "x-contract-version": "0.4.9"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.8"
28
+ "x-contract-version": "0.4.9"
29
29
  }
@@ -281,5 +281,5 @@
281
281
  ],
282
282
  "title": "ConnectResponse",
283
283
  "type": "object",
284
- "x-contract-version": "0.4.8"
284
+ "x-contract-version": "0.4.9"
285
285
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.8"
21
+ "x-contract-version": "0.4.9"
22
22
  }
@@ -353,5 +353,5 @@
353
353
  ],
354
354
  "title": "DeploymentPolicy",
355
355
  "type": "object",
356
- "x-contract-version": "0.4.8"
356
+ "x-contract-version": "0.4.9"
357
357
  }
@@ -771,5 +771,5 @@
771
771
  ],
772
772
  "title": "DeploymentRequest",
773
773
  "type": "object",
774
- "x-contract-version": "0.4.8"
774
+ "x-contract-version": "0.4.9"
775
775
  }
@@ -41,5 +41,5 @@
41
41
  ],
42
42
  "title": "DeploymentStatusResponse",
43
43
  "type": "object",
44
- "x-contract-version": "0.4.8"
44
+ "x-contract-version": "0.4.9"
45
45
  }
@@ -199,5 +199,5 @@
199
199
  ],
200
200
  "title": "Embodiment",
201
201
  "type": "object",
202
- "x-contract-version": "0.4.8"
202
+ "x-contract-version": "0.4.9"
203
203
  }
@@ -28,5 +28,5 @@
28
28
  ],
29
29
  "title": "ErrorBody",
30
30
  "type": "object",
31
- "x-contract-version": "0.4.8"
31
+ "x-contract-version": "0.4.9"
32
32
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "Estimate",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.8"
24
+ "x-contract-version": "0.4.9"
25
25
  }
@@ -37,5 +37,5 @@
37
37
  ],
38
38
  "title": "EvalDryRunResponse",
39
39
  "type": "object",
40
- "x-contract-version": "0.4.8"
40
+ "x-contract-version": "0.4.9"
41
41
  }
@@ -183,5 +183,5 @@
183
183
  ],
184
184
  "title": "EvalReport",
185
185
  "type": "object",
186
- "x-contract-version": "0.4.8"
186
+ "x-contract-version": "0.4.9"
187
187
  }
@@ -213,5 +213,5 @@
213
213
  ],
214
214
  "title": "EvalRequest",
215
215
  "type": "object",
216
- "x-contract-version": "0.4.8"
216
+ "x-contract-version": "0.4.9"
217
217
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "EvalResponse",
86
86
  "type": "object",
87
- "x-contract-version": "0.4.8"
87
+ "x-contract-version": "0.4.9"
88
88
  }
@@ -32,5 +32,5 @@
32
32
  ],
33
33
  "title": "ImageFrame",
34
34
  "type": "object",
35
- "x-contract-version": "0.4.8"
35
+ "x-contract-version": "0.4.9"
36
36
  }
@@ -162,5 +162,5 @@
162
162
  },
163
163
  "title": "ImageSpec",
164
164
  "type": "object",
165
- "x-contract-version": "0.4.8"
165
+ "x-contract-version": "0.4.9"
166
166
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.8"
17
+ "x-contract-version": "0.4.9"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.8"
17
+ "x-contract-version": "0.4.9"
18
18
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "ImageStepRun",
48
48
  "type": "object",
49
- "x-contract-version": "0.4.8"
49
+ "x-contract-version": "0.4.9"
50
50
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.8"
17
+ "x-contract-version": "0.4.9"
18
18
  }
@@ -39,5 +39,5 @@
39
39
  ],
40
40
  "title": "InferParam",
41
41
  "type": "object",
42
- "x-contract-version": "0.4.8"
42
+ "x-contract-version": "0.4.9"
43
43
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "Lease",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.8"
27
+ "x-contract-version": "0.4.9"
28
28
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "LossyTransform",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.8"
20
+ "x-contract-version": "0.4.9"
21
21
  }
@@ -83,5 +83,5 @@
83
83
  ],
84
84
  "title": "MetricAgg",
85
85
  "type": "object",
86
- "x-contract-version": "0.4.8"
86
+ "x-contract-version": "0.4.9"
87
87
  }
@@ -147,5 +147,5 @@
147
147
  ],
148
148
  "title": "Observation",
149
149
  "type": "object",
150
- "x-contract-version": "0.4.8"
150
+ "x-contract-version": "0.4.9"
151
151
  }
@@ -69,5 +69,5 @@
69
69
  },
70
70
  "title": "ObservationContract",
71
71
  "type": "object",
72
- "x-contract-version": "0.4.8"
72
+ "x-contract-version": "0.4.9"
73
73
  }
@@ -548,7 +548,7 @@
548
548
  ],
549
549
  "title": "SeqFlags",
550
550
  "type": "integer",
551
- "x-contract-version": "0.4.8",
551
+ "x-contract-version": "0.4.9",
552
552
  "x-flag-names": {
553
553
  "CHECK": 65536,
554
554
  "INFER": 16,
@@ -648,5 +648,5 @@
648
648
  ],
649
649
  "title": "PolicyRegistration",
650
650
  "type": "object",
651
- "x-contract-version": "0.4.8"
651
+ "x-contract-version": "0.4.9"
652
652
  }
@@ -556,5 +556,5 @@
556
556
  ],
557
557
  "title": "PolicySpec",
558
558
  "type": "object",
559
- "x-contract-version": "0.4.8"
559
+ "x-contract-version": "0.4.9"
560
560
  }
@@ -63,5 +63,5 @@
63
63
  ],
64
64
  "title": "Proprioception",
65
65
  "type": "object",
66
- "x-contract-version": "0.4.8"
66
+ "x-contract-version": "0.4.9"
67
67
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "RenderSpec",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.8"
21
+ "x-contract-version": "0.4.9"
22
22
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "Resources",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.8"
41
+ "x-contract-version": "0.4.9"
42
42
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "RolloutResult",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.8"
58
+ "x-contract-version": "0.4.9"
59
59
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "SecretCreateRequest",
23
23
  "type": "object",
24
- "x-contract-version": "0.4.8"
24
+ "x-contract-version": "0.4.9"
25
25
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "SecretInfo",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.8"
43
+ "x-contract-version": "0.4.9"
44
44
  }
@@ -12,5 +12,5 @@
12
12
  ],
13
13
  "title": "SecretRef",
14
14
  "type": "object",
15
- "x-contract-version": "0.4.8"
15
+ "x-contract-version": "0.4.9"
16
16
  }
@@ -16,7 +16,7 @@
16
16
  ],
17
17
  "title": "SeqFlags",
18
18
  "type": "integer",
19
- "x-contract-version": "0.4.8",
19
+ "x-contract-version": "0.4.9",
20
20
  "x-flag-names": {
21
21
  "CHECK": 65536,
22
22
  "INFER": 16,
@@ -64,5 +64,5 @@
64
64
  ],
65
65
  "title": "Step",
66
66
  "type": "object",
67
- "x-contract-version": "0.4.8"
67
+ "x-contract-version": "0.4.9"
68
68
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "SuiteAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.8"
25
+ "x-contract-version": "0.4.9"
26
26
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TaskAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.8"
25
+ "x-contract-version": "0.4.9"
26
26
  }
@@ -16,5 +16,5 @@
16
16
  ],
17
17
  "title": "Timeouts",
18
18
  "type": "object",
19
- "x-contract-version": "0.4.8"
19
+ "x-contract-version": "0.4.9"
20
20
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "UploadTarget",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.8"
27
+ "x-contract-version": "0.4.9"
28
28
  }
@@ -34,5 +34,5 @@
34
34
  ],
35
35
  "title": "UsageReport",
36
36
  "type": "object",
37
- "x-contract-version": "0.4.8"
37
+ "x-contract-version": "0.4.9"
38
38
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Variant",
22
22
  "type": "object",
23
- "x-contract-version": "0.4.8"
23
+ "x-contract-version": "0.4.9"
24
24
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "VolumeAttach",
24
24
  "type": "object",
25
- "x-contract-version": "0.4.8"
25
+ "x-contract-version": "0.4.9"
26
26
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "VolumeFile",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.8"
28
+ "x-contract-version": "0.4.9"
29
29
  }
@@ -68,5 +68,5 @@
68
68
  ],
69
69
  "title": "VolumeInfo",
70
70
  "type": "object",
71
- "x-contract-version": "0.4.8"
71
+ "x-contract-version": "0.4.9"
72
72
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "VolumeMount",
19
19
  "type": "object",
20
- "x-contract-version": "0.4.8"
20
+ "x-contract-version": "0.4.9"
21
21
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "VolumeRef",
26
26
  "type": "object",
27
- "x-contract-version": "0.4.8"
27
+ "x-contract-version": "0.4.9"
28
28
  }
@@ -56,5 +56,5 @@
56
56
  ],
57
57
  "title": "VolumeUploadRequest",
58
58
  "type": "object",
59
- "x-contract-version": "0.4.8"
59
+ "x-contract-version": "0.4.9"
60
60
  }
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "VolumeUploadResponse",
67
67
  "type": "object",
68
- "x-contract-version": "0.4.8"
68
+ "x-contract-version": "0.4.9"
69
69
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "WarmingError",
48
48
  "type": "object",
49
- "x-contract-version": "0.4.8"
49
+ "x-contract-version": "0.4.9"
50
50
  }
@@ -319,9 +319,11 @@ def test_policyspec_requires_action():
319
319
 
320
320
 
321
321
  def test_policyspec_weights_scheme_enforced():
322
- PolicySpec(name="p", gpu="L4", image=_IMG, weights="hf://org/model", action=_AC)
323
- with pytest.raises(ValidationError):
324
- PolicySpec(name="p", gpu="L4", image=_IMG, weights="https://w/", action=_AC)
322
+ for uri in ("hf://org/model", "gs://w/", "s3://bkt/ckpt/", "https://example.com/ckpt.tar.gz"):
323
+ PolicySpec(name="p", gpu="L4", image=_IMG, weights=uri, action=_AC)
324
+ for uri in ("http://example.com/ckpt", "ftp://w/", "/local/ckpt"):
325
+ with pytest.raises(ValidationError):
326
+ PolicySpec(name="p", gpu="L4", image=_IMG, weights=uri, action=_AC)
325
327
 
326
328
 
327
329
  def test_policyspec_gpu_accepts_str_or_list():
@@ -689,8 +691,9 @@ def test_a_name_with_spaces_slashes_or_schemes_is_refused(name):
689
691
  DeploymentRequest.model_validate(_deploy_body(name=name))
690
692
 
691
693
 
692
- @pytest.mark.parametrize("uri", ["", " ", "gs://", "hf://", "s3://bkt/x", "/local/path"])
693
- def test_weights_need_a_gs_or_hf_origin(uri):
694
+ @pytest.mark.parametrize("uri", ["", " ", "gs://", "hf://", "s3://", "https://", "http://example.com/w",
695
+ "/local/path"])
696
+ def test_weights_need_an_origin_the_build_provisions(uri):
694
697
  from sequence_base import DeploymentRequest
695
698
  with pytest.raises(ValueError):
696
699
  DeploymentRequest.model_validate(_deploy_body(weights={"uri": uri, "mount": "/data"}))
@@ -804,3 +807,10 @@ def test_build_options_python_version_build_secrets_region_and_a_dockerfile_cont
804
807
  "control_frequency_hz": 10.0}},
805
808
  "image_context": CodeBundle.from_bytes(b"\x1f\x8b context").model_dump()})
806
809
  assert req.resources.region == "us-west" and req.image_context.raw() == b"\x1f\x8b context"
810
+
811
+
812
+ @pytest.mark.parametrize("uri", ["s3://bkt/ckpt/", "https://example.com/ckpt.safetensors", "gs://bkt/w/",
813
+ "hf://org/model"])
814
+ def test_weights_from_s3_and_https_are_accepted(uri):
815
+ from sequence_base import DeploymentRequest
816
+ assert DeploymentRequest.model_validate(_deploy_body(weights={"uri": uri, "mount": "/data"})).weights.uri == uri
File without changes
File without changes