sequence-base 0.3.23__tar.gz → 0.3.24__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 (107) hide show
  1. {sequence_base-0.3.23 → sequence_base-0.3.24}/PKG-INFO +1 -1
  2. {sequence_base-0.3.23 → sequence_base-0.3.24}/pyproject.toml +1 -1
  3. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/constants/version.py +2 -1
  4. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/deployments.py +41 -1
  5. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ActRequest.json +1 -1
  6. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ActResponse.json +1 -1
  7. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ActionChunk.json +1 -1
  8. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ActionContract.json +1 -1
  9. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ActionStep.json +1 -1
  10. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/AdapterTransform.json +1 -1
  11. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/AddLocal.json +1 -1
  12. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Autoscaler.json +1 -1
  13. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  14. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/BenchmarkRegisterRequest.json +62 -2
  15. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  16. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  17. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/BootstrapResponse.json +1 -1
  18. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Camera.json +1 -1
  19. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ClampInfo.json +1 -1
  20. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/CodeBundle.json +1 -1
  21. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Concurrency.json +1 -1
  22. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Conditions.json +1 -1
  23. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ConnectRequest.json +1 -1
  24. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ConnectResponse.json +1 -1
  25. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  26. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/DeploymentPolicy.json +62 -2
  27. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/DeploymentRequest.json +62 -2
  28. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  29. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Embodiment.json +1 -1
  30. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ErrorBody.json +1 -1
  31. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ErrorCodes.json +1 -1
  32. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Estimate.json +1 -1
  33. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  34. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/EvalReport.json +1 -1
  35. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/EvalRequest.json +1 -1
  36. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/EvalResponse.json +1 -1
  37. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageFrame.json +1 -1
  38. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageSpec.json +1 -1
  39. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  40. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageStepApt.json +1 -1
  41. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageStepEnv.json +1 -1
  42. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageStepRun.json +1 -1
  43. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  44. sequence_base-0.3.24/sequence_base/schemas/InferParam.json +103 -0
  45. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Lease.json +1 -1
  46. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/LossyTransform.json +1 -1
  47. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/MetricAgg.json +1 -1
  48. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Observation.json +1 -1
  49. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/ObservationContract.json +1 -1
  50. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/PolicyRegistration.json +2 -2
  51. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/PolicySpec.json +1 -1
  52. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Proprioception.json +1 -1
  53. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/RenderSpec.json +1 -1
  54. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Resources.json +1 -1
  55. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/RolloutResult.json +1 -1
  56. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  57. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/SecretInfo.json +1 -1
  58. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/SecretRef.json +1 -1
  59. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/SeqFlags.json +1 -1
  60. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Step.json +1 -1
  61. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/SuiteAgg.json +1 -1
  62. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/TaskAgg.json +1 -1
  63. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Timeouts.json +1 -1
  64. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/UploadTarget.json +1 -1
  65. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/UsageReport.json +1 -1
  66. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/Variant.json +1 -1
  67. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeAttach.json +1 -1
  68. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeFile.json +1 -1
  69. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeInfo.json +1 -1
  70. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeMount.json +1 -1
  71. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeRef.json +1 -1
  72. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  73. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  74. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schemas/WarmingError.json +1 -1
  75. sequence_base-0.3.23/sequence_base/schemas/InferParam.json +0 -43
  76. {sequence_base-0.3.23 → sequence_base-0.3.24}/.gitignore +0 -0
  77. {sequence_base-0.3.23 → sequence_base-0.3.24}/README.md +0 -0
  78. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/__init__.py +0 -0
  79. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/auth.py +0 -0
  80. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/codec/__init__.py +0 -0
  81. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/codec/image.py +0 -0
  82. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/constants/__init__.py +0 -0
  83. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/constants/env.py +0 -0
  84. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/constants/headers.py +0 -0
  85. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/__init__.py +0 -0
  86. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/accounts.py +0 -0
  87. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/act.py +0 -0
  88. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/benchmarks.py +0 -0
  89. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/connect.py +0 -0
  90. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/errors.py +0 -0
  91. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/eval.py +0 -0
  92. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/flags.py +0 -0
  93. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/io.py +0 -0
  94. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/policy.py +0 -0
  95. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/templates.py +0 -0
  96. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/volumes.py +0 -0
  97. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/contract/wire.py +0 -0
  98. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/errors/__init__.py +0 -0
  99. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/errors/transport.py +0 -0
  100. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/obs/__init__.py +0 -0
  101. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/obs/log.py +0 -0
  102. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/obs/rid.py +0 -0
  103. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/presets/__init__.py +0 -0
  104. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/presets/robot_arm.py +0 -0
  105. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/schema_export.py +0 -0
  106. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/telemetry/__init__.py +0 -0
  107. {sequence_base-0.3.23 → sequence_base-0.3.24}/sequence_base/telemetry/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sequence-base
