sequence-base 0.4.4__tar.gz → 0.4.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. {sequence_base-0.4.4 → sequence_base-0.4.5}/PKG-INFO +1 -1
  2. {sequence_base-0.4.4 → sequence_base-0.4.5}/pyproject.toml +1 -1
  3. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/constants/version.py +3 -1
  4. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/policy.py +23 -2
  5. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/wire.py +7 -0
  6. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ActRequest.json +15 -1
  7. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ActResponse.json +15 -1
  8. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ActionChunk.json +1 -1
  9. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ActionContract.json +1 -1
  10. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ActionStep.json +1 -1
  11. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/AdapterTransform.json +1 -1
  12. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/AddLocal.json +1 -1
  13. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Autoscaler.json +1 -1
  14. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  15. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/BenchmarkRegisterRequest.json +1 -1
  16. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  17. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  18. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/BootstrapResponse.json +1 -1
  19. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Camera.json +1 -1
  20. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ClampInfo.json +1 -1
  21. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/CodeBundle.json +1 -1
  22. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Concurrency.json +21 -2
  23. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Conditions.json +1 -1
  24. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ConnectRequest.json +1 -1
  25. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ConnectResponse.json +1 -1
  26. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  27. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/DeploymentPolicy.json +1 -1
  28. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/DeploymentRequest.json +21 -2
  29. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  30. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Embodiment.json +1 -1
  31. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ErrorBody.json +1 -1
  32. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ErrorCodes.json +1 -1
  33. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Estimate.json +1 -1
  34. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  35. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/EvalReport.json +1 -1
  36. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/EvalRequest.json +1 -1
  37. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/EvalResponse.json +1 -1
  38. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageFrame.json +1 -1
  39. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageSpec.json +1 -1
  40. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  41. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepApt.json +1 -1
  42. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepEnv.json +1 -1
  43. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepRun.json +1 -1
  44. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
  45. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  46. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/InferParam.json +1 -1
  47. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Lease.json +1 -1
  48. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/LossyTransform.json +1 -1
  49. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/MetricAgg.json +1 -1
  50. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Observation.json +1 -1
  51. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/ObservationContract.json +1 -1
  52. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/PolicyRegistration.json +22 -3
  53. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/PolicySpec.json +21 -2
  54. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Proprioception.json +1 -1
  55. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/RenderSpec.json +1 -1
  56. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Resources.json +1 -1
  57. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/RolloutResult.json +1 -1
  58. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  59. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/SecretInfo.json +1 -1
  60. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/SecretRef.json +1 -1
  61. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/SeqFlags.json +1 -1
  62. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Step.json +1 -1
  63. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/SuiteAgg.json +1 -1
  64. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/TaskAgg.json +1 -1
  65. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/TemplateFiles.json +1 -1
  66. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Timeouts.json +1 -1
  67. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/UploadTarget.json +1 -1
  68. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/Variant.json +1 -1
  69. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeAttach.json +1 -1
  70. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeFile.json +1 -1
  71. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeInfo.json +1 -1
  72. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeMount.json +1 -1
  73. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeRef.json +1 -1
  74. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  75. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  76. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schemas/WarmingError.json +1 -1
  77. {sequence_base-0.4.4 → sequence_base-0.4.5}/.gitignore +0 -0
  78. {sequence_base-0.4.4 → sequence_base-0.4.5}/README.md +0 -0
  79. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/__init__.py +0 -0
  80. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/auth.py +0 -0
  81. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/codec/__init__.py +0 -0
  82. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/codec/image.py +0 -0
  83. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/constants/__init__.py +0 -0
  84. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/constants/headers.py +0 -0
  85. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/__init__.py +0 -0
  86. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/accounts.py +0 -0
  87. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/act.py +0 -0
  88. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/benchmarks.py +0 -0
  89. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/connect.py +0 -0
  90. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/deployments.py +0 -0
  91. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/errors.py +0 -0
  92. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/eval.py +0 -0
  93. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/flags.py +0 -0
  94. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/io.py +0 -0
  95. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/templates.py +0 -0
  96. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/contract/volumes.py +0 -0
  97. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/errors/__init__.py +0 -0
  98. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/errors/transport.py +0 -0
  99. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/obs/__init__.py +0 -0
  100. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/obs/log.py +0 -0
  101. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/obs/rid.py +0 -0
  102. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/presets/__init__.py +0 -0
  103. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/presets/robot_arm.py +0 -0
  104. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/schema_export.py +0 -0
  105. {sequence_base-0.4.4 → sequence_base-0.4.5}/sequence_base/telemetry/__init__.py +0 -0
  106. {sequence_base-0.4.4 → sequence_base-0.4.5}/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.4
