sequence-base 0.4.12__tar.gz → 0.4.14__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 (108) hide show
  1. {sequence_base-0.4.12 → sequence_base-0.4.14}/PKG-INFO +1 -1
  2. {sequence_base-0.4.12 → sequence_base-0.4.14}/pyproject.toml +1 -1
  3. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/__init__.py +1 -5
  4. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/constants/limits.py +5 -0
  5. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/constants/version.py +3 -1
  6. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/__init__.py +1 -5
  7. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/benchmarks.py +18 -1
  8. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/eval.py +14 -41
  9. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/presets/robot_arm.py +8 -17
  10. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schema_export.py +0 -4
  11. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ActRequest.json +1 -1
  12. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ActResponse.json +1 -1
  13. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ActionChunk.json +1 -1
  14. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ActionContract.json +1 -33
  15. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ActionStep.json +1 -1
  16. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/AddLocal.json +1 -1
  17. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Autoscaler.json +1 -1
  18. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  19. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/BenchmarkRegisterRequest.json +23 -33
  20. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  21. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  22. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/BootstrapResponse.json +1 -1
  23. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Camera.json +1 -1
  24. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ClampInfo.json +1 -1
  25. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/CodeBundle.json +1 -1
  26. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Concurrency.json +1 -1
  27. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Conditions.json +1 -1
  28. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ConnectRequest.json +1 -1
  29. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ConnectResponse.json +1 -33
  30. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  31. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/DeploymentPolicy.json +1 -33
  32. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/DeploymentRequest.json +1 -33
  33. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  34. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Embodiment.json +1 -33
  35. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ErrorBody.json +1 -1
  36. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ErrorCodes.json +1 -1
  37. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Estimate.json +1 -1
  38. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/EvalDryRunResponse.json +4 -4
  39. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/EvalReport.json +30 -31
  40. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/EvalRequest.json +21 -34
  41. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/EvalResponse.json +1 -1
  42. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageFrame.json +1 -1
  43. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageSpec.json +1 -1
  44. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  45. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepApt.json +1 -1
  46. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepEnv.json +1 -1
  47. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepRun.json +1 -1
  48. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
  49. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  50. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/InferParam.json +1 -1
  51. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Lease.json +1 -1
  52. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/MetricAgg.json +1 -1
  53. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Observation.json +15 -10
  54. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ObservationContract.json +1 -1
  55. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/PolicyRegistration.json +2 -34
  56. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/PolicySpec.json +1 -33
  57. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Proprioception.json +15 -10
  58. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/RenderSpec.json +1 -1
  59. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/ReplaySpec.json +1 -1
  60. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Resources.json +1 -1
  61. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/RolloutResult.json +1 -1
  62. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  63. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/SecretInfo.json +1 -1
  64. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/SecretRef.json +1 -1
  65. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/SeqFlags.json +1 -1
  66. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Step.json +1 -1
  67. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/TaskAgg.json +1 -1
  68. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/TemplateFiles.json +1 -1
  69. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Timeouts.json +1 -1
  70. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/UploadTarget.json +1 -1
  71. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/Variant.json +1 -1
  72. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeAttach.json +1 -1
  73. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeFile.json +1 -1
  74. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeInfo.json +1 -1
  75. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeMount.json +1 -1
  76. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeRef.json +1 -1
  77. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  78. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  79. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/schemas/WarmingError.json +1 -1
  80. sequence_base-0.4.12/sequence_base/schemas/AdapterTransform.json +0 -42
  81. sequence_base-0.4.12/sequence_base/schemas/LossyTransform.json +0 -21
  82. {sequence_base-0.4.12 → sequence_base-0.4.14}/.gitignore +0 -0
  83. {sequence_base-0.4.12 → sequence_base-0.4.14}/README.md +0 -0
  84. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/auth.py +0 -0
  85. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/codec/__init__.py +0 -0
  86. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/codec/image.py +0 -0
  87. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/constants/__init__.py +0 -0
  88. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/constants/headers.py +0 -0
  89. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/accounts.py +0 -0
  90. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/act.py +0 -0
  91. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/connect.py +0 -0
  92. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/deployments.py +0 -0
  93. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/errors.py +0 -0
  94. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/flags.py +0 -0
  95. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/io.py +0 -0
  96. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/policy.py +0 -0
  97. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/templates.py +0 -0
  98. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/volumes.py +0 -0
  99. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/contract/wire.py +0 -0
  100. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/errors/__init__.py +0 -0
  101. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/errors/transport.py +0 -0
  102. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/obs/__init__.py +0 -0
  103. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/obs/log.py +0 -0
  104. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/obs/rid.py +0 -0
  105. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/presets/__init__.py +0 -0
  106. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/presets/frames.py +0 -0
  107. {sequence_base-0.4.12 → sequence_base-0.4.14}/sequence_base/telemetry/__init__.py +0 -0
  108. {sequence_base-0.4.12 → sequence_base-0.4.14}/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.12