3
- Version: 0.3.23
3
+ Version: 0.3.24
4
4
  Summary: Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness.
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: pydantic>=2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.3.23"
3
+ version = "0.3.24"
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
  # 3.10, not 3.11: `seq` (which imports this) must run on ROS 2 Humble's Python 3.10, and nothing here needs 3.11.
6
6
  # {2026-10-03 the full suite on CPython 3.10.20: "147 PASSED"; vermin --eval-annotations: "MINIMUM REQUIRED VERSIONS: 3.9"}
@@ -4,7 +4,8 @@
4
4
  # across deployments / repos can tell which version of a shape it is validating against. MUST change
5
5
  # whenever any shared wire shape changes (a field added / removed / retyped) — that is what makes
6
6
  # contract evolution mechanically detectable instead of eyeballed. Bump on any shape change.
7
- CONTRACT_VERSION = "0.4.20" # 0.4.19 -> 0.4.20: BenchmarkRegisterRequest.params — the parameters a benchmark's @seq.setup declares (InferParam: type and default), which an eval may set; EvalReport.arm_params — per arm each parameter's value and source, and the steps that asked the policy of all it took (gs-plans eval-adapters/36)
7
+ CONTRACT_VERSION = "0.4.21" # 0.4.20 -> 0.4.21: InferParam.min / max / choices — the values an inference parameter allows (seq.Range / seq.OneOf), refused before inference outside them; None, left off the wire, as before (gs-plans deploy-serving/35)
8
+ # previous: 0.4.20 # 0.4.19 -> 0.4.20: BenchmarkRegisterRequest.params — the parameters a benchmark's @seq.setup declares (InferParam: type and default), which an eval may set; EvalReport.arm_params — per arm each parameter's value and source, and the steps that asked the policy of all it took (gs-plans eval-adapters/36)
8
9
  # previous: 0.4.19 # 0.4.18 -> 0.4.19: RenderSpec.flip — how the platform turns a recorded camera's frames before encoding ("vertical" / "horizontal" / "both"; None, left off the wire, as drawn), declared once by the benchmark's author (seq.Record(flip=...)); gs-plans benchmarks
9
10
  # previous: 0.4.18 # 0.4.17 -> 0.4.18: DeploymentPolicy.models — the platform models a policy calls while it runs (catalogue ids), which the act key driving it may call on /v1/chat and /v1/decide (gs-plans models-api/11)
10
11
  # previous: 0.4.17 # 0.4.16 -> 0.4.17: weights optional — PolicySpec.weights, DeploymentRequest.weights and BootstrapResponse.weights_uri may be None, for a policy without a checkpoint (nothing copied or mounted; gs-plans storage T13)
@@ -116,12 +116,52 @@ class VolumeAttach(BaseModel):
116
116
  class InferParam(BaseModel):