3
+ Version: 0.4.5
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.4"
3
+ version = "0.4.5"
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"]
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.5.3"
7
+ CONTRACT_VERSION = "0.5.5"
8
+
9
+
8
10
 
9
11
 
10
12
 
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
 
11
11
  import re
12
12
 
13
- from typing import Any, Literal
13
+ from typing import Literal
14
14
 
15
15
  from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
16
16
 
@@ -185,10 +185,27 @@ class Concurrency(BaseModel):
185
185
  its own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the
186
186
  worker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions
187
187
  a worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the
188
- slots."""
188
+ slots.
189
+
190
+ `max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the
191
+ most acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act
192
+ alone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,
193
+ planning when each sends - apart while each can be served alone, together only when they cannot; False seats
194
+ max_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something
195
+ only beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader
196
+ takes it for one robot a copy. The SDK takes `gpus_per_replica` and
197
+ `replica_start` in `@seq.policy(...)` from then on.
198
+
199
+
200
+ `max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's
201
+ request still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.
202
+
203
+ """
189
204
 
190
205
  model_config = ConfigDict(extra="forbid")
191
206
 
207
+ max_concurrent: int | None = Field(default=None, ge=2, le=256)
208
+ dynamic: bool = True
192
209
  max_inputs: int | None = Field(default=None, ge=1, le=1024)
193
210
  target_inputs: int | None = Field(default=None, ge=1, le=1024)
194
211
  replicas_per_gpu: int | None = Field(default=None, ge=1, le=64)
@@ -201,6 +218,10 @@ class Concurrency(BaseModel):
201
218
 
202
219
  @model_validator(mode="after")
203
220
  def _consistent(self) -> "Concurrency":
221
+
222
+
223
+ if self.dynamic is False and self.max_concurrent is None:
224
+ raise ValueError("dynamic=False seats max_concurrent robots a worker: it needs max_concurrent")
204
225
  if self.max_inputs is not None and self.target_inputs is not None and self.max_inputs < self.target_inputs:
205
226
  raise ValueError("max_inputs must be at least target_inputs")
206
227
  if (self.gpus_per_replica or 1) > 1 and (self.replicas_per_gpu or 1) > 1:
@@ -37,6 +37,10 @@ class ActRequest(BaseModel):
37
37
  description="Robot-arm preset only: which declared embodiment this session drives")
38
38
 
39
39
 
40
+ plan: dict[str, Any] | None = Field(default=None,
41
+ description="The robot's session, the steps it holds, its rate and network p95")
42
+
43
+
40
44
  class ActResponse(BaseModel):
41
45
  """200 from /act, version 2. `outputs` is infer()'s return value, unchanged; the rest is platform metadata."""
42
46
 
@@ -51,3 +55,6 @@ class ActResponse(BaseModel):
51
55
 
52
56
  action_chunk: dict[str, Any] | None = Field(default=None,
53
57
  description="Version-1 key for a robot-arm preset chunk (= outputs)")
58
+
59
+
60
+ plan: dict[str, Any] | None = Field(default=None, description="When to send the next act, and how this chunk plays")
@@ -46,6 +46,20 @@
46
46
  "description": "Values for the inference parameters the policy declares",
47
47
  "title": "Params"
48
48
  },
