dreamscale 0.1.0a24__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.
- dreamscale-0.1.0a24/.gitignore +98 -0
- dreamscale-0.1.0a24/CHANGELOG.md +355 -0
- dreamscale-0.1.0a24/LICENSE +176 -0
- dreamscale-0.1.0a24/PKG-INFO +576 -0
- dreamscale-0.1.0a24/README.md +522 -0
- dreamscale-0.1.0a24/dreamscale/__init__.py +77 -0
- dreamscale-0.1.0a24/dreamscale/arm.py +431 -0
- dreamscale-0.1.0a24/dreamscale/assets/__init__.py +0 -0
- dreamscale-0.1.0a24/dreamscale/assets/camera_reference.jpg +0 -0
- dreamscale-0.1.0a24/dreamscale/assets/camera_reference.svg +82 -0
- dreamscale-0.1.0a24/dreamscale/bench.py +236 -0
- dreamscale-0.1.0a24/dreamscale/calibrate.py +52 -0
- dreamscale-0.1.0a24/dreamscale/cli.py +423 -0
- dreamscale-0.1.0a24/dreamscale/config.py +165 -0
- dreamscale-0.1.0a24/dreamscale/constants.py +95 -0
- dreamscale-0.1.0a24/dreamscale/control.py +359 -0
- dreamscale-0.1.0a24/dreamscale/demo.py +66 -0
- dreamscale-0.1.0a24/dreamscale/doctor.py +405 -0
- dreamscale-0.1.0a24/dreamscale/dreamzero.py +739 -0
- dreamscale-0.1.0a24/dreamscale/dreamzero_yam.py +175 -0
- dreamscale-0.1.0a24/dreamscale/errors.py +352 -0
- dreamscale-0.1.0a24/dreamscale/examples/__init__.py +1 -0
- dreamscale-0.1.0a24/dreamscale/examples/yam_custom.py +203 -0
- dreamscale-0.1.0a24/dreamscale/examples/yam_trace.py +87 -0
- dreamscale-0.1.0a24/dreamscale/franka.py +110 -0
- dreamscale-0.1.0a24/dreamscale/guides/sourccey.md +38 -0
- dreamscale-0.1.0a24/dreamscale/guides/yam-async.md +176 -0
- dreamscale-0.1.0a24/dreamscale/guides/yam.md +199 -0
- dreamscale-0.1.0a24/dreamscale/hardware/__init__.py +0 -0
- dreamscale-0.1.0a24/dreamscale/hardware/camera_sources.py +582 -0
- dreamscale-0.1.0a24/dreamscale/hardware/cameras.py +41 -0
- dreamscale-0.1.0a24/dreamscale/hardware/fake.py +64 -0
- dreamscale-0.1.0a24/dreamscale/hardware/lerobot_so101.py +122 -0
- dreamscale-0.1.0a24/dreamscale/hardware/ports.py +39 -0
- dreamscale-0.1.0a24/dreamscale/hardware/protocols.py +28 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam-native-constraints.txt +7 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_can.py +132 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_cli_setup.py +318 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_config.py +114 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_doctor.py +179 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_native.py +290 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_rig.py +245 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_runner.py +430 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_setup.html +73 -0
- dreamscale-0.1.0a24/dreamscale/hardware/yam_setup.py +272 -0
- dreamscale-0.1.0a24/dreamscale/inference.py +494 -0
- dreamscale-0.1.0a24/dreamscale/libero.py +67 -0
- dreamscale-0.1.0a24/dreamscale/motion/__init__.py +0 -0
- dreamscale-0.1.0a24/dreamscale/motion/ensemble.py +91 -0
- dreamscale-0.1.0a24/dreamscale/motion/loop.py +258 -0
- dreamscale-0.1.0a24/dreamscale/motion/safety.py +112 -0
- dreamscale-0.1.0a24/dreamscale/optional.py +15 -0
- dreamscale-0.1.0a24/dreamscale/policy/__init__.py +74 -0
- dreamscale-0.1.0a24/dreamscale/policy/config.py +176 -0
- dreamscale-0.1.0a24/dreamscale/policy/dreamzero_runtime.py +601 -0
- dreamscale-0.1.0a24/dreamscale/policy/lifecycle.py +654 -0
- dreamscale-0.1.0a24/dreamscale/policy/remote.py +1657 -0
- dreamscale-0.1.0a24/dreamscale/policy/run_loop.py +1622 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/__init__.py +1 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/action_buffer.py +441 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/action_smoothing.py +265 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/adaptive_smoothing.py +168 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/calibration.py +489 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/contract.py +279 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/control.py +387 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/result.py +157 -0
- dreamscale-0.1.0a24/dreamscale/policy/runtime/rtc.py +774 -0
- dreamscale-0.1.0a24/dreamscale/policy/telemetry.py +71 -0
- dreamscale-0.1.0a24/dreamscale/policy/types.py +423 -0
- dreamscale-0.1.0a24/dreamscale/quickstart.py +483 -0
- dreamscale-0.1.0a24/dreamscale/region_probe.py +400 -0
- dreamscale-0.1.0a24/dreamscale/sessions.py +284 -0
- dreamscale-0.1.0a24/dreamscale/sessions_cmd.py +130 -0
- dreamscale-0.1.0a24/dreamscale/sim/__init__.py +0 -0
- dreamscale-0.1.0a24/dreamscale/sim/artifacts.py +88 -0
- dreamscale-0.1.0a24/dreamscale/sim/metrics.py +336 -0
- dreamscale-0.1.0a24/dreamscale/sim/runtime.py +401 -0
- dreamscale-0.1.0a24/dreamscale/sim/sim_arm.py +1392 -0
- dreamscale-0.1.0a24/dreamscale/sim/timing.py +100 -0
- dreamscale-0.1.0a24/dreamscale/so101.py +79 -0
- dreamscale-0.1.0a24/dreamscale/sourccey.py +116 -0
- dreamscale-0.1.0a24/dreamscale/state.py +120 -0
- dreamscale-0.1.0a24/dreamscale/status.py +208 -0
- dreamscale-0.1.0a24/dreamscale/terminal.py +440 -0
- dreamscale-0.1.0a24/dreamscale/trace.py +456 -0
- dreamscale-0.1.0a24/dreamscale/trace_views.py +114 -0
- dreamscale-0.1.0a24/dreamscale/transport_selection.py +141 -0
- dreamscale-0.1.0a24/dreamscale/wire.py +499 -0
- dreamscale-0.1.0a24/dreamscale/yam.py +170 -0
- dreamscale-0.1.0a24/examples/dreamzero_droid.py +40 -0
- dreamscale-0.1.0a24/examples/dreamzero_yam.py +47 -0
- dreamscale-0.1.0a24/examples/franka_inference.py +27 -0
- dreamscale-0.1.0a24/examples/libero_http.py +166 -0
- dreamscale-0.1.0a24/examples/libero_rollout.py +51 -0
- dreamscale-0.1.0a24/examples/yam_inference.py +31 -0
- dreamscale-0.1.0a24/pyproject.toml +134 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# macOS
|
|
2
|
+
.DS_Store
|
|
3
|
+
|
|
4
|
+
# Python
|
|
5
|
+
__pycache__/
|
|
6
|
+
*.py[cod]
|
|
7
|
+
.pytest_cache/
|
|
8
|
+
.mypy_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
.coverage
|
|
11
|
+
htmlcov/
|
|
12
|
+
|
|
13
|
+
# Local caches (e.g. lerobot dataset + smoke-test artifacts)
|
|
14
|
+
.cache/
|
|
15
|
+
|
|
16
|
+
# Virtual environments
|
|
17
|
+
.venv/
|
|
18
|
+
venv/
|
|
19
|
+
|
|
20
|
+
# Build and packaging output
|
|
21
|
+
build/
|
|
22
|
+
dist/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
|
|
25
|
+
# Local environment files
|
|
26
|
+
.env
|
|
27
|
+
.env.*
|
|
28
|
+
!.env.example
|
|
29
|
+
|
|
30
|
+
# Logs
|
|
31
|
+
*.log
|
|
32
|
+
|
|
33
|
+
# Experiment note assets and generated analysis payloads
|
|
34
|
+
sandbox/experiments/*/notes/assets/
|
|
35
|
+
|
|
36
|
+
# Local scratch/checkouts
|
|
37
|
+
tmp/
|
|
38
|
+
.worktrees/
|
|
39
|
+
.codex/*
|
|
40
|
+
!.codex/skills/
|
|
41
|
+
!.codex/skills/**
|
|
42
|
+
|
|
43
|
+
# Root cleanup holding area for generated/non-product artifacts moved out of
|
|
44
|
+
# the repository root.
|
|
45
|
+
sandbox/.root-artifacts/
|
|
46
|
+
|
|
47
|
+
# Phase 0 traces and generated infra state (now under sandbox/)
|
|
48
|
+
sandbox/traces/*.jsonl
|
|
49
|
+
sandbox/traces/*.csv
|
|
50
|
+
sandbox/traces/*.parquet
|
|
51
|
+
sandbox/traces/mtr/
|
|
52
|
+
sandbox/experiments/*/runs/**/mtr-*.txt
|
|
53
|
+
sandbox/experiments/*/runs/**/qlog/
|
|
54
|
+
|
|
55
|
+
# Raw experiment outputs stay local. Keep source, configuration, summaries,
|
|
56
|
+
# result tables, and report images trackable, including inside run directories.
|
|
57
|
+
sandbox/experiments/**/runs/**/*.jsonl
|
|
58
|
+
sandbox/experiments/**/runs/**/*.mp4
|
|
59
|
+
sandbox/experiments/**/runs/**/*.webm
|
|
60
|
+
sandbox/experiments/**/runs/**/*.avi
|
|
61
|
+
sandbox/experiments/**/runs/**/*.mov
|
|
62
|
+
sandbox/experiments/**/runs/**/*.mkv
|
|
63
|
+
sandbox/experiments/**/runs/**/timeline.json
|
|
64
|
+
sandbox/experiments/**/runs/**/timeline.html
|
|
65
|
+
sandbox/experiments/**/runs/**/frame_timeline.json
|
|
66
|
+
sandbox/experiments/**/runs/**/actions.json
|
|
67
|
+
sandbox/experiments/**/runs/**/*.npz
|
|
68
|
+
sandbox/experiments/**/runs/**/*.npy
|
|
69
|
+
sandbox/experiments/**/probe-results/**/*.jsonl
|
|
70
|
+
sandbox/experiments/**/probe-results/**/*.mp4
|
|
71
|
+
sandbox/experiments/**/probe-results/**/*.webm
|
|
72
|
+
sandbox/experiments/**/probe-results/**/*.avi
|
|
73
|
+
sandbox/experiments/**/probe-results/**/*.mov
|
|
74
|
+
sandbox/experiments/**/probe-results/**/*.mkv
|
|
75
|
+
sandbox/experiments/**/probe-results/**/timeline.json
|
|
76
|
+
sandbox/experiments/**/probe-results/**/timeline.html
|
|
77
|
+
sandbox/experiments/**/probe-results/**/frame_timeline.json
|
|
78
|
+
sandbox/experiments/**/probe-results/**/actions.json
|
|
79
|
+
sandbox/experiments/**/probe-results/**/*.npz
|
|
80
|
+
sandbox/experiments/**/probe-results/**/*.npy
|
|
81
|
+
sandbox/infra/terraform/.terraform/
|
|
82
|
+
# .terraform.lock.hcl is intentionally committed so the whole team pins identical
|
|
83
|
+
# provider versions. State now lives in S3 (see sandbox/infra/terraform/backend.tf);
|
|
84
|
+
# the local tfstate files below are stale artifacts and stay ignored.
|
|
85
|
+
sandbox/infra/terraform/terraform.tfstate
|
|
86
|
+
sandbox/infra/terraform/terraform.tfstate.backup
|
|
87
|
+
sandbox/infra/terraform/tfplan
|
|
88
|
+
sandbox/infra/certs/
|
|
89
|
+
|
|
90
|
+
# Local model checkpoints
|
|
91
|
+
sandbox/policies/flash/molmoact2-so101/MolmoAct2-SO100_101/
|
|
92
|
+
.gstack/
|
|
93
|
+
|
|
94
|
+
# Cold-start benchmark run outputs (raw per-iteration meta/ssm dumps + combined.json).
|
|
95
|
+
# Commit a baseline report.md by hand if you want to keep it; runs/ is ephemeral.
|
|
96
|
+
mvp/benchmarks/runs/
|
|
97
|
+
mvp/e2e/runs/
|
|
98
|
+
sandbox/benchmarks/runs/
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to the Dreamscale Python SDK (published as `dropbear` up to
|
|
4
|
+
0.1.0a23) are recorded here.
|
|
5
|
+
|
|
6
|
+
## 0.1.0a24 - Unreleased
|
|
7
|
+
|
|
8
|
+
The SDK is renamed from `dropbear` to `dreamscale`: the PyPI package, the import
|
|
9
|
+
package and the command. Behavior, the wire protocol and `dropbear-transport`
|
|
10
|
+
0.1.1a9 are unchanged.
|
|
11
|
+
|
|
12
|
+
- Install `dreamscale`, `import dreamscale` and run `dreamscale login`,
|
|
13
|
+
`dreamscale doctor` and so on. Recovery hints and install commands now say
|
|
14
|
+
`dreamscale`.
|
|
15
|
+
- Existing code keeps working without changes through the `dropbear` 0.1.0a24
|
|
16
|
+
compatibility package. It depends on `dreamscale>=0.1.0a24,<0.2` and maps
|
|
17
|
+
every `dropbear.*` import to the same `dreamscale.*` module (one
|
|
18
|
+
`DeprecationWarning`). Its `dropbear` command prints a one-line notice and
|
|
19
|
+
runs `dreamscale`. Extras such as `dropbear[so101]` install the matching
|
|
20
|
+
`dreamscale` extra. Exact pins such as `dropbear==0.1.0a23` keep installing
|
|
21
|
+
that release.
|
|
22
|
+
- Settings: new installs use `~/.dreamscale`. An existing `~/.dropbear`, and
|
|
23
|
+
`~/.config/dropbear/yam.json`, are used in place until the new location
|
|
24
|
+
exists; nothing is copied or moved. `dreamscale doctor` says when the old
|
|
25
|
+
directory is in use.
|
|
26
|
+
- `DREAMSCALE_HOME` and `DREAMSCALE_API_KEY` are read first. `DROPBEAR_HOME`
|
|
27
|
+
and `DROPBEAR_API_KEY` still work, with a one-time `FutureWarning`.
|
|
28
|
+
- `DreamscaleError` is the base error; `DropbearError` remains an alias.
|
|
29
|
+
- Login accepts API keys with either the `dropbear_sk_` or `dreamscale_sk_`
|
|
30
|
+
prefix, and error details read `x-dreamscale-request-id` before
|
|
31
|
+
`x-dropbear-request-id`.
|
|
32
|
+
- Logger names follow the package (`dreamscale.*`), and SDK threads are named
|
|
33
|
+
`dreamscale-*`. The YAM arm and camera lock files keep their names, so an
|
|
34
|
+
older `dropbear` process and `dreamscale` still exclude each other.
|
|
35
|
+
|
|
36
|
+
## 0.1.0a23 - 2026-09-23
|
|
37
|
+
|
|
38
|
+
- Correct the packaged YAM installation command to include the released async execution and recording features.
|
|
39
|
+
- Remove stale pre-qualification wording from the Sourccey guide. Runtime Python code and the exact transport `0.1.1a9` dependency are unchanged from a22.
|
|
40
|
+
|
|
41
|
+
## 0.1.0a22 - 2026-09-23
|
|
42
|
+
|
|
43
|
+
- Pin transport `0.1.1a9`, which registers Sourccey in the shared supported-model and UDP port catalog. No wire format or inference behavior changes.
|
|
44
|
+
|
|
45
|
+
## 0.1.0a21 - 2026-09-23
|
|
46
|
+
|
|
47
|
+
- Add `dropbear.sourccey.observe()` for the four-camera, 16-coordinate Sourccey X-VLA contract.
|
|
48
|
+
- Preserve the checkpoint's robot coordinates and complete 30-action chunks. Holds keep arm, gripper and lift positions while stopping base velocity.
|
|
49
|
+
- Read Sourccey's action rate from the qualified server contract; reject unsupported cadence overrides and incomplete contracts.
|
|
50
|
+
- Requires `dropbear-transport==0.1.1a8`. Endpoint admission remains gated on recorded-input qualification.
|
|
51
|
+
|
|
52
|
+
## 0.1.0a20 - 2026-09-21
|
|
53
|
+
|
|
54
|
+
- Preserve the first managed YAM action horizon, anchor it in measured state,
|
|
55
|
+
and wait 100 ms after the first accepted dispatch before the second observation.
|
|
56
|
+
Hold a newly measured pose on underruns; do not extrapolate missing motion or
|
|
57
|
+
burst overdue YAM commands after a slow callback.
|
|
58
|
+
- Add opt-in YAM `motion_handover` (finite correction) and `motion_speed`
|
|
59
|
+
(intra-chunk speed adaptation), with one reference-speed tuning parameter.
|
|
60
|
+
Experimental modes keep grippers independent of arm damping; `auto` still
|
|
61
|
+
resolves to the existing motion mode.
|
|
62
|
+
- Retain partial rollout summaries on interruption/error and distinguish startup
|
|
63
|
+
waiting, execution underruns, attempted and completed actuator callbacks.
|
|
64
|
+
- Add `dropbear[trace]`, `TraceRecorder`, and `--trace-dir` / `--trace-images` for
|
|
65
|
+
bounded local Rerun recordings of inputs, queues, raw/merged trajectories,
|
|
66
|
+
requested/accepted/measured targets and timing. Record on the controller and
|
|
67
|
+
inspect the saved file on the Mac without opening cameras.
|
|
68
|
+
|
|
69
|
+
## 0.1.0a18 - 2026-09-19
|
|
70
|
+
|
|
71
|
+
- Keep MolmoAct2-BimanualYAM's Modal tunnel active between predictions with
|
|
72
|
+
native WebSocket pings every 75 ms. The existing 20-second pong timeout and
|
|
73
|
+
connection teardown remain in force; AWS QUIC and other models retain their
|
|
74
|
+
current transport settings. No new public SDK flag is required.
|
|
75
|
+
- Close an opened WebSocket if client construction fails, including unavailable
|
|
76
|
+
codec initialization, before propagating the original error.
|
|
77
|
+
|
|
78
|
+
## 0.1.0a17 - 2026-09-19
|
|
79
|
+
|
|
80
|
+
- Recover transient tunnel opening timeouts or connection resets with up to
|
|
81
|
+
three bounded attachment attempts to the same session. Authentication and
|
|
82
|
+
protocol errors remain terminal; no duplicate allocation or inference occurs.
|
|
83
|
+
|
|
84
|
+
- Keep normalized gripper targets within `[0,1]` when motion smoothing
|
|
85
|
+
MolmoAct2-BimanualYAM and DROID chunks. Reject out-of-range source targets;
|
|
86
|
+
raw DreamZero-YAM and SO101 gripper units remain unchanged.
|
|
87
|
+
|
|
88
|
+
- Extend advanced AWS/Modal provider constraints to MolmoAct2-BimanualYAM.
|
|
89
|
+
Its qualified availability route uses Oregon L4 then Modal US-West L4.
|
|
90
|
+
- Add `dropbear run yam --provider aws|modal --region available|nearest|us-west-2`.
|
|
91
|
+
Modal accepts `available` or `us-west-2`; the task runner retains RTC off,
|
|
92
|
+
30 Hz / 30 actions, a 450-second startup limit and explicit keep-warm control.
|
|
93
|
+
|
|
94
|
+
## 0.1.0a16 - 2026-09-10
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
|
|
98
|
+
- Advanced SO101 `provider="aws"|"modal"` constraints on `connect()` and
|
|
99
|
+
`aconnect()`, combined with the existing region option. Explicit selection
|
|
100
|
+
requires server acknowledgement before allocation and cannot silently fall
|
|
101
|
+
back to another provider or escape an explicit region. Automatic placement
|
|
102
|
+
and the existing transport package remain unchanged.
|
|
103
|
+
|
|
104
|
+
- Guided YAM camera and passive CAN setup now supports a LAN browser and
|
|
105
|
+
complete `--cli` fallback, with saved choices and resumable configuration.
|
|
106
|
+
- An attended native YAM adapter and task runner keep local cameras and arms
|
|
107
|
+
connected across prediction, execution and stop/hold cycles. The package
|
|
108
|
+
includes the hardware guide, driver constraints and custom callback example.
|
|
109
|
+
- BimanualYAM observations can carry optional Unix-epoch acquisition timestamps
|
|
110
|
+
for the top, left, and right cameras. The wire observation preserves each
|
|
111
|
+
source timestamp while recording assembly as its send time; existing callers
|
|
112
|
+
without timestamps retain the prior behavior.
|
|
113
|
+
|
|
114
|
+
### Changed
|
|
115
|
+
|
|
116
|
+
- Public `connect()` and `aconnect()` calls now keep compute warm for 60 seconds
|
|
117
|
+
by default. Passing `keep_warm=0` still disables retention, and lower-level
|
|
118
|
+
control-plane calls continue to omit keep-warm unless explicitly configured.
|
|
119
|
+
|
|
120
|
+
## 0.1.0a15
|
|
121
|
+
|
|
122
|
+
### Added
|
|
123
|
+
|
|
124
|
+
- Generic synchronous and asynchronous policy runs can supply a
|
|
125
|
+
`read_hold_action` callback to read a fresh current-position target when the
|
|
126
|
+
action buffer underruns. The SDK invokes it only for current-position holds,
|
|
127
|
+
validates the exact finite action shape before hooks or actuation, and keeps
|
|
128
|
+
DreamZero's managed hold path explicit.
|
|
129
|
+
|
|
130
|
+
## 0.1.0a14 - Unreleased
|
|
131
|
+
|
|
132
|
+
### Fixed
|
|
133
|
+
|
|
134
|
+
- A delayed first DreamZero action chunk now joins continuously from the action
|
|
135
|
+
the robot actually held while inference was in flight. The scheduler no
|
|
136
|
+
longer mistakes newly inserted actions for an already-committed prefix and
|
|
137
|
+
exempts them from motion smoothing.
|
|
138
|
+
- Browser login retries transient start failures and tolerates up to three consecutive
|
|
139
|
+
transient poll failures instead of abandoning an approval immediately.
|
|
140
|
+
- Browser login errors identify whether start, polling, or response validation failed and
|
|
141
|
+
retain a safe HTTP status and request ID when the service supplied them.
|
|
142
|
+
|
|
143
|
+
### Changed
|
|
144
|
+
|
|
145
|
+
- Compositions can suppress the generic post-login simulator and SO-101 next steps while
|
|
146
|
+
retaining the same verified credential flow.
|
|
147
|
+
|
|
148
|
+
## 0.1.0a13 - 2026-08-23
|
|
149
|
+
|
|
150
|
+
### Fixed
|
|
151
|
+
|
|
152
|
+
- One-shot DreamZero predictions now preserve the model-specific queue metadata
|
|
153
|
+
contract instead of adding four generic scheduler fields that the strict
|
|
154
|
+
DreamZero server correctly rejects.
|
|
155
|
+
|
|
156
|
+
## 0.1.0a12 - 2026-08-23
|
|
157
|
+
|
|
158
|
+
### Fixed
|
|
159
|
+
|
|
160
|
+
- DreamZero-YAM H.264 observations now accept the SDK's numeric `30.0` action
|
|
161
|
+
rate metadata. The encoder normalizes the already-validated exact-30-Hz
|
|
162
|
+
value to an integer before constructing its rational time base, instead of
|
|
163
|
+
failing locally before the first observation reaches inference.
|
|
164
|
+
|
|
165
|
+
## 0.1.0a11 - 2026-08-23
|
|
166
|
+
|
|
167
|
+
### Changed
|
|
168
|
+
|
|
169
|
+
- DreamZero-YAM preserves all three source acquisition timestamps without
|
|
170
|
+
imposing a cross-camera skew limit. Each frame must still carry a valid
|
|
171
|
+
source timestamp, and downstream onboarding checks still require every
|
|
172
|
+
camera to be individually fresh. DreamZero-DROID retains its existing
|
|
173
|
+
50 ms skew contract.
|
|
174
|
+
|
|
175
|
+
## 0.1.0a10 - 2026-08-17
|
|
176
|
+
|
|
177
|
+
### Fixed
|
|
178
|
+
|
|
179
|
+
- Install on Python 3.14. The `dreamzero` extra pinned `av==15.0.0`, which
|
|
180
|
+
publishes no cp314 wheel, so installing on 3.14 fell back to building PyAV
|
|
181
|
+
from source and failed on any machine without FFmpeg development headers.
|
|
182
|
+
The failure named `av`, not the Python version.
|
|
183
|
+
|
|
184
|
+
The pin becomes a range, `av>=15,<19`, rather than branching on Python
|
|
185
|
+
version. An exact pin is not available: this workspace also builds the
|
|
186
|
+
worker, which pins `av==15.0.0`, and two exact pins on one dependency cannot
|
|
187
|
+
both hold. Users resolve the newest wheel; in-repo the worker's pin wins, so
|
|
188
|
+
our tests keep exercising the deployed pairing. The worker still decodes with 15.0.0, and H.264 decode
|
|
189
|
+
is bit-exact across both builds -- decoding a stream from either encoder
|
|
190
|
+
yields byte-identical YUV. Measured against the source frames, the worker
|
|
191
|
+
reads an 18.1.0-encoded stream at 32.42 dB versus 32.43 dB for its own, so
|
|
192
|
+
what the model sees is unchanged.
|
|
193
|
+
|
|
194
|
+
## 0.1.0a9 - Unreleased
|
|
195
|
+
|
|
196
|
+
### Changed
|
|
197
|
+
|
|
198
|
+
- DreamZero YAM now runs at its native 30 Hz control rate end to end. The
|
|
199
|
+
runtime contract and loop profile both declare 30 Hz, so a 24-action chunk
|
|
200
|
+
spans the 0.8 s the model was trained for. Earlier releases declared 15 Hz for
|
|
201
|
+
this model, which stretched each chunk over 1.6 s and executed every action at
|
|
202
|
+
roughly twice its intended duration.
|
|
203
|
+
- `upstream_eval` and the asynchronous modes now drive separate loops.
|
|
204
|
+
`upstream_eval` keeps its strictly synchronous boundary cadence for reference
|
|
205
|
+
comparisons, while `async_8` and `async_latest` run an independently clocked
|
|
206
|
+
capture loop at the model's native rate.
|
|
207
|
+
|
|
208
|
+
## 0.1.0a8 - 2026-08-16
|
|
209
|
+
|
|
210
|
+
### Added
|
|
211
|
+
|
|
212
|
+
- Numeric `keep_warm` support on `connect()` and `aconnect()`. Values from 1 to
|
|
213
|
+
3600 seconds retain the exact loaded AWS worker or Modal function after close
|
|
214
|
+
for a compatible reconnect; `0` remains the non-retaining default. Parked
|
|
215
|
+
reservations are billable, use rotated credentials, and remain distinct from
|
|
216
|
+
the connected-session `idle_timeout`. Immediate reconnects are protected from
|
|
217
|
+
reclaim-index propagation lag, and attached Modal calls have a local bounded
|
|
218
|
+
control-outage exit that drains accepted inference before credential revocation.
|
|
219
|
+
|
|
220
|
+
### Changed
|
|
221
|
+
|
|
222
|
+
- `upstream_eval` now follows a strictly synchronous reference cadence. The
|
|
223
|
+
SDK captures and submits one observation at each eight-action boundary,
|
|
224
|
+
waits for the chunk sourced from that exact observation, and only then
|
|
225
|
+
executes the next eight aligned actions at 15 Hz. Non-boundary observations
|
|
226
|
+
are not uploaded in this mode.
|
|
227
|
+
- `async_8` and `async_latest` retain independent 15 Hz capture and their
|
|
228
|
+
existing latest-only asynchronous behavior. Server-owned T1/T4 history,
|
|
229
|
+
direct upstream replacement, action alignment, and the wire protocol are
|
|
230
|
+
unchanged.
|
|
231
|
+
|
|
232
|
+
## 0.1.0a7 - 2026-08-14
|
|
233
|
+
|
|
234
|
+
### Added
|
|
235
|
+
|
|
236
|
+
- An accepted, work-conserving `async_latest` default for DreamZero-YAM. The
|
|
237
|
+
server remains single-flight and latest-only; DreamZero-DROID stays on
|
|
238
|
+
`async_8` and rejects explicit `async_latest`.
|
|
239
|
+
- YAM `async_latest` reuses the established absolute-action motion smoother at
|
|
240
|
+
the SDK's temporally aligned merge boundary, with fixed 85% new-motion weight
|
|
241
|
+
and five-step absolute-target correction. The two committed actions remain
|
|
242
|
+
protected and no chunk is shifted or rebased.
|
|
243
|
+
|
|
244
|
+
### Changed
|
|
245
|
+
|
|
246
|
+
- DreamZero-YAM sampling omission now resolves to `async_latest`; explicit
|
|
247
|
+
`async_8` and `upstream_eval` remain compatibility/reference modes.
|
|
248
|
+
- Managed DreamZero runs feed actuator-accepted targets back into later motion
|
|
249
|
+
merges when callbacks return `ActResult(accepted_action=...)`.
|
|
250
|
+
- Merge telemetry reports `motion`, its resolved weight/correction horizon,
|
|
251
|
+
exact source tick and capture-to-execution age, and accurate overlapping
|
|
252
|
+
target revisions. Holds retain no false source provenance.
|
|
253
|
+
|
|
254
|
+
### Qualification
|
|
255
|
+
|
|
256
|
+
- Retained dev A/B/A evidence proved event-loop-scale redispatch. A fixed
|
|
257
|
+
offline replay through the production merge helper reduced velocity p99/max,
|
|
258
|
+
acceleration p95/p99/max, and jerk p95/p99/max below the worse `async_8`
|
|
259
|
+
control. Velocity p95 increased because smaller corrections span more ticks;
|
|
260
|
+
it remains reported. Recorded replay does not establish physical task success
|
|
261
|
+
or safety.
|
|
262
|
+
|
|
263
|
+
## 0.1.0a6 - 2026-08-13
|
|
264
|
+
|
|
265
|
+
### Added
|
|
266
|
+
|
|
267
|
+
- Explicit DreamZero-YAM `async_latest` sampling support for qualification,
|
|
268
|
+
while DreamZero-DROID rejects the mode and retains `async_8`.
|
|
269
|
+
- DreamZero action provenance through `source_control_tick` and the source
|
|
270
|
+
camera capture-to-execution age.
|
|
271
|
+
- A configurable startup deadline: `connect()` and `aconnect()` accept a finite
|
|
272
|
+
positive `startup_timeout` for longer expected cold starts while preserving
|
|
273
|
+
the 900-second default.
|
|
274
|
+
- A structured DreamZero episode lifecycle for externally clocked control via
|
|
275
|
+
`begin_episode()`, `step()`, and `end_episode()`.
|
|
276
|
+
|
|
277
|
+
### Changed
|
|
278
|
+
|
|
279
|
+
- DreamZero sampling omission is resolved by model so a qualified YAM default
|
|
280
|
+
can be promoted without changing DROID. The 2026-08-14 dev qualification did
|
|
281
|
+
not accept that promotion, so both models continue resolving omission to
|
|
282
|
+
`async_8`; YAM may select `async_latest` explicitly.
|
|
283
|
+
- DreamZero merge telemetry now reports the actual maximum absolute revision
|
|
284
|
+
across overlapping future targets; direct suffix replacement is unchanged.
|
|
285
|
+
- `run()` and `next_action()` now share one DreamZero temporal runtime.
|
|
286
|
+
|
|
287
|
+
## 0.1.0a4 - 2026-08-12
|
|
288
|
+
|
|
289
|
+
### Added
|
|
290
|
+
|
|
291
|
+
- Automatic low-latency H.264/WSS camera transport for DreamZero-YAM via the
|
|
292
|
+
optional `dreamzero` extra, with three persistent encoders and strict server
|
|
293
|
+
decoding while DreamZero-DROID remains JPEG/WSS compatible.
|
|
294
|
+
- Client-side `auto`, `output`, and `motion` action smoothing for
|
|
295
|
+
timestep-aligned chunks without changing inference cadence. `auto` selects
|
|
296
|
+
output averaging for delta actions and motion smoothing for absolute joints.
|
|
297
|
+
- Raw chunk and merge hooks for measuring stale prefixes, overlap, and resolved
|
|
298
|
+
action revisions in physical control loops.
|
|
299
|
+
- Optional accepted-action feedback from physical actuation callbacks so future
|
|
300
|
+
absolute-trajectory merges use the target accepted by the robot.
|
|
301
|
+
|
|
302
|
+
### Changed
|
|
303
|
+
|
|
304
|
+
- SO101 consumer motion traces can omit camera diagnostics and record requested
|
|
305
|
+
versus LeRobot-accepted joint targets without blocking action dispatch on file I/O.
|
|
306
|
+
- Fully stale chunks are discarded instead of shifted into future control steps;
|
|
307
|
+
sync and async runs now expose the requested and resolved smoothing settings.
|
|
308
|
+
- Smoothing fails closed on unsupported action spaces, malformed action
|
|
309
|
+
dimensions, and non-finite inputs or derived motion targets. Unsuccessful
|
|
310
|
+
experimental splice behavior was removed, and trace writer failures are
|
|
311
|
+
bounded and propagated to the caller.
|
|
312
|
+
|
|
313
|
+
## 0.1.0a3 - 2026-07-28
|
|
314
|
+
|
|
315
|
+
### Added
|
|
316
|
+
|
|
317
|
+
- Honest run summaries covering completed observations, returned action chunks,
|
|
318
|
+
elapsed time, and measured end-to-end, server, and estimated network latency.
|
|
319
|
+
- Predictable `nearest`, `available`, and explicit-region placement, including
|
|
320
|
+
robust multi-sample regional latency probing and clear effective-state
|
|
321
|
+
reporting.
|
|
322
|
+
|
|
323
|
+
### Changed
|
|
324
|
+
|
|
325
|
+
- Improved warm-capacity selection so `available` prefers usable warm compute
|
|
326
|
+
while `nearest` preserves genuinely lower-latency placement.
|
|
327
|
+
- Hardened transport fallback with cross-transport observation idempotency and
|
|
328
|
+
exact action replay, preventing duplicate inference when a request changes
|
|
329
|
+
transport.
|
|
330
|
+
|
|
331
|
+
## 0.1.0a2 - 2026-07-24
|
|
332
|
+
|
|
333
|
+
### Added
|
|
334
|
+
|
|
335
|
+
- Support for the base SDK and companion transport package on Python 3.11,
|
|
336
|
+
3.12, 3.13, and 3.14.
|
|
337
|
+
- MolmoAct2-BimanualYAM observation and inference helpers, including the
|
|
338
|
+
corresponding transport wire contract.
|
|
339
|
+
- Franka FR3 model metadata and state/action shape support.
|
|
340
|
+
- Python 3.11-3.14 compatibility checks in pull-request and release CI.
|
|
341
|
+
|
|
342
|
+
### Changed
|
|
343
|
+
|
|
344
|
+
- Replaced Python 3.12-only type-alias syntax while preserving runtime alias
|
|
345
|
+
introspection.
|
|
346
|
+
- Expanded the NumPy range for Python 3.14 wheels and constrained Typer to the
|
|
347
|
+
versions compatible with the SDK's secure login prompt.
|
|
348
|
+
- Updated `dropbear doctor` and installation guidance for the supported Python
|
|
349
|
+
range.
|
|
350
|
+
|
|
351
|
+
## 0.1.0a1 - 2026-07-23
|
|
352
|
+
|
|
353
|
+
- Initial pre-alpha PyPI release of the Dropbear SDK and CLI.
|
|
354
|
+
- Shipped the lean base install, QUIC transport integration, policy lifecycle,
|
|
355
|
+
SO-101 support, and optional local simulator dependencies.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction, and
|
|
10
|
+
distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by the
|
|
13
|
+
copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all other
|
|
16
|
+
entities that control, are controlled by, or are under common control with
|
|
17
|
+
that entity. For the purposes of this definition, "control" means (i) the
|
|
18
|
+
power, direct or indirect, to cause the direction or management of such
|
|
19
|
+
entity, whether by contract or otherwise, or (ii) ownership of fifty percent
|
|
20
|
+
(50%) or more of the outstanding shares, or (iii) beneficial ownership of
|
|
21
|
+
such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
|
24
|
+
permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation source, and
|
|
28
|
+
configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical transformation
|
|
31
|
+
or translation of a Source form, including but not limited to compiled object
|
|
32
|
+
code, generated documentation, and conversions to other media types.
|
|
33
|
+
|
|
34
|
+
"Work" shall mean the work of authorship, whether in Source or Object form,
|
|
35
|
+
made available under the License, as indicated by a copyright notice that is
|
|
36
|
+
included in or attached to the work (an example is provided in the Appendix
|
|
37
|
+
below).
|
|
38
|
+
|
|
39
|
+
"Derivative Works" shall mean any work, whether in Source or Object form,
|
|
40
|
+
that is based on (or derived from) the Work and for which the editorial
|
|
41
|
+
revisions, annotations, elaborations, or other modifications represent, as a
|
|
42
|
+
whole, an original work of authorship. For the purposes of this License,
|
|
43
|
+
Derivative Works shall not include works that remain separable from, or
|
|
44
|
+
merely link (or bind by name) to the interfaces of, the Work and Derivative
|
|
45
|
+
Works thereof.
|
|
46
|
+
|
|
47
|
+
"Contribution" shall mean any work of authorship, including the original
|
|
48
|
+
version of the Work and any modifications or additions to that Work or
|
|
49
|
+
Derivative Works thereof, that is intentionally submitted to Licensor for
|
|
50
|
+
inclusion in the Work by the copyright owner or by an individual or Legal
|
|
51
|
+
Entity authorized to submit on behalf of the copyright owner. For the
|
|
52
|
+
purposes of this definition, "submitted" means any form of electronic,
|
|
53
|
+
verbal, or written communication sent to the Licensor or its representatives,
|
|
54
|
+
including but not limited to communication on electronic mailing lists,
|
|
55
|
+
source code control systems, and issue tracking systems that are managed by,
|
|
56
|
+
or on behalf of, the Licensor for the purpose of discussing and improving the
|
|
57
|
+
Work, but excluding communication that is conspicuously marked or otherwise
|
|
58
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
59
|
+
|
|
60
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity on
|
|
61
|
+
behalf of whom a Contribution has been received by Licensor and subsequently
|
|
62
|
+
incorporated within the Work.
|
|
63
|
+
|
|
64
|
+
2. Grant of Copyright License. Subject to the terms and conditions of this
|
|
65
|
+
License, each Contributor hereby grants to You a perpetual, worldwide,
|
|
66
|
+
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
|
67
|
+
reproduce, prepare Derivative Works of, publicly display, publicly perform,
|
|
68
|
+
sublicense, and distribute the Work and such Derivative Works in Source or
|
|
69
|
+
Object form.
|
|
70
|
+
|
|
71
|
+
3. Grant of Patent License. Subject to the terms and conditions of this
|
|
72
|
+
License, each Contributor hereby grants to You a perpetual, worldwide,
|
|
73
|
+
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
|
|
74
|
+
section) patent license to make, have made, use, offer to sell, sell, import,
|
|
75
|
+
and otherwise transfer the Work, where such license applies only to those
|
|
76
|
+
patent claims licensable by such Contributor that are necessarily infringed
|
|
77
|
+
by their Contribution(s) alone or by combination of their Contribution(s)
|
|
78
|
+
with the Work to which such Contribution(s) was submitted. If You institute
|
|
79
|
+
patent litigation against any entity (including a cross-claim or counterclaim
|
|
80
|
+
in a lawsuit) alleging that the Work or a Contribution incorporated within
|
|
81
|
+
the Work constitutes direct or contributory patent infringement, then any
|
|
82
|
+
patent licenses granted to You under this License for that Work shall
|
|
83
|
+
terminate as of the date such litigation is filed.
|
|
84
|
+
|
|
85
|
+
4. Redistribution. You may reproduce and distribute copies of the Work or
|
|
86
|
+
Derivative Works thereof in any medium, with or without modifications, and in
|
|
87
|
+
Source or Object form, provided that You meet the following conditions:
|
|
88
|
+
|
|
89
|
+
(a) You must give any other recipients of the Work or Derivative Works a copy
|
|
90
|
+
of this License; and
|
|
91
|
+
|
|
92
|
+
(b) You must cause any modified files to carry prominent notices stating that
|
|
93
|
+
You changed the files; and
|
|
94
|
+
|
|
95
|
+
(c) You must retain, in the Source form of any Derivative Works that You
|
|
96
|
+
distribute, all copyright, patent, trademark, and attribution notices from the
|
|
97
|
+
Source form of the Work, excluding those notices that do not pertain to any
|
|
98
|
+
part of the Derivative Works; and
|
|
99
|
+
|
|
100
|
+
(d) If the Work includes a "NOTICE" text file as part of its distribution,
|
|
101
|
+
then any Derivative Works that You distribute must include a readable copy of
|
|
102
|
+
the attribution notices contained within such NOTICE file, excluding those
|
|
103
|
+
notices that do not pertain to any part of the Derivative Works, in at least
|
|
104
|
+
one of the following places: within a NOTICE text file distributed as part of
|
|
105
|
+
the Derivative Works; within the Source form or documentation, if provided
|
|
106
|
+
along with the Derivative Works; or, within a display generated by the
|
|
107
|
+
Derivative Works, if and wherever such third-party notices normally appear.
|
|
108
|
+
The contents of the NOTICE file are for informational purposes only and do
|
|
109
|
+
not modify the License. You may add Your own attribution notices within
|
|
110
|
+
Derivative Works that You distribute, alongside or as an addendum to the
|
|
111
|
+
NOTICE text from the Work, provided that such additional attribution notices
|
|
112
|
+
cannot be construed as modifying the License.
|
|
113
|
+
|
|
114
|
+
You may add Your own copyright statement to Your modifications and may
|
|
115
|
+
provide additional or different license terms and conditions for use,
|
|
116
|
+
reproduction, or distribution of Your modifications, or for any such
|
|
117
|
+
Derivative Works as a whole, provided Your use, reproduction, and distribution
|
|
118
|
+
of the Work otherwise complies with the conditions stated in this License.
|
|
119
|
+
|
|
120
|
+
5. Submission of Contributions. Unless You explicitly state otherwise, any
|
|
121
|
+
Contribution intentionally submitted for inclusion in the Work by You to the
|
|
122
|
+
Licensor shall be under the terms and conditions of this License, without any
|
|
123
|
+
additional terms or conditions. Notwithstanding the above, nothing herein
|
|
124
|
+
shall supersede or modify the terms of any separate license agreement you may
|
|
125
|
+
have executed with Licensor regarding such Contributions.
|
|
126
|
+
|
|
127
|
+
6. Trademarks. This License does not grant permission to use the trade names,
|
|
128
|
+
trademarks, service marks, or product names of the Licensor, except as
|
|
129
|
+
required for reasonable and customary use in describing the origin of the
|
|
130
|
+
Work and reproducing the content of the NOTICE file.
|
|
131
|
+
|
|
132
|
+
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in
|
|
133
|
+
writing, Licensor provides the Work (and each Contributor provides its
|
|
134
|
+
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
135
|
+
KIND, either express or implied, including, without limitation, any warranties
|
|
136
|
+
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
137
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
138
|
+
appropriateness of using or redistributing the Work and assume any risks
|
|
139
|
+
associated with Your exercise of permissions under this License.
|
|
140
|
+
|
|
141
|
+
8. Limitation of Liability. In no event and under no legal theory, whether in
|
|
142
|
+
tort (including negligence), contract, or otherwise, unless required by
|
|
143
|
+
applicable law (such as deliberate and grossly negligent acts) or agreed to in
|
|
144
|
+
writing, shall any Contributor be liable to You for damages, including any
|
|
145
|
+
direct, indirect, special, incidental, or consequential damages of any
|
|
146
|
+
character arising as a result of this License or out of the use or inability
|
|
147
|
+
to use the Work (including but not limited to damages for loss of goodwill,
|
|
148
|
+
work stoppage, computer failure or malfunction, or any and all other
|
|
149
|
+
commercial damages or losses), even if such Contributor has been advised of
|
|
150
|
+
the possibility of such damages.
|
|
151
|
+
|
|
152
|
+
9. Accepting Warranty or Additional Liability. While redistributing the Work
|
|
153
|
+
or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
|
154
|
+
acceptance of support, warranty, indemnity, or other liability obligations
|
|
155
|
+
and/or rights consistent with this License. However, in accepting such
|
|
156
|
+
obligations, You may act only on Your own behalf and on Your sole
|
|
157
|
+
responsibility, not on behalf of any other Contributor, and only if You agree
|
|
158
|
+
to indemnify, defend, and hold each Contributor harmless for any liability
|
|
159
|
+
incurred by, or claims asserted against, such Contributor by reason of your
|
|
160
|
+
accepting any such warranty or additional liability.
|
|
161
|
+
|
|
162
|
+
END OF TERMS AND CONDITIONS
|
|
163
|
+
|
|
164
|
+
Copyright 2026 Dreamscale Labs
|
|
165
|
+
|
|
166
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
167
|
+
you may not use this file except in compliance with the License.
|
|
168
|
+
You may obtain a copy of the License at
|
|
169
|
+
|
|
170
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
171
|
+
|
|
172
|
+
Unless required by applicable law or agreed to in writing, software
|
|
173
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
174
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
175
|
+
See the License for the specific language governing permissions and
|
|
176
|
+
limitations under the License.
|