117
117
  """One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`
118
118
  — with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to
119
- this type, and refuses any other. {gs-plans/customization/policy.md "四、推理行为"}"""
119
+ this type, and refuses any other. {gs-plans/customization/policy.md "四、推理行为"}
120
+
121
+ `min` / `max` (a number's bounds, inclusive) and `choices` (the values it may take) — declared as
122
+ `Annotated[int, seq.Range(1, 10)]` / `seq.OneOf(...)` — refuse any other value before inference, saying which are
123
+ allowed; None (left off the wire) holds it to its type alone. {gs-plans/deploy-serving/35 "允许声明范围或可选值"}"""
120
124
 
121
125
  model_config = ConfigDict(extra="forbid")
122
126
 
123
127
  type: Literal["int", "float", "bool", "str"]
124
128
  default: int | float | bool | str | None = None
129
+ min: int | float | None = None
130
+ max: int | float | None = None
131
+ choices: list[int | float | bool | str] | None = Field(default=None, min_length=1, max_length=64)
132
+
133
+ @model_validator(mode="after")
134
+ def _bounds_fit(self) -> "InferParam":
135
+ numeric = self.type in ("int", "float")
136
+ if (self.min is not None or self.max is not None) and not numeric:
137
+ raise ValueError(f"min / max bound a number; a {self.type} parameter takes choices instead")
138
+ if self.min is not None and self.max is not None and self.min > self.max:
139
+ raise ValueError(f"min {self.min} is above max {self.max}")
140
+ if self.default is not None and not allowed(self, self.default):
141
+ raise ValueError(f"the default {self.default!r} is outside what the parameter allows ({describe(self)})")
142
+ return self
143
+
144
+
145
+ def allowed(param: "InferParam", value) -> bool:
146
+ """Whether a value (already cast to the parameter's type) is one the parameter allows."""
147
+ if param.choices is not None and value not in param.choices:
148
+ return False
149
+ if param.min is not None and value < param.min:
150
+ return False
151
+ return not (param.max is not None and value > param.max)
152
+
153
+
154
+ def describe(param: "InferParam") -> str:
155
+ """What a parameter allows, in words: "one of 5, 10", "from 1 to 10", "at least 1", "at most 10"."""
156
+ if param.choices is not None:
157
+ return "one of " + ", ".join(repr(c) for c in param.choices)
158
+ if param.min is not None and param.max is not None:
159
+ return f"from {param.min} to {param.max}"
160
+ if param.min is not None:
161
+ return f"at least {param.min}"
162
+ if param.max is not None:
163
+ return f"at most {param.max}"
164
+ return f"any {param.type}"
125
165
 
126
166
 
127
167
  class DeploymentPolicy(BaseModel):
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "ActRequest",
67
67
  "type": "object",
68
- "x-contract-version": "0.4.20"
68
+ "x-contract-version": "0.4.21"
69
69
  }
@@ -75,5 +75,5 @@
75
75
  ],
76
76
  "title": "ActResponse",
77
77
  "type": "object",
78
- "x-contract-version": "0.4.20"
78
+ "x-contract-version": "0.4.21"
79
79
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.4.20"
102
+ "x-contract-version": "0.4.21"
103
103
  }
@@ -100,5 +100,5 @@
100
100
  ],
101
101
  "title": "ActionContract",
102
102
  "type": "object",
103
- "x-contract-version": "0.4.20"
103
+ "x-contract-version": "0.4.21"
104
104
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.4.20"
22
+ "x-contract-version": "0.4.21"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.20"
41
+ "x-contract-version": "0.4.21"
42
42
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.20"
26
+ "x-contract-version": "0.4.21"
27
27
  }
@@ -69,5 +69,5 @@
69
69
  },
70
70
  "title": "Autoscaler",
71
71
  "type": "object",
72
- "x-contract-version": "0.4.20"
72
+ "x-contract-version": "0.4.21"
73
73
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.4.20"
65
+ "x-contract-version": "0.4.21"
66
66
  }
@@ -417,8 +417,38 @@
417
417
  },