49
+ "plan": {
50
+ "anyOf": [
51
+ {
52
+ "additionalProperties": true,
53
+ "type": "object"
54
+ },
55
+ {
56
+ "type": "null"
57
+ }
58
+ ],
59
+ "default": null,
60
+ "description": "The robot's session, the steps it holds, its rate and network p95",
61
+ "title": "Plan"
62
+ },
49
63
  "seed": {
50
64
  "anyOf": [
51
65
  {
@@ -65,5 +79,5 @@
65
79
  ],
66
80
  "title": "ActRequest",
67
81
  "type": "object",
68
- "x-contract-version": "0.5.3"
82
+ "x-contract-version": "0.5.5"
69
83
  }
@@ -34,6 +34,20 @@
34
34
  "description": "Per-phase timings of this call",
35
35
  "title": "Perf"
36
36
  },
37
+ "plan": {
38
+ "anyOf": [
39
+ {
40
+ "additionalProperties": true,
41
+ "type": "object"
42
+ },
43
+ {
44
+ "type": "null"
45
+ }
46
+ ],
47
+ "default": null,
48
+ "description": "When to send the next act, and how this chunk plays",
49
+ "title": "Plan"
50
+ },
37
51
  "request_id": {
38
52
  "anyOf": [
39
53
  {
@@ -75,5 +89,5 @@
75
89
  ],
76
90
  "title": "ActResponse",
77
91
  "type": "object",
78
- "x-contract-version": "0.5.3"
92
+ "x-contract-version": "0.5.5"
79
93
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.3"
102
+ "x-contract-version": "0.5.5"
103
103
  }
@@ -116,5 +116,5 @@
116
116
  ],
117
117
  "title": "ActionContract",
118
118
  "type": "object",
119
- "x-contract-version": "0.5.3"
119
+ "x-contract-version": "0.5.5"
120
120
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.5.3"
22
+ "x-contract-version": "0.5.5"
23
23
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "AdapterTransform",
40
40
  "type": "object",
41
- "x-contract-version": "0.5.3"
41
+ "x-contract-version": "0.5.5"
42
42
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.3"
26
+ "x-contract-version": "0.5.5"
27
27
  }
@@ -69,5 +69,5 @@
69
69
  },
70
70
  "title": "Autoscaler",
71
71
  "type": "object",
72
- "x-contract-version": "0.5.3"
72
+ "x-contract-version": "0.5.5"
73
73
  }
@@ -62,5 +62,5 @@
62
62
  ],
63
63
  "title": "BenchmarkConditionSpec",
64
64
  "type": "object",
65
- "x-contract-version": "0.5.3"
65
+ "x-contract-version": "0.5.5"
66
66
  }
@@ -906,5 +906,5 @@
906
906
  ],
907
907
  "title": "BenchmarkRegisterRequest",
908
908
  "type": "object",
909
- "x-contract-version": "0.5.3"
909
+ "x-contract-version": "0.5.5"
910
910
  }
@@ -313,7 +313,7 @@
313
313
  ],
314
314
  "title": "SeqFlags",
315
315
  "type": "integer",
316
- "x-contract-version": "0.5.3",
316
+ "x-contract-version": "0.5.5",
317
317
  "x-flag-names": {
318
318
  "CHECK": 65536,
319
319
  "INFER": 16,
@@ -559,5 +559,5 @@
559
559
  ],
560
560
  "title": "BenchmarkSpec",
561
561
  "type": "object",
562
- "x-contract-version": "0.5.3"
562
+ "x-contract-version": "0.5.5"
563
563
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.3"
43
+ "x-contract-version": "0.5.5"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.3"
82
+ "x-contract-version": "0.5.5"
83
83
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "Camera",
74
74
  "type": "object",
