sequence-base 0.4.25__tar.gz → 0.4.26__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 (111) hide show
  1. {sequence_base-0.4.25 → sequence_base-0.4.26}/PKG-INFO +1 -1
  2. {sequence_base-0.4.25 → sequence_base-0.4.26}/pyproject.toml +1 -1
  3. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/__init__.py +3 -1
  4. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/constants/version.py +1 -1
  5. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/__init__.py +3 -1
  6. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/policy.py +97 -1
  7. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schema_export.py +4 -0
  8. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ActRequest.json +1 -1
  9. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ActResponse.json +1 -1
  10. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ActionChunk.json +1 -1
  11. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ActionContract.json +1 -1
  12. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ActionStep.json +1 -1
  13. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/AdapterPair.json +1 -1
  14. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/AddLocal.json +1 -1
  15. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Autoscaler.json +1 -1
  16. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  17. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/BenchmarkRegisterRequest.json +92 -1
  18. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/BenchmarkSpec.json +93 -2
  19. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  20. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/BootstrapResponse.json +1 -1
  21. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Camera.json +1 -1
  22. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/CodeBundle.json +1 -1
  23. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Concurrency.json +1 -1
  24. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Conditions.json +1 -1
  25. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ConnectRequest.json +1 -1
  26. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ConnectResponse.json +1 -1
  27. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  28. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/DeploymentPolicy.json +1 -1
  29. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/DeploymentRequest.json +92 -1
  30. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  31. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Embodiment.json +1 -1
  32. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ErrorBody.json +1 -1
  33. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ErrorCodes.json +1 -1
  34. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Estimate.json +1 -1
  35. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  36. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/EvalReport.json +1 -1
  37. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/EvalRequest.json +1 -1
  38. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/EvalResponse.json +1 -1
  39. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageFrame.json +1 -1
  40. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageSpec.json +92 -1
  41. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  42. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepApt.json +1 -1
  43. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepEnv.json +1 -1
  44. sequence_base-0.4.26/sequence_base/schemas/ImageStepProject.json +91 -0
  45. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepRun.json +1 -1
  46. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
  47. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  48. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/InferParam.json +1 -1
  49. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Lease.json +1 -1
  50. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/MetricAgg.json +1 -1
  51. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Observation.json +1 -1
  52. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ObservationContract.json +1 -1
  53. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/PolicyRegistration.json +93 -2
  54. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/PolicySpec.json +92 -1
  55. sequence_base-0.4.26/sequence_base/schemas/Project.json +76 -0
  56. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Proprioception.json +1 -1
  57. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/RenderSpec.json +1 -1
  58. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/ReplaySpec.json +1 -1
  59. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Resources.json +1 -1
  60. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/RolloutResult.json +1 -1
  61. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  62. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/SecretInfo.json +1 -1
  63. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/SecretRef.json +1 -1
  64. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/SeqFlags.json +1 -1
  65. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Step.json +1 -1
  66. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/TaskAgg.json +1 -1
  67. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/TemplateFiles.json +1 -1
  68. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Timeouts.json +1 -1
  69. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/UploadTarget.json +1 -1
  70. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/Variant.json +1 -1
  71. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeFile.json +1 -1
  72. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeInfo.json +1 -1
  73. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeMount.json +1 -1
  74. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeRef.json +1 -1
  75. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  76. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  77. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/schemas/WarmingError.json +1 -1
  78. {sequence_base-0.4.25 → sequence_base-0.4.26}/.gitignore +0 -0
  79. {sequence_base-0.4.25 → sequence_base-0.4.26}/README.md +0 -0
  80. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/auth.py +0 -0
  81. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/codec/__init__.py +0 -0
  82. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/codec/image.py +0 -0
  83. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/constants/__init__.py +0 -0
  84. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/constants/cards.py +0 -0
  85. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/constants/headers.py +0 -0
  86. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/constants/limits.py +0 -0
  87. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/construct.py +0 -0
  88. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/accounts.py +0 -0
  89. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/act.py +0 -0
  90. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/adapters.py +0 -0
  91. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/benchmarks.py +0 -0
  92. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/connect.py +0 -0
  93. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/deployments.py +0 -0
  94. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/errors.py +0 -0
  95. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/eval.py +0 -0
  96. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/flags.py +0 -0
  97. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/io.py +0 -0
  98. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/templates.py +0 -0
  99. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/volumes.py +0 -0
  100. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/contract/wire.py +0 -0
  101. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/errors/__init__.py +0 -0
  102. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/errors/transport.py +0 -0
  103. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/msgpack_io.py +0 -0
  104. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/obs/__init__.py +0 -0
  105. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/obs/log.py +0 -0
  106. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/obs/rid.py +0 -0
  107. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/presets/__init__.py +0 -0
  108. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/presets/frames.py +0 -0
  109. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/presets/robot_arm.py +0 -0
  110. {sequence_base-0.4.25 → sequence_base-0.4.26}/sequence_base/telemetry/__init__.py +0 -0
  111. {sequence_base-0.4.25 → sequence_base-0.4.26}/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.4.25