418
418
  "InferParam": {
419
419
  "additionalProperties": false,
420
- "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}",
420
+ "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}\n\n`min` / `max` (a number's bounds, inclusive) and `choices` (the values it may take) — declared as\n`Annotated[int, seq.Range(1, 10)]` / `seq.OneOf(...)` — refuse any other value before inference, saying which are\nallowed; None (left off the wire) holds it to its type alone. {gs-plans/deploy-serving/35 \"允许声明范围或可选值\"}",
421
421
  "properties": {
422
+ "choices": {
423
+ "anyOf": [
424
+ {
425
+ "items": {
426
+ "anyOf": [
427
+ {
428
+ "type": "integer"
429
+ },
430
+ {
431
+ "type": "number"
432
+ },
433
+ {
434
+ "type": "boolean"
435
+ },
436
+ {
437
+ "type": "string"
438
+ }
439
+ ]
440
+ },
441
+ "maxItems": 64,
442
+ "minItems": 1,
443
+ "type": "array"
444
+ },
445
+ {
446
+ "type": "null"
447
+ }
448
+ ],
449
+ "default": null,
450
+ "title": "Choices"
451
+ },
422
452
  "default": {
423
453
  "anyOf": [
424
454
  {
@@ -440,6 +470,36 @@
440
470
  "default": null,
441
471
  "title": "Default"
442
472
  },
473
+ "max": {
474
+ "anyOf": [
475
+ {
476
+ "type": "integer"
477
+ },
478
+ {
479
+ "type": "number"
480
+ },
481
+ {
482
+ "type": "null"
483
+ }
484
+ ],
485
+ "default": null,
486
+ "title": "Max"
487
+ },
488
+ "min": {
489
+ "anyOf": [
490
+ {
491
+ "type": "integer"
492
+ },
493
+ {
494
+ "type": "number"
495
+ },
496
+ {
497
+ "type": "null"
498
+ }
499
+ ],
500
+ "default": null,
501
+ "title": "Min"
502
+ },
443
503
  "type": {
444
504
  "enum": [
445
505
  "int",
@@ -776,5 +836,5 @@
776
836
  ],
777
837
  "title": "BenchmarkRegisterRequest",
778
838
  "type": "object",
779
- "x-contract-version": "0.4.20"
839
+ "x-contract-version": "0.4.21"
780
840
  }
@@ -297,7 +297,7 @@
297
297
  ],
298
298
  "title": "SeqFlags",
299
299
  "type": "integer",
300
- "x-contract-version": "0.4.20",
300
+ "x-contract-version": "0.4.21",
301
301
  "x-flag-names": {
302
302
  "CHECK": 65536,
303
303
  "INFER": 16,
@@ -505,5 +505,5 @@
505
505
  ],
506
506
  "title": "BenchmarkSpec",
507
507
  "type": "object",
508
- "x-contract-version": "0.4.20"
508
+ "x-contract-version": "0.4.21"
509
509
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.4.20"
43
+ "x-contract-version": "0.4.21"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.4.20"
82
+ "x-contract-version": "0.4.21"
83
83
  }
@@ -34,5 +34,5 @@
34
34
  ],
35
35
  "title": "Camera",
36
36
  "type": "object",
37
- "x-contract-version": "0.4.20"
37
+ "x-contract-version": "0.4.21"
38
38
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.20"
26
+ "x-contract-version": "0.4.21"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.4.20"
26
+ "x-contract-version": "0.4.21"
27
27
  }
@@ -61,5 +61,5 @@
61
61
  },
62
62
  "title": "Concurrency",
63
63
  "type": "object",
64
- "x-contract-version": "0.4.20"
64
+ "x-contract-version": "0.4.21"
65
65
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.4.20"
58
+ "x-contract-version": "0.4.21"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.4.20"
28
+ "x-contract-version": "0.4.21"
29
29
  }
@@ -307,5 +307,5 @@
307
307
  ],
308
308
  "title": "ConnectResponse",
309
309
  "type": "object",
310
- "x-contract-version": "0.4.20"
310
+ "x-contract-version": "0.4.21"
311
311
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.4.20"
21
+ "x-contract-version": "0.4.21"
22
22
  }
@@ -170,8 +170,38 @@
170
170
  },