75
- "x-contract-version": "0.5.3"
75
+ "x-contract-version": "0.5.5"
76
76
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "ClampInfo",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.3"
26
+ "x-contract-version": "0.5.5"
27
27
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.3"
26
+ "x-contract-version": "0.5.5"
27
27
  }
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "additionalProperties": false,
3
- "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.",
3
+ "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.\n\n`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the\nmost acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act\nalone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,\nplanning when each sends - apart while each can be served alone, together only when they cannot; False seats\nmax_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something\nonly beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader\ntakes it for one robot a copy. The SDK takes `gpus_per_replica` and\n`replica_start` in `@seq.policy(...)` from then on.\n\n\n`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's\nrequest still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.",
4
4
  "properties": {
5
+ "dynamic": {
6
+ "default": true,
7
+ "title": "Dynamic",
8
+ "type": "boolean"
9
+ },
5
10
  "gpus_per_replica": {
6
11
  "anyOf": [
7
12
  {
@@ -16,6 +21,20 @@
16
21
  "default": null,
17
22
  "title": "Gpus Per Replica"
18
23
  },
24
+ "max_concurrent": {
25
+ "anyOf": [
26
+ {
27
+ "maximum": 256,
28
+ "minimum": 2,
29
+ "type": "integer"
30
+ },
31
+ {
32
+ "type": "null"
33
+ }
34
+ ],
35
+ "default": null,
36
+ "title": "Max Concurrent"
37
+ },
19
38
  "max_inputs": {
20
39
  "anyOf": [
21
40
  {
@@ -77,5 +96,5 @@
77
96
  },
78
97
  "title": "Concurrency",
79
98
  "type": "object",
80
- "x-contract-version": "0.5.3"
99
+ "x-contract-version": "0.5.5"
81
100
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.3"
58
+ "x-contract-version": "0.5.5"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.3"
28
+ "x-contract-version": "0.5.5"
29
29
  }
@@ -342,5 +342,5 @@
342
342
  ],
343
343
  "title": "ConnectResponse",
344
344
  "type": "object",
345
- "x-contract-version": "0.5.3"
345
+ "x-contract-version": "0.5.5"
346
346
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.5.3"
21
+ "x-contract-version": "0.5.5"
22
22
  }
@@ -530,5 +530,5 @@
530
530
  ],
531
531
  "title": "DeploymentPolicy",
532
532
  "type": "object",
533
- "x-contract-version": "0.5.3"
533
+ "x-contract-version": "0.5.5"
534
534
  }
@@ -318,8 +318,13 @@
318
318
  },
319
319
  "Concurrency": {
320
320
  "additionalProperties": false,
321
- "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.",
321
+ "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.\n\n`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the\nmost acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act\nalone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,\nplanning when each sends - apart while each can be served alone, together only when they cannot; False seats\nmax_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something\nonly beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader\ntakes it for one robot a copy. The SDK takes `gpus_per_replica` and\n`replica_start` in `@seq.policy(...)` from then on.\n\n\n`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's\nrequest still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.",
322
322
  "properties": {
323
+ "dynamic": {
324
+ "default": true,
325
+ "title": "Dynamic",
326
+ "type": "boolean"
327
+ },
323
328
  "gpus_per_replica": {
324
329
  "anyOf": [
325
330
  {
@@ -334,6 +339,20 @@
334
339
  "default": null,
335
340
  "title": "Gpus Per Replica"
336
341
  },
342
+ "max_concurrent": {
343
+ "anyOf": [
344
+ {
345
+ "maximum": 256,
346
+ "minimum": 2,
347
+ "type": "integer"
348
+ },
349
+ {
350
+ "type": "null"
351
+ }
352
+ ],
353
+ "default": null,
354
+ "title": "Max Concurrent"
355
+ },
337
356
  "max_inputs": {
338
357
  "anyOf": [
339
358
  {
@@ -1205,5 +1224,5 @@
1205
1224
  ],
1206
1225
  "title": "DeploymentRequest",
1207
1226
  "type": "object",
1208
- "x-contract-version": "0.5.3"
1227
+ "x-contract-version": "0.5.5"
1209
1228
  }
@@ -58,5 +58,5 @@
58
58
  ],
59
59
  "title": "DeploymentStatusResponse",
60
60
  "type": "object",
61
- "x-contract-version": "0.5.3"
61
+ "x-contract-version": "0.5.5"
62
62
  }
@@ -267,5 +267,5 @@
267
267
  ],
268
268
  "title": "Embodiment",
269
269
  "type": "object",
270
- "x-contract-version": "0.5.3"
270
+ "x-contract-version": "0.5.5"
271
271
  }
@@ -94,5 +94,5 @@
94
94
  ],
95
95
  "title": "ErrorBody",
96
96
  "type": "object",
97
- "x-contract-version": "0.5.3"
97
+ "x-contract-version": "0.5.5"
98
98
  }
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "title": "ErrorCode",
24
24
  "type": "string",