3
+ Version: 0.4.26
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
  Project-URL: Changelog, https://generalsequences.com/docs/changelog/
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.4.25"
3
+ version = "0.4.26"
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"]
@@ -21,6 +21,8 @@ from sequence_base.contract import (
21
21
  FROZEN_PATH,
22
22
  TemplateFiles,
23
23
  ImageStepTemplateFiles,
24
+ Project,
25
+ ImageStepProject,
24
26
  Camera,
25
27
  Embodiment,
26
28
  ObservationContract,
@@ -131,7 +133,7 @@ __all__ = [
131
133
  "ActRequest", "ActResponse",
132
134
 
133
135
  "SeqFlags", "ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
134
- "FROZEN_PATH", "TemplateFiles", "ImageStepTemplateFiles", "ImageStep", "ImageSpec",
136
+ "FROZEN_PATH", "TemplateFiles", "ImageStepTemplateFiles", "Project", "ImageStepProject", "ImageStep", "ImageSpec",
135
137
  "VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
136
138
  "PolicySpec", "PolicyRegistration", "PolicyConstructor",
137
139
 
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.5.22"
7
+ CONTRACT_VERSION = "0.5.23"
8
8
 
9
9
 
10
10
 
@@ -34,6 +34,8 @@ from sequence_base.contract.policy import (
34
34
  FROZEN_PATH,
35
35
  TemplateFiles,
36
36
  ImageStepTemplateFiles,
37
+ ImageStepProject,
38
+ Project,
37
39
  PolicyConstructor,
38
40
  PolicyRegistration,
39
41
  PolicySpec,
@@ -120,7 +122,7 @@ __all__ = [
120
122
 
121
123
  "SeqFlags",
122
124
  "ImageStepUvPip", "ImageStepApt", "ImageStepEnv", "ImageStepRun", "AddLocal", "ImageStepAddLocal",
123
- "TemplateFiles", "ImageStepTemplateFiles", "FROZEN_PATH", "ImageStep", "ImageSpec",
125
+ "TemplateFiles", "ImageStepTemplateFiles", "Project", "ImageStepProject", "FROZEN_PATH", "ImageStep", "ImageSpec",
124
126
  "VolumeMount", "VolumeRef", "Concurrency", "ActionContract", "Camera", "ObservationContract", "Embodiment",
125
127
  "PolicySpec", "PolicyRegistration", "PolicyConstructor",
126
128
 
@@ -35,6 +35,8 @@ __all__ = [
35
35
  "FROZEN_PATH",
36
36
  "TemplateFiles",
37
37
  "ImageStepTemplateFiles",
38
+ "Project",
39
+ "ImageStepProject",
38
40
  "ImageStep",
39
41
  "ImageSpec",
40
42
  "VolumeMount",
@@ -126,7 +128,101 @@ class ImageStepTemplateFiles(BaseModel):
126
128
  template_files: TemplateFiles
127
129
 
128
130
 
129
- ImageStep = ImageStepUvPip | ImageStepApt | ImageStepEnv | ImageStepRun | ImageStepAddLocal | ImageStepTemplateFiles
131
+ def _inside_bundle(what: str, v: str) -> str:
132
+ """A path inside the deploy's code bundle: relative, '/'-separated, never above it."""
133
+ if v.startswith("/") or "\\" in v or ".." in v.split("/"):
134
+ raise ValueError(f"project {what} {v!r} must be a relative path inside the code bundle, without '..'")
135
+ return v
136
+
137
+
138
+
139
+ _DIST_NAME = r"^[A-Za-z0-9]([A-Za-z0-9._-]{0,126}[A-Za-z0-9])?$"
140
+ _DIST_VERSION = r"^[A-Za-z0-9.+!_-]{1,64}$"
141
+
142
+
143
+ class Project(BaseModel):
144
+ """A project's own dependency files, which the image installs from (`seq.Image.from_project`, or a policy that
145
+ declares no image and whose project has them): each read from the deploy's code bundle. The platform turns them into
146
+ the install when the image builds - for Linux and the worker's card, whatever machine the author wrote them on: the
147
+ lock's exact versions, else the declared ones held to the versions the author's machine has (`pins`), the local
148
+ packages the code imports with their own, less `exclude`, then `extra`.
149
+ """
150
+
151
+ model_config = ConfigDict(extra="forbid")
152
+
153
+ root: str = Field("", max_length=512, description="The project's folder inside the code bundle ('' its root)")
154
+ lock: str | None = Field(None, min_length=1, max_length=512,
155
+ description="Its lock file, relative to root: uv.lock, poetry.lock, pdm.lock, Pipfile.lock "
156
+ "or a requirements file whose every line pins a version")
157
+ declared: list[str] = Field(default_factory=list, max_length=8,
158
+ description="Its declared dependency files, relative to root: pyproject.toml, "
159
+ "requirements*.txt, setup.cfg, setup.py")
160
+ packages: list[str] = Field(default_factory=list, max_length=64,
161
+ description="Folders inside the code bundle, each a package of its own (a pyproject.toml "
162
+ "or setup.py) the code imports, installed with its dependencies")
163
+ pins: dict[str, str] = Field(default_factory=dict, max_length=4096,
164
+ description="The version of each package the author's machine has, which an install "
165
+ "from declared ranges keeps")
166
+ exclude: list[str] = Field(default_factory=list, max_length=256, description="Packages left out, by name")
167
+ extra: list[str] = Field(default_factory=list, max_length=64,
168
+ description="Requirements added after the project's own: 'name==version', or "
169
+ "'name @ https://…' for a wheel")
170
+
171
+ @field_validator("root")
172
+ @classmethod
173
+ def _root_inside(cls, v: str) -> str:
174
+ return _inside_bundle("root", v) if v else v
175
+
176
+ @field_validator("lock")
177
+ @classmethod
178
+ def _lock_inside(cls, v: str | None) -> str | None:
179
+ return _inside_bundle("lock", v) if v is not None else v
180
+
181
+ @field_validator("declared", "packages")
182
+ @classmethod
183
+ def _paths_inside(cls, v: list[str]) -> list[str]:
184
+ for p in v:
185
+ if not p or len(p) > 512:
186
+ raise ValueError("a project file or package path is 1 to 512 characters")
187
+ _inside_bundle("path", p)
188
+ return v
189
+
190
+ @field_validator("pins")
191
+ @classmethod
192
+ def _pins_well_formed(cls, v: dict[str, str]) -> dict[str, str]:
193
+ import re
194
+
195
+ for name, version in v.items():
196
+ if not re.match(_DIST_NAME, name) or not re.match(_DIST_VERSION, version or ""):
197
+ raise ValueError(f"project pin {name!r}=={version!r} is not a package name and a version")
198
+ return v
199
+
200
+ @field_validator("exclude")
201
+ @classmethod
202
+ def _names(cls, v: list[str]) -> list[str]:
203
+ import re
204
+
205
+ bad = [n for n in v if not re.match(_DIST_NAME, n)]
206
+ if bad:
207
+ raise ValueError(f"project exclude takes package names: {bad[:3]}")
208
+ return v
209
+
210
+ @field_validator("extra")
211
+ @classmethod
212
+ def _requirements(cls, v: list[str]) -> list[str]:
213
+ for r in v:
214
+ if not r.strip() or len(r) > 1024 or "\n" in r:
215
+ raise ValueError("a project extra is one requirement of 1 to 1024 characters, on one line")
216
+ return v
217
+
218
+
219
+ class ImageStepProject(BaseModel):
220
+ model_config = ConfigDict(extra="forbid")
221
+ project: Project
222
+
223
+
224
+ ImageStep = (ImageStepUvPip | ImageStepApt | ImageStepEnv | ImageStepRun | ImageStepAddLocal | ImageStepTemplateFiles
225
+ | ImageStepProject)
130
226
 
131
227
 
132
228
  class ImageSpec(BaseModel):
@@ -90,6 +90,8 @@ from sequence_base.contract.policy import (
90
90
  ImageStepAddLocal,
91
91
  ImageStepRun,
92
92
  ImageStepTemplateFiles,
93
+ ImageStepProject,
94
+ Project,
93
95
  TemplateFiles,
94
96
  ImageStepUvPip,
95
97
  PolicyRegistration,
@@ -121,6 +123,8 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
121
123
  "ImageStepAddLocal": ImageStepAddLocal,
122
124
  "TemplateFiles": TemplateFiles,
123
125
  "ImageStepTemplateFiles": ImageStepTemplateFiles,
126
+ "Project": Project,
127
+ "ImageStepProject": ImageStepProject,
124
128
  "ImageSpec": ImageSpec,
125
129
  "VolumeMount": VolumeMount,
126
130
  "VolumeRef": VolumeRef,
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "ActRequest",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.22"
82
+ "x-contract-version": "0.5.23"
83
83
  }
@@ -89,5 +89,5 @@
89
89
  ],
90
90
  "title": "ActResponse",
91
91
  "type": "object",
92
- "x-contract-version": "0.5.22"
92
+ "x-contract-version": "0.5.23"
93
93
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.22"
102
+ "x-contract-version": "0.5.23"
103
103
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "ActionContract",
86
86
  "type": "object",
87
- "x-contract-version": "0.5.22"
87
+ "x-contract-version": "0.5.23"
88
88
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.5.22"
22
+ "x-contract-version": "0.5.23"
23
23
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "AdapterPair",
19
19
  "type": "object",
20
- "x-contract-version": "0.5.22"
20
+ "x-contract-version": "0.5.23"
21
21
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.22"
26
+ "x-contract-version": "0.5.23"
27
27
  }
@@ -57,5 +57,5 @@
57
57
  },
58
58
  "title": "Autoscaler",
59
59
  "type": "object",
60
- "x-contract-version": "0.5.22"
60
+ "x-contract-version": "0.5.23"
61
61
  }
@@ -50,5 +50,5 @@
50
50
  ],