171
171
  "InferParam": {
172
172
  "additionalProperties": false,
173
- "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}",
173
+ "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}\n\n`min` / `max` (a number's bounds, inclusive) and `choices` (the values it may take) — declared as\n`Annotated[int, seq.Range(1, 10)]` / `seq.OneOf(...)` — refuse any other value before inference, saying which are\nallowed; None (left off the wire) holds it to its type alone. {gs-plans/deploy-serving/35 \"允许声明范围或可选值\"}",
174
174
  "properties": {
175
+ "choices": {
176
+ "anyOf": [
177
+ {
178
+ "items": {
179
+ "anyOf": [
180
+ {
181
+ "type": "integer"
182
+ },
183
+ {
184
+ "type": "number"
185
+ },
186
+ {
187
+ "type": "boolean"
188
+ },
189
+ {
190
+ "type": "string"
191
+ }
192
+ ]
193
+ },
194
+ "maxItems": 64,
195
+ "minItems": 1,
196
+ "type": "array"
197
+ },
198
+ {
199
+ "type": "null"
200
+ }
201
+ ],
202
+ "default": null,
203
+ "title": "Choices"
204
+ },
175
205
  "default": {
176
206
  "anyOf": [
177
207
  {
@@ -193,6 +223,36 @@
193
223
  "default": null,
194
224
  "title": "Default"
195
225
  },
226
+ "max": {
227
+ "anyOf": [
228
+ {
229
+ "type": "integer"
230
+ },
231
+ {
232
+ "type": "number"
233
+ },
234
+ {
235
+ "type": "null"
236
+ }
237
+ ],
238
+ "default": null,
239
+ "title": "Max"
240
+ },
241
+ "min": {
242
+ "anyOf": [
243
+ {
244
+ "type": "integer"
245
+ },
246
+ {
247
+ "type": "number"
248
+ },
249
+ {
250
+ "type": "null"
251
+ }
252
+ ],
253
+ "default": null,
254
+ "title": "Min"
255
+ },
196
256
  "type": {
197
257
  "enum": [
198
258
  "int",
@@ -403,5 +463,5 @@
403
463
  ],
404
464
  "title": "DeploymentPolicy",
405
465
  "type": "object",
406
- "x-contract-version": "0.4.20"
466
+ "x-contract-version": "0.4.21"
407
467
  }
@@ -655,8 +655,38 @@
655
655
  },
656
656
  "InferParam": {
657
657
  "additionalProperties": false,
658
- "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}",
658
+ "description": "One inference parameter the policy's `@seq.infer` declares — `def infer(self, obs, *, num_steps: int = 10)`\n— with its type and default. An /act or an eval may set it; the worker passes only declared names, cast to\nthis type, and refuses any other. {gs-plans/customization/policy.md \"四、推理行为\"}\n\n`min` / `max` (a number's bounds, inclusive) and `choices` (the values it may take) — declared as\n`Annotated[int, seq.Range(1, 10)]` / `seq.OneOf(...)` — refuse any other value before inference, saying which are\nallowed; None (left off the wire) holds it to its type alone. {gs-plans/deploy-serving/35 \"允许声明范围或可选值\"}",
659
659
  "properties": {
660
+ "choices": {
661
+ "anyOf": [
662
+ {
663
+ "items": {
664
+ "anyOf": [
665
+ {
666
+ "type": "integer"
667
+ },
668
+ {
669
+ "type": "number"
670
+ },
671
+ {
672
+ "type": "boolean"
673
+ },
674
+ {
675
+ "type": "string"
676
+ }
677
+ ]
678
+ },
679
+ "maxItems": 64,
680
+ "minItems": 1,
681
+ "type": "array"
682
+ },
683
+ {
684
+ "type": "null"
685
+ }
686
+ ],
687
+ "default": null,
688
+ "title": "Choices"
689
+ },
660
690
  "default": {
661
691
  "anyOf": [
662
692
  {
@@ -678,6 +708,36 @@
678
708
  "default": null,
679
709
  "title": "Default"
680
710
  },
711
+ "max": {
712
+ "anyOf": [
713
+ {
714
+ "type": "integer"
715
+ },
716
+ {
717
+ "type": "number"
718
+ },
719
+ {
720
+ "type": "null"
721
+ }
722
+ ],
723
+ "default": null,
724
+ "title": "Max"
725
+ },
726
+ "min": {
727
+ "anyOf": [
728
+ {
729
+ "type": "integer"
730
+ },
731
+ {
732
+ "type": "number"
733
+ },
734
+ {
735
+ "type": "null"
736
+ }
737
+ ],
738
+ "default": null,
739
+ "title": "Min"
740
+ },
681
741
  "type": {
682
742
  "enum": [
683
743
  "int",
@@ -1017,5 +1077,5 @@
1017
1077
  ],
1018
1078
  "title": "DeploymentRequest",
1019
1079
  "type": "object",
1020
- "x-contract-version": "0.4.20"
1080
+ "x-contract-version": "0.4.21"
1021
1081
  }
@@ -58,5 +58,5 @@
58
58
  ],
59
59
  "title": "DeploymentStatusResponse",
60
60
  "type": "object",
61
- "x-contract-version": "0.4.20"
61
+ "x-contract-version": "0.4.21"
62
62
  }
@@ -213,5 +213,5 @@
213
213
  ],
214
214
  "title": "Embodiment",
215
215
  "type": "object",
216
- "x-contract-version": "0.4.20"
216
+ "x-contract-version": "0.4.21"
217
217
  }
@@ -94,5 +94,5 @@
94
94
  ],
95
95
  "title": "ErrorBody",
96
96
  "type": "object",
97
- "x-contract-version": "0.4.20"
97
+ "x-contract-version": "0.4.21"
98
98
  }
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "title": "ErrorCode",
24
24
  "type": "string",
25
- "x-contract-version": "0.4.20",
25
+ "x-contract-version": "0.4.21",
26
26
  "x-errors": {
27
27
  "budget_exhausted": {
28
28
  "exit_code": 6,
@@ -48,5 +48,5 @@
48
48
  ],
49
49
  "title": "Estimate",
50
50
  "type": "object",
51
- "x-contract-version": "0.4.20"
51
+ "x-contract-version": "0.4.21"
52
52
  }
@@ -228,5 +228,5 @@
228
228
  ],