25
- "x-contract-version": "0.5.3",
25
+ "x-contract-version": "0.5.5",
26
26
  "x-errors": {
27
27
  "budget_exhausted": {
28
28
  "exit_code": 6,
@@ -60,5 +60,5 @@
60
60
  ],
61
61
  "title": "Estimate",
62
62
  "type": "object",
63
- "x-contract-version": "0.5.3"
63
+ "x-contract-version": "0.5.5"
64
64
  }
@@ -240,5 +240,5 @@
240
240
  ],
241
241
  "title": "EvalDryRunResponse",
242
242
  "type": "object",
243
- "x-contract-version": "0.5.3"
243
+ "x-contract-version": "0.5.5"
244
244
  }
@@ -523,5 +523,5 @@
523
523
  ],
524
524
  "title": "EvalReport",
525
525
  "type": "object",
526
- "x-contract-version": "0.5.3"
526
+ "x-contract-version": "0.5.5"
527
527
  }
@@ -281,5 +281,5 @@
281
281
  ],
282
282
  "title": "EvalRequest",
283
283
  "type": "object",
284
- "x-contract-version": "0.5.3"
284
+ "x-contract-version": "0.5.5"
285
285
  }
@@ -190,5 +190,5 @@
190
190
  ],
191
191
  "title": "EvalResponse",
192
192
  "type": "object",
193
- "x-contract-version": "0.5.3"
193
+ "x-contract-version": "0.5.5"
194
194
  }
@@ -49,5 +49,5 @@
49
49
  ],
50
50
  "title": "ImageFrame",
51
51
  "type": "object",
52
- "x-contract-version": "0.5.3"
52
+ "x-contract-version": "0.5.5"
53
53
  }
@@ -245,5 +245,5 @@
245
245
  },
246
246
  "title": "ImageSpec",
247
247
  "type": "object",
248
- "x-contract-version": "0.5.3"
248
+ "x-contract-version": "0.5.5"
249
249
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "ImageStepAddLocal",
40
40
  "type": "object",
41
- "x-contract-version": "0.5.3"
41
+ "x-contract-version": "0.5.5"
42
42
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.3"
17
+ "x-contract-version": "0.5.5"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.3"
17
+ "x-contract-version": "0.5.5"
18
18
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "ImageStepRun",
48
48
  "type": "object",
49
- "x-contract-version": "0.5.3"
49
+ "x-contract-version": "0.5.5"
50
50
  }
@@ -37,5 +37,5 @@
37
37
  ],
38
38
  "title": "ImageStepTemplateFiles",
39
39
  "type": "object",
40
- "x-contract-version": "0.5.3"
40
+ "x-contract-version": "0.5.5"
41
41
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.3"
17
+ "x-contract-version": "0.5.5"
18
18
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "InferParam",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.3"
102
+ "x-contract-version": "0.5.5"
103
103
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "Lease",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.3"
27
+ "x-contract-version": "0.5.5"
28
28
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "LossyTransform",
19
19
  "type": "object",
20
- "x-contract-version": "0.5.3"
20
+ "x-contract-version": "0.5.5"
21
21
  }
@@ -83,5 +83,5 @@
83
83
  ],
84
84
  "title": "MetricAgg",
85
85
  "type": "object",
86
- "x-contract-version": "0.5.3"
86
+ "x-contract-version": "0.5.5"
87
87
  }
@@ -164,5 +164,5 @@
164
164
  ],
165
165
  "title": "Observation",
166
166
  "type": "object",
167
- "x-contract-version": "0.5.3"
167
+ "x-contract-version": "0.5.5"
168
168
  }
@@ -120,5 +120,5 @@
120
120
  },
121
121
  "title": "ObservationContract",
122
122
  "type": "object",
123
- "x-contract-version": "0.5.3"
123
+ "x-contract-version": "0.5.5"
124
124
  }
@@ -220,8 +220,13 @@
220
220
  },