51
51
  "title": "BenchmarkConditionSpec",
52
52
  "type": "object",
53
- "x-contract-version": "0.5.22"
53
+ "x-contract-version": "0.5.23"
54
54
  }
@@ -296,6 +296,9 @@
296
296
  },
297
297
  {
298
298
  "$ref": "#/$defs/ImageStepTemplateFiles"
299
+ },
300
+ {
301
+ "$ref": "#/$defs/ImageStepProject"
299
302
  }
300
303
  ]
301
304
  },
@@ -353,6 +356,19 @@
353
356
  "title": "ImageStepEnv",
354
357
  "type": "object"
355
358
  },
359
+ "ImageStepProject": {
360
+ "additionalProperties": false,
361
+ "properties": {
362
+ "project": {
363
+ "$ref": "#/$defs/Project"
364
+ }
365
+ },
366
+ "required": [
367
+ "project"
368
+ ],
369
+ "title": "ImageStepProject",
370
+ "type": "object"
371
+ },
356
372
  "ImageStepRun": {
357
373
  "additionalProperties": false,
358
374
  "properties": {
@@ -517,6 +533,81 @@
517
533
  "title": "InferParam",
518
534
  "type": "object"
519
535
  },
536
+ "Project": {
537
+ "additionalProperties": false,
538
+ "description": "A project's own dependency files, which the image installs from (`seq.Image.from_project`, or a policy that\ndeclares no image and whose project has them): each read from the deploy's code bundle. The platform turns them into\nthe install when the image builds - for Linux and the worker's card, whatever machine the author wrote them on: the\nlock's exact versions, else the declared ones held to the versions the author's machine has (`pins`), the local\npackages the code imports with their own, less `exclude`, then `extra`.",
539
+ "properties": {
540
+ "declared": {
541
+ "description": "Its declared dependency files, relative to root: pyproject.toml, requirements*.txt, setup.cfg, setup.py",
542
+ "items": {
543
+ "type": "string"
544
+ },
545
+ "maxItems": 8,
546
+ "title": "Declared",
547
+ "type": "array"
548
+ },
549
+ "exclude": {
550
+ "description": "Packages left out, by name",
551
+ "items": {
552
+ "type": "string"
553
+ },
554
+ "maxItems": 256,
555
+ "title": "Exclude",
556
+ "type": "array"
557
+ },
558
+ "extra": {
559
+ "description": "Requirements added after the project's own: 'name==version', or 'name @ https://…' for a wheel",
560
+ "items": {
561
+ "type": "string"
562
+ },
563
+ "maxItems": 64,
564
+ "title": "Extra",
565
+ "type": "array"
566
+ },
567
+ "lock": {
568
+ "anyOf": [
569
+ {
570
+ "maxLength": 512,
571
+ "minLength": 1,
572
+ "type": "string"
573
+ },
574
+ {
575
+ "type": "null"
576
+ }
577
+ ],
578
+ "default": null,
579
+ "description": "Its lock file, relative to root: uv.lock, poetry.lock, pdm.lock, Pipfile.lock or a requirements file whose every line pins a version",
580
+ "title": "Lock"
581
+ },
582
+ "packages": {
583
+ "description": "Folders inside the code bundle, each a package of its own (a pyproject.toml or setup.py) the code imports, installed with its dependencies",
584
+ "items": {
585
+ "type": "string"
586
+ },
587
+ "maxItems": 64,
588
+ "title": "Packages",
589
+ "type": "array"
590
+ },
591
+ "pins": {
592
+ "additionalProperties": {
593
+ "type": "string"
594
+ },
595
+ "description": "The version of each package the author's machine has, which an install from declared ranges keeps",
596
+ "maxProperties": 4096,
597
+ "title": "Pins",
598
+ "type": "object"
599
+ },
600
+ "root": {
601
+ "default": "",
602
+ "description": "The project's folder inside the code bundle ('' its root)",
603
+ "maxLength": 512,
604
+ "title": "Root",
605
+ "type": "string"
606
+ }
607
+ },
608
+ "title": "Project",
609
+ "type": "object"
610
+ },
520
611
  "RenderSpec": {
521
612
  "additionalProperties": false,
522
613
  "description": "a.k.a. `seq.Record` — declares the mp4 the platform records (money-shot is a platform tool, not user\nglue). `camera` picks which camera stream to pull frames from; `fps` is the output frame rate. Used two\nways: as `BenchmarkSpec.render` (record the whole eval) and as `Step.record` (a per-frame hint).",
@@ -986,5 +1077,5 @@
986
1077
  ],
987
1078
  "title": "BenchmarkRegisterRequest",
988
1079
  "type": "object",
989
- "x-contract-version": "0.5.22"
1080
+ "x-contract-version": "0.5.23"
990
1081
  }