229
229
  "title": "EvalDryRunResponse",
230
230
  "type": "object",
231
- "x-contract-version": "0.4.20"
231
+ "x-contract-version": "0.4.21"
232
232
  }
@@ -522,5 +522,5 @@
522
522
  ],
523
523
  "title": "EvalReport",
524
524
  "type": "object",
525
- "x-contract-version": "0.4.20"
525
+ "x-contract-version": "0.4.21"
526
526
  }
@@ -281,5 +281,5 @@
281
281
  ],
282
282
  "title": "EvalRequest",
283
283
  "type": "object",
284
- "x-contract-version": "0.4.20"
284
+ "x-contract-version": "0.4.21"
285
285
  }
@@ -178,5 +178,5 @@
178
178
  ],
179
179
  "title": "EvalResponse",
180
180
  "type": "object",
181
- "x-contract-version": "0.4.20"
181
+ "x-contract-version": "0.4.21"
182
182
  }
@@ -49,5 +49,5 @@
49
49
  ],
50
50
  "title": "ImageFrame",
51
51
  "type": "object",
52
- "x-contract-version": "0.4.20"
52
+ "x-contract-version": "0.4.21"
53
53
  }
@@ -204,5 +204,5 @@
204
204
  },
205
205
  "title": "ImageSpec",
206
206
  "type": "object",
207
- "x-contract-version": "0.4.20"
207
+ "x-contract-version": "0.4.21"
208
208
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "ImageStepAddLocal",
40
40
  "type": "object",
41
- "x-contract-version": "0.4.20"
41
+ "x-contract-version": "0.4.21"
42
42
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.20"
17
+ "x-contract-version": "0.4.21"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.20"
17
+ "x-contract-version": "0.4.21"
18
18
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "ImageStepRun",
48
48
  "type": "object",
49
- "x-contract-version": "0.4.20"
49
+ "x-contract-version": "0.4.21"
50
50
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.4.20"
17
+ "x-contract-version": "0.4.21"
18
18
  }