221
221
  "Concurrency": {
222
222
  "additionalProperties": false,
223
- "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.",
223
+ "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.\n\n`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the\nmost acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act\nalone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,\nplanning when each sends - apart while each can be served alone, together only when they cannot; False seats\nmax_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something\nonly beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader\ntakes it for one robot a copy. The SDK takes `gpus_per_replica` and\n`replica_start` in `@seq.policy(...)` from then on.\n\n\n`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's\nrequest still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.",
224
224
  "properties": {
225
+ "dynamic": {
226
+ "default": true,
227
+ "title": "Dynamic",
228
+ "type": "boolean"
229
+ },
225
230
  "gpus_per_replica": {
226
231
  "anyOf": [
227
232
  {
@@ -236,6 +241,20 @@
236
241
  "default": null,
237
242
  "title": "Gpus Per Replica"
238
243
  },
244
+ "max_concurrent": {
245
+ "anyOf": [
246
+ {
247
+ "maximum": 256,
248
+ "minimum": 2,
249
+ "type": "integer"
250
+ },
251
+ {
252
+ "type": "null"
253
+ }
254
+ ],
255
+ "default": null,
256
+ "title": "Max Concurrent"
257
+ },
239
258
  "max_inputs": {
240
259
  "anyOf": [
241
260
  {
@@ -833,7 +852,7 @@
833
852
  ],
834
853
  "title": "SeqFlags",
835
854
  "type": "integer",
836
- "x-contract-version": "0.5.3",
855
+ "x-contract-version": "0.5.5",
837
856
  "x-flag-names": {
838
857
  "CHECK": 65536,
839
858
  "INFER": 16,
@@ -962,5 +981,5 @@
962
981
  ],
963
982
  "title": "PolicyRegistration",
964
983
  "type": "object",
965
- "x-contract-version": "0.5.3"
984
+ "x-contract-version": "0.5.5"
966
985
  }
@@ -220,8 +220,13 @@
220
220
  },
221
221
  "Concurrency": {
222
222
  "additionalProperties": false,
223
- "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.",
223
+ "description": "How one worker serves robots, every field optional. `replicas_per_gpu` model copies share each card (each copy is\nits own process and serves one control loop); `gpus_per_replica` cards make one copy (None: every card of the\nworker). A worker's slots = cards // gpus_per_replica × replicas_per_gpu. `target_inputs` is how many robot sessions\na worker holds before another starts, `max_inputs` the most it takes while a new one boots — both default to the\nslots.\n\n`max_concurrent` (contract 0.5.5) - from `@seq.concurrent(max_concurrent=N)` on the policy's infer method - is the\nmost acts one forward pass takes, the largest batch the policy is built for (None: one robot a copy, each act\nalone). With it, `dynamic` True has each worker measure its forwards and seat as many robots as it can serve on time,\nplanning when each sends - apart while each can be served alone, together only when they cannot; False seats\nmax_concurrent robots a worker and runs their acts together, so it needs max_concurrent. `dynamic` means something\nonly beside max_concurrent: an undeclared Concurrency() still carries its default (True) on the wire, and a reader\ntakes it for one robot a copy. The SDK takes `gpus_per_replica` and\n`replica_start` in `@seq.policy(...)` from then on.\n\n\n`max_inputs`, `target_inputs` and `replicas_per_gpu` are the old way's: kept so a stored spec and an older SDK's\nrequest still read, and refused on a new deploy by the platform; the SDK from contract 0.5.5 never sends them.",
224
224
  "properties": {
225
+ "dynamic": {
226
+ "default": true,
227
+ "title": "Dynamic",
228
+ "type": "boolean"
229
+ },
225
230
  "gpus_per_replica": {
226
231
  "anyOf": [
227
232
  {
@@ -236,6 +241,20 @@
236
241
  "default": null,
237
242
  "title": "Gpus Per Replica"
238
243
  },
244
+ "max_concurrent": {
245
+ "anyOf": [
246
+ {
247
+ "maximum": 256,
248
+ "minimum": 2,
249
+ "type": "integer"
250
+ },
251
+ {
252
+ "type": "null"
253
+ }
254
+ ],
255
+ "default": null,
256
+ "title": "Max Concurrent"
257
+ },
239
258
  "max_inputs": {
240
259
  "anyOf": [
241
260
  {
@@ -864,5 +883,5 @@
864
883
  ],
865
884
  "title": "PolicySpec",
866
885
  "type": "object",
867
- "x-contract-version": "0.5.3"
886
+ "x-contract-version": "0.5.5"
868
887
  }
@@ -63,5 +63,5 @@
63
63
  ],
64
64
  "title": "Proprioception",
65
65
  "type": "object",
66
- "x-contract-version": "0.5.3"
66
+ "x-contract-version": "0.5.5"
67
67
  }
@@ -36,5 +36,5 @@
36
36
  ],
37
37
  "title": "RenderSpec",
38
38
  "type": "object",
39
- "x-contract-version": "0.5.3"
39
+ "x-contract-version": "0.5.5"
40
40
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "Resources",
86
86
  "type": "object",
87
- "x-contract-version": "0.5.3"
87
+ "x-contract-version": "0.5.5"
88
88
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "RolloutResult",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.3"
58
+ "x-contract-version": "0.5.5"
59
59
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "SecretCreateRequest",
23
23
  "type": "object",
24
- "x-contract-version": "0.5.3"
24
+ "x-contract-version": "0.5.5"
25
25
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "SecretInfo",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.3"
43
+ "x-contract-version": "0.5.5"
44
44
  }
@@ -12,5 +12,5 @@
12
12
  ],
13
13
  "title": "SecretRef",
14
14
  "type": "object",
15
- "x-contract-version": "0.5.3"
15
+ "x-contract-version": "0.5.5"
16
16
  }
@@ -18,7 +18,7 @@
18
18
  ],
19
19
  "title": "SeqFlags",
20
20
  "type": "integer",
21
- "x-contract-version": "0.5.3",
21
+ "x-contract-version": "0.5.5",
22
22
  "x-flag-names": {
23
23
  "CHECK": 65536,
24
24
  "INFER": 16,
@@ -82,5 +82,5 @@
82
82
  ],
83
83
  "title": "Step",
84
84
  "type": "object",
85
- "x-contract-version": "0.5.3"
85
+ "x-contract-version": "0.5.5"
86
86
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "SuiteAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.3"
25
+ "x-contract-version": "0.5.5"
26
26
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TaskAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.3"
25
+ "x-contract-version": "0.5.5"
26
26
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TemplateFiles",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.3"
25
+ "x-contract-version": "0.5.5"
26
26
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Timeouts",
22
22
  "type": "object",
23
- "x-contract-version": "0.5.3"
23
+ "x-contract-version": "0.5.5"
24
24
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "UploadTarget",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.3"
27
+ "x-contract-version": "0.5.5"
28
28
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Variant",
22
22
  "type": "object",
23
- "x-contract-version": "0.5.3"
23
+ "x-contract-version": "0.5.5"
24
24
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "VolumeAttach",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.3"
25
+ "x-contract-version": "0.5.5"
26
26
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "VolumeFile",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.3"
28
+ "x-contract-version": "0.5.5"
29
29
  }
@@ -68,5 +68,5 @@
68
68
  ],
69
69
  "title": "VolumeInfo",
70
70
  "type": "object",
71
- "x-contract-version": "0.5.3"
71
+ "x-contract-version": "0.5.5"
72
72
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "VolumeMount",
19
19
  "type": "object",
20
- "x-contract-version": "0.5.3"
20
+ "x-contract-version": "0.5.5"
21
21
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "VolumeRef",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.3"
27
+ "x-contract-version": "0.5.5"
28
28
  }
@@ -56,5 +56,5 @@
56
56
  ],
57
57
  "title": "VolumeUploadRequest",
58
58
  "type": "object",
59
- "x-contract-version": "0.5.3"
59
+ "x-contract-version": "0.5.5"
60
60
  }
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "VolumeUploadResponse",
67
67
  "type": "object",
68
- "x-contract-version": "0.5.3"
68
+ "x-contract-version": "0.5.5"
69
69
  }
@@ -86,5 +86,5 @@
86
86
  ],
87
87
  "title": "WarmingError",
88
88
  "type": "object",
89
- "x-contract-version": "0.5.3"
89
+ "x-contract-version": "0.5.5"
90
90
  }
File without changes
File without changes