@@ -132,6 +132,9 @@
132
132
  },
133
133
  {
134
134
  "$ref": "#/$defs/ImageStepTemplateFiles"
135
+ },
136
+ {
137
+ "$ref": "#/$defs/ImageStepProject"
135
138
  }
136
139
  ]
137
140
  },
@@ -189,6 +192,19 @@
189
192
  "title": "ImageStepEnv",
190
193
  "type": "object"
191
194
  },
195
+ "ImageStepProject": {
196
+ "additionalProperties": false,
197
+ "properties": {
198
+ "project": {
199
+ "$ref": "#/$defs/Project"
200
+ }
201
+ },
202
+ "required": [
203
+ "project"
204
+ ],
205
+ "title": "ImageStepProject",
206
+ "type": "object"
207
+ },
192
208
  "ImageStepRun": {
193
209
  "additionalProperties": false,
194
210
  "properties": {
@@ -251,6 +267,81 @@
251
267
  "title": "ImageStepUvPip",
252
268
  "type": "object"
253
269
  },
270
+ "Project": {
271
+ "additionalProperties": false,
272
+ "description": "A project's own dependency files, which the image installs from (`seq.Image.from_project`, or a policy that\ndeclares no image and whose project has them): each read from the deploy's code bundle. The platform turns them into\nthe install when the image builds - for Linux and the worker's card, whatever machine the author wrote them on: the\nlock's exact versions, else the declared ones held to the versions the author's machine has (`pins`), the local\npackages the code imports with their own, less `exclude`, then `extra`.",
273
+ "properties": {
274
+ "declared": {
275
+ "description": "Its declared dependency files, relative to root: pyproject.toml, requirements*.txt, setup.cfg, setup.py",
276
+ "items": {
277
+ "type": "string"
278
+ },
279
+ "maxItems": 8,
280
+ "title": "Declared",
281
+ "type": "array"
282
+ },
283
+ "exclude": {
284
+ "description": "Packages left out, by name",
285
+ "items": {
286
+ "type": "string"
287
+ },
288
+ "maxItems": 256,
289
+ "title": "Exclude",
290
+ "type": "array"
291
+ },
292
+ "extra": {
293
+ "description": "Requirements added after the project's own: 'name==version', or 'name @ https://…' for a wheel",
294
+ "items": {
295
+ "type": "string"
296
+ },
297
+ "maxItems": 64,
298
+ "title": "Extra",
299
+ "type": "array"
300
+ },
301
+ "lock": {
302
+ "anyOf": [
303
+ {
304
+ "maxLength": 512,
305
+ "minLength": 1,
306
+ "type": "string"
307
+ },
308
+ {
309
+ "type": "null"
310
+ }
311
+ ],
312
+ "default": null,
313
+ "description": "Its lock file, relative to root: uv.lock, poetry.lock, pdm.lock, Pipfile.lock or a requirements file whose every line pins a version",
314
+ "title": "Lock"
315
+ },
316
+ "packages": {
317
+ "description": "Folders inside the code bundle, each a package of its own (a pyproject.toml or setup.py) the code imports, installed with its dependencies",
318
+ "items": {
319
+ "type": "string"
320
+ },
321
+ "maxItems": 64,
322
+ "title": "Packages",
323
+ "type": "array"
324
+ },
325
+ "pins": {
326
+ "additionalProperties": {
327
+ "type": "string"
328
+ },
329
+ "description": "The version of each package the author's machine has, which an install from declared ranges keeps",
330
+ "maxProperties": 4096,
331
+ "title": "Pins",
332
+ "type": "object"
333
+ },
334
+ "root": {
335
+ "default": "",
336
+ "description": "The project's folder inside the code bundle ('' its root)",
337
+ "maxLength": 512,
338
+ "title": "Root",
339
+ "type": "string"
340
+ }
341
+ },
342
+ "title": "Project",
343
+ "type": "object"
344
+ },
254
345
  "RenderSpec": {
255
346
  "additionalProperties": false,
256
347
  "description": "a.k.a. `seq.Record` — declares the mp4 the platform records (money-shot is a platform tool, not user\nglue). `camera` picks which camera stream to pull frames from; `fps` is the output frame rate. Used two\nways: as `BenchmarkSpec.render` (record the whole eval) and as `Step.record` (a per-frame hint).",
@@ -379,7 +470,7 @@
379
470
  ],
380
471
  "title": "SeqFlags",
381
472
  "type": "integer",
382
- "x-contract-version": "0.5.22",
473
+ "x-contract-version": "0.5.23",
383
474
  "x-flag-names": {
384
475
  "CHECK": 65536,
385
476
  "INFER": 16,
@@ -628,5 +719,5 @@
628
719
  ],
629
720
  "title": "BenchmarkSpec",
630
721
  "type": "object",
631
- "x-contract-version": "0.5.22"
722
+ "x-contract-version": "0.5.23"
632
723
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.22"
43
+ "x-contract-version": "0.5.23"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.22"
82
+ "x-contract-version": "0.5.23"
83
83
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "Camera",
74
74
  "type": "object",
75
- "x-contract-version": "0.5.22"
75
+ "x-contract-version": "0.5.23"
76
76
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.22"
26
+ "x-contract-version": "0.5.23"
27
27
  }
@@ -96,5 +96,5 @@
96
96
  },
97
97
  "title": "Concurrency",
98
98
  "type": "object",
99
- "x-contract-version": "0.5.22"
99
+ "x-contract-version": "0.5.23"
100
100
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.22"
58
+ "x-contract-version": "0.5.23"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.22"
28
+ "x-contract-version": "0.5.23"
29
29
  }
@@ -310,5 +310,5 @@
310
310
  ],
311
311
  "title": "ConnectResponse",
312
312
  "type": "object",
313
- "x-contract-version": "0.5.22"
313
+ "x-contract-version": "0.5.23"
314
314
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.5.22"
21
+ "x-contract-version": "0.5.23"
22
22
  }
@@ -531,5 +531,5 @@
531
531
  ],
532
532
  "title": "DeploymentPolicy",
533
533
  "type": "object",
534
- "x-contract-version": "0.5.22"
534
+ "x-contract-version": "0.5.23"
535
535
  }