3
+ Version: 0.4.14
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.12"
3
+ version = "0.4.14"
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"]
@@ -37,8 +37,6 @@ from sequence_base.contract import (
37
37
  ActionContract,
38
38
  ActionSpace,
39
39
  ActionStep,
40
- AdapterKind,
41
- AdapterTransform,
42
40
  Autoscaler,
43
41
  BenchmarkConditionSpec,
44
42
  BenchmarkRegisterRequest,
@@ -75,7 +73,6 @@ from sequence_base.contract import (
75
73
  ImageStepRun,
76
74
  ImageStepUvPip,
77
75
  Lease,
78
- LossyTransform,
79
76
  MetricAgg,
80
77
  Observation,
81
78
  PolicyRegistration,
@@ -145,8 +142,7 @@ __all__ = [
145
142
 
146
143
  "Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
147
144
  "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
148
- "EvalStatus", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
149
- "AdapterKind", "AdapterTransform",
145
+ "EvalStatus", "TaskAgg", "MetricAgg", "EvalReport",
150
146
 
151
147
  "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
152
148
 
@@ -14,3 +14,8 @@ MAX_USD = 100_000
14
14
 
15
15
  TASK_DESCRIPTION_MAX = 300
16
16
 
17
+
18
+
19
+ METRIC_UNITS_MAX = 64
20
+ METRIC_UNIT_MAX = 16
21
+
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.5.11"
7
+ CONTRACT_VERSION = "0.5.13"
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -72,8 +72,6 @@ from sequence_base.contract.benchmarks import (
72
72
  Variant,
73
73
  )
74
74
  from sequence_base.contract.eval import (
75
- AdapterKind,
76
- AdapterTransform,
77
75
  ClampInfo,
78
76
  Estimate,
79
77
  EvalDryRunResponse,
@@ -81,7 +79,6 @@ from sequence_base.contract.eval import (
81
79
  EvalRequest,
82
80
  EvalResponse,
83
81
  EvalStatus,
84
- LossyTransform,
85
82
  MetricAgg,
86
83
  RolloutResult,
87
84
  TaskAgg,
@@ -133,8 +130,7 @@ __all__ = [
133
130
 
134
131
  "Variant", "Conditions", "RenderSpec", "ReplaySpec", "Step", "BenchmarkSpec", "BenchmarkConditionSpec", "BenchmarkRegisterRequest", "BenchmarkStatusResponse",
135
132
  "EvalRequest", "ClampInfo", "Estimate", "EvalResponse", "EvalDryRunResponse", "RolloutResult",
136
- "EvalStatus", "TaskAgg", "MetricAgg", "LossyTransform", "EvalReport",
137
- "AdapterKind", "AdapterTransform",
133
+ "EvalStatus", "TaskAgg", "MetricAgg", "EvalReport",
138
134
 
139
135
  "SecretRef", "SecretCreateRequest", "SecretInfo", "BootstrapResponse",
140
136
 
@@ -16,7 +16,7 @@ from typing import Literal
16
16
 
17
17
  from pydantic import BaseModel, ConfigDict, Field, model_validator
18
18
 
19
- from sequence_base.constants.limits import MAX_ENVS, TASK_DESCRIPTION_MAX
19
+ from sequence_base.constants.limits import MAX_ENVS, METRIC_UNIT_MAX, METRIC_UNITS_MAX, TASK_DESCRIPTION_MAX
20
20
  from sequence_base.contract.accounts import SecretRef
21
21
  from sequence_base.contract.deployments import CodeBundle, DeploymentState, InferParam
22
22
  from sequence_base.contract.flags import BENCHMARK_BATCHED, BENCHMARK_BINDABLE, SeqFlags
@@ -199,6 +199,14 @@ class BenchmarkRegisterRequest(BaseModel):
199
199
  seeds_repeat: bool | None = None
200
200
 
201
201
 
202
+
203
+ success_metric: str | None = Field(default=None, min_length=1, max_length=200)
204
+
205
+
206
+
207
+ metric_units: dict[str, str] = Field(default_factory=dict, max_length=METRIC_UNITS_MAX)
208
+
209
+
202
210
  action_contract: ActionContract | None = None
203
211
 
204
212
 
@@ -238,6 +246,15 @@ class BenchmarkRegisterRequest(BaseModel):
238
246
  raise ValueError(f"setup parameter {name!r} is not a public Python identifier")
239
247
  return self
240
248
 
249
+ @model_validator(mode="after")
250
+ def _metric_units(self) -> "BenchmarkRegisterRequest":
251
+ for metric, unit in self.metric_units.items():
252
+ if not metric or len(metric) > 200:
253
+ raise ValueError("metric_units names a metric of 1 to 200 characters")
254
+ if not unit.strip() or len(unit) > METRIC_UNIT_MAX:
255
+ raise ValueError(f"metric_units[{metric!r}] is a unit of 1 to {METRIC_UNIT_MAX} characters")
256
+ return self
257
+
241
258
  @model_validator(mode="after")
242
259
  def _task_descriptions(self) -> "BenchmarkRegisterRequest":
243
260
  """Each description names a task the benchmark declares - in `conditions` or `condition_list` - and is at most
@@ -32,10 +32,7 @@ __all__ = [
32
32
  "EvalStatus",
33
33
  "TaskAgg",
34
34
  "MetricAgg",
35
- "LossyTransform",
36
35
  "EvalReport",
37
- "AdapterKind",
38
- "AdapterTransform",
39
36
  ]
40
37
 
41
38
 
@@ -49,7 +46,7 @@ class EvalRequest(BaseModel):
49
46
  leave them out and take the earlier eval's. `dry_run` selects the estimate-only response shape below.
50
47
 
51
48
  The one body the platform accepts: the current knobs plus the legacy names an older SDK still sends — `gpus` /
52
- `envs_per_gpu` for the instance counts, `region` — each taken and mapped, or refused with the way on,
49
+ `envs_per_gpu` for the machine counts, `region` — each taken and mapped, or refused with the way on,
53
50
  never silently dropped. The gateway inherits this model rather than keeping its own."""
54
51
 
55
52
 
@@ -69,9 +66,9 @@ class EvalRequest(BaseModel):
69
66
 
70
67
 
71
68
 
72
- policy_instances: int | None = Field(default=None, ge=1, le=64)
69
+ policy_machines: int | None = Field(default=None, ge=1, le=64)
73
70
  policy_gpu: str | None = Field(default=None, max_length=32)
74
- benchmark_instances: int | None = Field(default=None, ge=1, le=64)
71
+ benchmark_machines: int | None = Field(default=None, ge=1, le=64)
75
72
 
76
73
 
77
74
 
@@ -81,7 +78,7 @@ class EvalRequest(BaseModel):
81
78
  envs: int | None = Field(default=None, ge=1)
82
79
 
83
80
  gpus: int = Field(default=1, ge=1, le=64, json_schema_extra={"deprecated": True},
84
- description="Deprecated name (sequence-ai <= 0.28) for policy_instances; use policy_instances.")
81
+ description="Deprecated name (sequence-ai <= 0.28) for policy_machines; use policy_machines.")
85
82
  envs_per_gpu: int | None = Field(default=None, ge=1, le=1024, json_schema_extra={"deprecated": True},
86
83
  description="Deprecated name (sequence-ai <= 0.28) for envs; use envs.")
87
84
  adapter: str | None = Field(default=None, max_length=200)
@@ -94,14 +91,14 @@ class EvalRequest(BaseModel):
94
91
  tasks: list[str] | None = Field(default=None, max_length=1000)
95
92
 
96
93
 
97
- max_usd: float | None = Field(default=None, gt=0, le=MAX_USD)
94
+
95
+ spend_cap_usd: float | None = Field(default=None, gt=0, le=MAX_USD)
98
96
 
99
97
  rerun_of: str | None = Field(default=None, max_length=64)
100
98
 
101
99
 
102
100
 
103
101
  rerun_unsuccessful_of: str | None = Field(default=None, max_length=64)
104
- metric: str | None = Field(default=None, max_length=64)
105
102
 
106
103
 
107
104
 
@@ -123,11 +120,11 @@ class EvalRequest(BaseModel):
123
120
  @field_validator("envs")
124
121
  @classmethod
125
122
  def _envs_cap(cls, v: int | None) -> int | None:
126
- """One benchmark instance runs at most MAX_ENVS environments; keep the author-facing hint (run more by adding
127
- instances) rather than a bare bound, and name the same shared constant as the gateway."""
123
+ """One benchmark machine runs at most MAX_ENVS environments; keep the author-facing hint (run more by adding
124
+ machines) rather than a bare bound, and name the same shared constant as the gateway."""
128
125
  if v is not None and v > MAX_ENVS:
129
- raise ValueError(f"a benchmark instance runs at most {MAX_ENVS} environments at once; add more "
130
- "benchmark_instances to run more")
126
+ raise ValueError(f"a benchmark machine runs at most {MAX_ENVS} environments at once; add more "
127
+ "benchmark_machines to run more")
131
128
  return v
132
129
 
133
130
  @model_validator(mode="after")
@@ -195,7 +192,7 @@ class CardSide(BaseModel):
195
192
 
196
193
  model_config = ConfigDict(extra="forbid")
197
194
 
198
- instances: int
195
+ machines: int
199
196
  gpu: str
200
197
  cards_each: int
201
198
 
@@ -304,16 +301,6 @@ class MetricAgg(BaseModel):
304
301
  n: int
305
302
 
306
303
 
307
- class LossyTransform(BaseModel):
308
- """A lossy adapter transform recorded in the report. Shape aligns with the lossy element of
309
- AdapterTransform (both {transform, reason})."""
310
-
311
- model_config = ConfigDict(extra="forbid")
312
-
313
- transform: str
314
- reason: str
315
-
316
-
317
304
  class ArmReport(BaseModel):
318
305
  """One arm of an eval (a model x one combination of swept inference parameters): its own metrics and episode
319
306
  counts, so arms are compared side by side and never pooled."""
@@ -388,7 +375,6 @@ class EvalReport(BaseModel):
388
375
  )
389
376
  cost_usd: float
390
377
  dashboard_url: str
391
- adapter_lossy: list[LossyTransform]
392
378
  videos: list[str] = Field(default_factory=list, description="mp4 pointers from the platform tool")
393
379
  incomplete: bool | None = None
394
380
  errors: list[str] = Field(
@@ -403,29 +389,16 @@ class EvalReport(BaseModel):
403
389
 
404
390
 
405
391
 
406
- stop_reason: Literal["canceled", "budget", "balance", "deadline", "mismatch", "refused", "queue_timeout",
392
+ stop_reason: Literal["canceled", "spend_cap", "balance", "deadline", "mismatch", "refused", "queue_timeout",
407
393
  "no_gpu_render"] | None = None
408
394
 
409
395
 
410
396
  arm_params: list[ArmParams] | None = None
411
397
 
412
398
 
413
- class AdapterKind(str, Enum):
414
- LOSSLESS = "lossless"
415
- LOSSY = "lossy"
416
399
 
400
+ units: dict[str, str] | None = None
417
401
 
418
402
 
419
403
 
420
-
421
-
422
-
423
- class AdapterTransform(BaseModel):
424
- """One adapter transform: its kind (lossless / lossy), the transform's name, and an optional reason. A registered
425
- adapter and an older eval report carry these fields; they are kept for compatibility and are no longer acted on."""
426
-
427
- model_config = ConfigDict(extra="forbid")
428
-
429
- kind: AdapterKind
430
- transform: str
431
- reason: str | None = None
404
+ success_metric: str | None = None
@@ -12,7 +12,6 @@ resolving to these same classes.
12
12
  """
13
13
  from __future__ import annotations
14
14
 
15
- import math
16
15
  from enum import Enum
17
16
  from typing import Any, Literal
18
17
 
@@ -38,12 +37,18 @@ class ImageFrame(BaseModel):
38
37
  default=None, description="rgb (the default) or depth: a 16-bit PNG of millimetres, 0 where there is no reading")
39
38
 
40
39
 
40
+
41
+
42
+
43
+
44
+
41
45
  class Proprioception(BaseModel):
42
- """Proprioceptive state. Only joint_positions is required; the rest is zero-padded per model."""
46
+ """Proprioceptive state. Every field is optional: a policy's observation contract (proprio) says which it reads,
47
+ and its worker requires those, each at its length."""
43
48
 
44
49
  model_config = ConfigDict(extra="forbid")
45
50
 
46
- joint_positions: list[float] = Field(..., description="Joint angles, in radians")
51
+ joint_positions: list[float] | None = Field(default=None, description="Joint angles, in radians")
47
52
  joint_velocities: list[float] | None = None
48
53
 
49
54
  end_effector_pose: list[float] | None = Field(default=None, min_length=7, max_length=7)
@@ -124,22 +129,8 @@ class ActionContract(BaseModel):
124
129
  bounds: list[tuple[float, float]] | None = Field(default=None, max_length=256)
125
130
  max_delta: float | list[float] | None = None
126
131
 
127
-
128
- on_violation: Literal["clip", "refuse"] | None = None
129
-
130
-
131
-
132
-
133
- binarize: dict[int, float] | None = Field(
134
- default=None, description="dimension -> threshold: the client gives the robot 1.0 above it, 0.0 otherwise")
135
-
136
132
  @model_validator(mode="after")
137
133
  def _limits_fit(self) -> "ActionContract":
138
- for d, threshold in (self.binarize or {}).items():
139
- if not 0 <= d < self.action_dim:
140
- raise ValueError(f"binarize names dimension {d}; action_dim is {self.action_dim}")
141
- if not math.isfinite(threshold):
142
- raise ValueError(f"binarize[{d}] is {threshold}, not a finite threshold")
143
134
  if self.bounds is not None:
144
135
  if len(self.bounds) != self.action_dim:
145
136
  raise ValueError(f"bounds has {len(self.bounds)} [low, high] pairs; action_dim is {self.action_dim}")
@@ -67,14 +67,12 @@ from sequence_base.contract.volumes import (
67
67
  VolumeUploadResponse,
68
68
  )
69
69
  from sequence_base.contract.eval import (
70
- AdapterTransform,
71
70
  ClampInfo,
72
71
  Estimate,
73
72
  EvalDryRunResponse,
74
73
  EvalReport,
75
74
  EvalRequest,
76
75
  EvalResponse,
77
- LossyTransform,
78
76
  MetricAgg,
79
77
  RolloutResult,
80
78
  TaskAgg,
@@ -168,9 +166,7 @@ WIRE_MODELS: dict[str, type[BaseModel]] = {
168
166
  "RolloutResult": RolloutResult,
169
167
  "TaskAgg": TaskAgg,
170
168
  "MetricAgg": MetricAgg,
171
- "LossyTransform": LossyTransform,
172
169
  "EvalReport": EvalReport,
173
- "AdapterTransform": AdapterTransform,
174
170
 
175
171
  "SecretRef": SecretRef,
176
172
  "SecretCreateRequest": SecretCreateRequest,
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "ActRequest",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.11"
82
+ "x-contract-version": "0.5.13"
83
83
  }
@@ -89,5 +89,5 @@
89
89
  ],
90
90
  "title": "ActResponse",
91
91
  "type": "object",
92
- "x-contract-version": "0.5.11"
92
+ "x-contract-version": "0.5.13"
93
93
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.11"
102
+ "x-contract-version": "0.5.13"
103
103
  }
@@ -23,22 +23,6 @@
23
23
  "action_space": {
24
24
  "$ref": "#/$defs/ActionSpace"
25
25
  },
26
- "binarize": {
27
- "anyOf": [
28
- {
29
- "additionalProperties": {
30
- "type": "number"
31
- },
32
- "type": "object"
33
- },
34
- {
35
- "type": "null"
36
- }
37
- ],
38
- "default": null,
39
- "description": "dimension -> threshold: the client gives the robot 1.0 above it, 0.0 otherwise",
40
- "title": "Binarize"
41
- },
42
26
  "bounds": {
43
27
  "anyOf": [
44
28
  {
@@ -87,22 +71,6 @@
87
71
  "default": null,
88
72
  "title": "Max Delta"
89
73
  },
90
- "on_violation": {
91
- "anyOf": [
92
- {
93
- "enum": [
94
- "clip",
95
- "refuse"
96
- ],
97
- "type": "string"
98
- },
99
- {
100
- "type": "null"
101
- }
102
- ],
103
- "default": null,
104
- "title": "On Violation"
105
- },
106
74
  "robot": {
107
75
  "title": "Robot",
108
76
  "type": "string"
@@ -116,5 +84,5 @@
116
84
  ],
117
85
  "title": "ActionContract",
118
86
  "type": "object",
119
- "x-contract-version": "0.5.11"
87
+ "x-contract-version": "0.5.13"
120
88
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.5.11"
22
+ "x-contract-version": "0.5.13"
23
23
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.11"
26
+ "x-contract-version": "0.5.13"
27
27
  }
@@ -69,5 +69,5 @@
69
69
  },
70
70
  "title": "Autoscaler",
71
71
  "type": "object",
72
- "x-contract-version": "0.5.11"
72
+ "x-contract-version": "0.5.13"
73
73
  }
@@ -50,5 +50,5 @@
50
50
  ],
51
51
  "title": "BenchmarkConditionSpec",
52
52
  "type": "object",
53
- "x-contract-version": "0.5.11"
53
+ "x-contract-version": "0.5.13"
54
54
  }
@@ -11,22 +11,6 @@
11
11
  "action_space": {
12
12
  "$ref": "#/$defs/ActionSpace"
13
13
  },
14
- "binarize": {
15
- "anyOf": [
16
- {
17
- "additionalProperties": {
18
- "type": "number"
19
- },
20
- "type": "object"
21
- },
22
- {
23
- "type": "null"
24
- }
25
- ],
26
- "default": null,
27
- "description": "dimension -> threshold: the client gives the robot 1.0 above it, 0.0 otherwise",
28
- "title": "Binarize"
29
- },
30
14
  "bounds": {
31
15
  "anyOf": [
32
16
  {
@@ -75,22 +59,6 @@
75
59
  "default": null,
76
60
  "title": "Max Delta"
77
61
  },
78
- "on_violation": {
79
- "anyOf": [
80
- {
81
- "enum": [
82
- "clip",
83
- "refuse"
84
- ],
85
- "type": "string"
86
- },
87
- {
88
- "type": "null"
89
- }
90
- ],
91
- "default": null,
92
- "title": "On Violation"
93
- },
94
62
  "robot": {
95
63
  "title": "Robot",
96
64
  "type": "string"
@@ -876,6 +844,14 @@
876
844
  "default": null,
877
845
  "title": "Memory Gb"
878
846
  },
847
+ "metric_units": {
848
+ "additionalProperties": {
849
+ "type": "string"
850
+ },
851
+ "maxProperties": 64,
852
+ "title": "Metric Units",
853
+ "type": "object"
854
+ },
879
855
  "name": {
880
856
  "title": "Name",
881
857
  "type": "string"
@@ -942,6 +918,20 @@
942
918
  "default": null,
943
919
  "title": "Seeds Repeat"
944
920
  },
921
+ "success_metric": {
922
+ "anyOf": [
923
+ {
924
+ "maxLength": 200,
925
+ "minLength": 1,
926
+ "type": "string"
927
+ },
928
+ {
929
+ "type": "null"
930
+ }
931
+ ],
932
+ "default": null,
933
+ "title": "Success Metric"
934
+ },
945
935
  "task_descriptions": {
946
936
  "additionalProperties": {
947
937
  "type": "string"
@@ -972,5 +962,5 @@
972
962
  ],
973
963
  "title": "BenchmarkRegisterRequest",
974
964
  "type": "object",
975
- "x-contract-version": "0.5.11"
965
+ "x-contract-version": "0.5.13"
976
966
  }
@@ -368,7 +368,7 @@
368
368
  ],
369
369
  "title": "SeqFlags",
370
370
  "type": "integer",
371
- "x-contract-version": "0.5.11",
371
+ "x-contract-version": "0.5.13",
372
372
  "x-flag-names": {
373
373
  "CHECK": 65536,
374
374
  "INFER": 16,
@@ -625,5 +625,5 @@
625
625
  ],
626
626
  "title": "BenchmarkSpec",
627
627
  "type": "object",
628
- "x-contract-version": "0.5.11"
628
+ "x-contract-version": "0.5.13"
629
629
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.11"
43
+ "x-contract-version": "0.5.13"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.11"
82
+ "x-contract-version": "0.5.13"
83
83
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "Camera",
74
74
  "type": "object",
75
- "x-contract-version": "0.5.11"
75
+ "x-contract-version": "0.5.13"
76
76
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.11"
26
+ "x-contract-version": "0.5.13"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.11"
26
+ "x-contract-version": "0.5.13"
27
27
  }
@@ -96,5 +96,5 @@
96
96
  },
97
97
  "title": "Concurrency",
98
98
  "type": "object",
99
- "x-contract-version": "0.5.11"
99
+ "x-contract-version": "0.5.13"
100
100
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.11"
58
+ "x-contract-version": "0.5.13"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.11"
28
+ "x-contract-version": "0.5.13"
29
29
  }