orchestral-client 0.1.0__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.
Potentially problematic release.
This version of orchestral-client might be problematic. Click here for more details.
- orchestral_client-0.1.0/PKG-INFO +120 -0
- orchestral_client-0.1.0/docs/quickstart.md +88 -0
- orchestral_client-0.1.0/pyproject.toml +67 -0
- orchestral_client-0.1.0/setup.cfg +4 -0
- orchestral_client-0.1.0/setup.py +65 -0
- orchestral_client-0.1.0/src/orchestral/__init__.py +108 -0
- orchestral_client-0.1.0/src/orchestral/client/__init__.py +39 -0
- orchestral_client-0.1.0/src/orchestral/client/_native/TAILSCALE-LICENSE.txt +28 -0
- orchestral_client-0.1.0/src/orchestral/client/_native/linux_amd64/orchestral-action-session-quic +0 -0
- orchestral_client-0.1.0/src/orchestral/client/_native/linux_amd64/tailscale +0 -0
- orchestral_client-0.1.0/src/orchestral/client/_native/linux_amd64/tailscaled +4 -0
- orchestral_client-0.1.0/src/orchestral/client/sdk.py +902 -0
- orchestral_client-0.1.0/src/orchestral/client/tailnet.py +197 -0
- orchestral_client-0.1.0/src/orchestral/client/tailnet_binaries.py +239 -0
- orchestral_client-0.1.0/src/orchestral/control/__init__.py +116 -0
- orchestral_client-0.1.0/src/orchestral/control/account_page.py +427 -0
- orchestral_client-0.1.0/src/orchestral/control/api_keys.py +82 -0
- orchestral_client-0.1.0/src/orchestral/control/auth.py +517 -0
- orchestral_client-0.1.0/src/orchestral/control/cloud.py +2839 -0
- orchestral_client-0.1.0/src/orchestral/control/db.py +276 -0
- orchestral_client-0.1.0/src/orchestral/control/http.py +516 -0
- orchestral_client-0.1.0/src/orchestral/control/huggingface.py +87 -0
- orchestral_client-0.1.0/src/orchestral/control/placement.py +858 -0
- orchestral_client-0.1.0/src/orchestral/control/telemetry.py +257 -0
- orchestral_client-0.1.0/src/orchestral/control/unkey.py +72 -0
- orchestral_client-0.1.0/src/orchestral/core/__init__.py +178 -0
- orchestral_client-0.1.0/src/orchestral/core/codecs.py +181 -0
- orchestral_client-0.1.0/src/orchestral/core/contracts.py +662 -0
- orchestral_client-0.1.0/src/orchestral/core/execution.py +149 -0
- orchestral_client-0.1.0/src/orchestral/core/grants.py +98 -0
- orchestral_client-0.1.0/src/orchestral/core/network.py +275 -0
- orchestral_client-0.1.0/src/orchestral/core/registry.py +174 -0
- orchestral_client-0.1.0/src/orchestral/core/secrets.py +13 -0
- orchestral_client-0.1.0/src/orchestral/core/serialization.py +49 -0
- orchestral_client-0.1.0/src/orchestral/core/signers.py +91 -0
- orchestral_client-0.1.0/src/orchestral/core/transport.py +333 -0
- orchestral_client-0.1.0/src/orchestral/core/wire.py +33 -0
- orchestral_client-0.1.0/src/orchestral/entrypoint.sh +20 -0
- orchestral_client-0.1.0/src/orchestral/ops/__init__.py +44 -0
- orchestral_client-0.1.0/src/orchestral/ops/cli.py +777 -0
- orchestral_client-0.1.0/src/orchestral/ops/eval.py +202 -0
- orchestral_client-0.1.0/src/orchestral/ops/exp.py +655 -0
- orchestral_client-0.1.0/src/orchestral/ops/onboard.py +186 -0
- orchestral_client-0.1.0/src/orchestral/ops/profile.py +520 -0
- orchestral_client-0.1.0/src/orchestral/ops/quickstart_predict.py +58 -0
- orchestral_client-0.1.0/src/orchestral/plugins/__init__.py +101 -0
- orchestral_client-0.1.0/src/orchestral/plugins/accelerators.py +66 -0
- orchestral_client-0.1.0/src/orchestral/plugins/model_base.py +50 -0
- orchestral_client-0.1.0/src/orchestral/plugins/models.py +38 -0
- orchestral_client-0.1.0/src/orchestral/plugins/profiles.py +55 -0
- orchestral_client-0.1.0/src/orchestral/plugins/providers.py +803 -0
- orchestral_client-0.1.0/src/orchestral/plugins/simulators.py +181 -0
- orchestral_client-0.1.0/src/orchestral/plugins/solvers.py +272 -0
- orchestral_client-0.1.0/src/orchestral/runtime/__init__.py +84 -0
- orchestral_client-0.1.0/src/orchestral/runtime/cas.py +1022 -0
- orchestral_client-0.1.0/src/orchestral/runtime/catalog.py +16 -0
- orchestral_client-0.1.0/src/orchestral/runtime/checkpoints.py +54 -0
- orchestral_client-0.1.0/src/orchestral/runtime/kernels.py +1068 -0
- orchestral_client-0.1.0/src/orchestral/runtime/molmoact2_capture.py +201 -0
- orchestral_client-0.1.0/src/orchestral/runtime/serve.py +807 -0
- orchestral_client-0.1.0/src/orchestral/runtime/source_snapshot.py +238 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/PKG-INFO +120 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/SOURCES.txt +65 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/dependency_links.txt +1 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/entry_points.txt +3 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/requires.txt +29 -0
- orchestral_client-0.1.0/src/orchestral_client.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orchestral-client
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Orchestral Labs — Real-time robotics & VLA model platform
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: numpy>=1.26
|
|
8
|
+
Requires-Dist: httpx>=0.27
|
|
9
|
+
Requires-Dist: msgpack>=1.0.5
|
|
10
|
+
Requires-Dist: cryptography>=42.0
|
|
11
|
+
Requires-Dist: PyJWT>=2.8
|
|
12
|
+
Requires-Dist: omegaconf>=2.3.0
|
|
13
|
+
Requires-Dist: aioquic>=1.2.0
|
|
14
|
+
Requires-Dist: opentelemetry-api>=1.27.0
|
|
15
|
+
Requires-Dist: opentelemetry-sdk>=1.27.0
|
|
16
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.27.0
|
|
17
|
+
Requires-Dist: av>=12.0
|
|
18
|
+
Requires-Dist: pillow>=10.0
|
|
19
|
+
Provides-Extra: cloud
|
|
20
|
+
Requires-Dist: boto3>=1.34; extra == "cloud"
|
|
21
|
+
Provides-Extra: exp
|
|
22
|
+
Requires-Dist: wandb>=0.18; extra == "exp"
|
|
23
|
+
Provides-Extra: benchmark
|
|
24
|
+
Requires-Dist: boto3>=1.34; extra == "benchmark"
|
|
25
|
+
Requires-Dist: wandb>=0.18; extra == "benchmark"
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest<9,>=8.0; extra == "dev"
|
|
28
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
29
|
+
Requires-Dist: tach>=0.35; extra == "dev"
|
|
30
|
+
Requires-Dist: boto3>=1.34; extra == "dev"
|
|
31
|
+
Requires-Dist: wandb>=0.18; extra == "dev"
|
|
32
|
+
|
|
33
|
+
# Orchestral Quickstart
|
|
34
|
+
|
|
35
|
+
Install the client, sign in, enroll a robot, choose a model from the Models section in the sidebar, and predict an action chunk.
|
|
36
|
+
|
|
37
|
+
## 1. Install and sign in
|
|
38
|
+
|
|
39
|
+
Create an environment and install the client:
|
|
40
|
+
|
|
41
|
+
```text your computer
|
|
42
|
+
python3 -m venv .venv
|
|
43
|
+
source .venv/bin/activate
|
|
44
|
+
python -m pip install orchestral-client
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Sign in and confirm the active account:
|
|
48
|
+
|
|
49
|
+
```bash your computer
|
|
50
|
+
orc login
|
|
51
|
+
orc whoami
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 2. Enroll the robot
|
|
55
|
+
|
|
56
|
+
Install the client on the robot computer:
|
|
57
|
+
|
|
58
|
+
```text robot computer
|
|
59
|
+
python3 -m venv .venv
|
|
60
|
+
source .venv/bin/activate
|
|
61
|
+
python -m pip install orchestral-client
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Request enrollment from the robot computer. No user login is needed there. This command prints a short-lived code and waits while an organization administrator approves it:
|
|
65
|
+
|
|
66
|
+
```bash robot computer
|
|
67
|
+
orc agent install --name robot-1
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
From an organization administrator's signed-in computer, replace `CODE` with the code printed by the waiting command and approve it:
|
|
71
|
+
|
|
72
|
+
```bash your computer
|
|
73
|
+
orc robot approve CODE
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The waiting command finishes on the robot computer and saves its robot-scoped credential for predictions.
|
|
77
|
+
|
|
78
|
+
Check that the robot is enrolled:
|
|
79
|
+
|
|
80
|
+
```bash your computer
|
|
81
|
+
orc robot list
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 3. Choose and deploy a model
|
|
85
|
+
|
|
86
|
+
This walkthrough uses Pi 0.5. Inspect its checkpoint, import it, then deploy the imported model to the enrolled robot. Keep the `mdl_...` ID printed by import and the `dep_...` ID printed by deploy. Import waits for target preparation to finish before returning. To return while preparation continues, pass `--no-wait`; check progress with `orc model status MODEL_ID` or wait later with `orc model wait MODEL_ID`. For private or gated checkpoints, [connect your Hugging Face account](https://api.orchestrallabs.ai/account/huggingface) first and accept the model's access terms on Hugging Face.
|
|
87
|
+
|
|
88
|
+
```text your computer
|
|
89
|
+
orc model inspect hf://npow/pi05-yam-red-cap-full-7500
|
|
90
|
+
orc model import hf://npow/pi05-yam-red-cap-full-7500
|
|
91
|
+
MODEL_ID=mdl_123456789abc
|
|
92
|
+
orc model deploy "$MODEL_ID" --robot robot-1 --wait
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Replace the example `mdl_...` value with the ID returned by import. Pi 0.5 expects `middle`, `left`, and `right` as RGB `uint8` frames of shape `(224, 224, 3)`, plus `state` as `float32` with shape `(7,)`; it returns `actions` with shape `(15, 7)`. See the [Pi 0.5 model guide](/models/pi05) for the full contract and an SDK example.
|
|
96
|
+
|
|
97
|
+
The downloaded prediction script reads the deployed model's input contract and creates Pi 0.5's three `(224, 224, 3)` RGB camera frames and `(7,)` state without requiring you to rename or reshape them.
|
|
98
|
+
|
|
99
|
+
## 4. Predict an action chunk
|
|
100
|
+
|
|
101
|
+
On the robot computer, download `quickstart_predict.py` and run it with the deployment ID printed by the Pi 0.5 deploy command. It generates sample Pi 0.5 inputs with state values normalized to `[-1, 1]`.
|
|
102
|
+
|
|
103
|
+
```text robot computer
|
|
104
|
+
wget -O quickstart_predict.py https://api.orchestrallabs.ai/quickstart_predict.py
|
|
105
|
+
DEPLOYMENT_ID=dep_123456789abc
|
|
106
|
+
python quickstart_predict.py "$DEPLOYMENT_ID"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Set `DEPLOYMENT_ID` to the `dep_...` ID printed by the deploy command. The script reads the deployment's input contract and sends generated sample frames and state, so it can confirm prediction works before you connect `inputs` to your robot's cameras and state. Connect the script's `inputs` to those live sources for robot operation.
|
|
110
|
+
|
|
111
|
+
When OTLP is configured, the script prints the Tempo trace ID, whether Grafana returned the trace, and the p50 latency breakdown for encoding, wire time, decoding, queueing, inference, and total round trip.
|
|
112
|
+
|
|
113
|
+
## 5. Stop the deployment
|
|
114
|
+
|
|
115
|
+
When finished, stop the deployment from your computer. Set `DEPLOYMENT_ID` to the ID from step 3:
|
|
116
|
+
|
|
117
|
+
```text your computer
|
|
118
|
+
DEPLOYMENT_ID=dep_123456789abc
|
|
119
|
+
orc deployment stop "$DEPLOYMENT_ID"
|
|
120
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Orchestral Quickstart
|
|
2
|
+
|
|
3
|
+
Install the client, sign in, enroll a robot, choose a model from the Models section in the sidebar, and predict an action chunk.
|
|
4
|
+
|
|
5
|
+
## 1. Install and sign in
|
|
6
|
+
|
|
7
|
+
Create an environment and install the client:
|
|
8
|
+
|
|
9
|
+
```text your computer
|
|
10
|
+
python3 -m venv .venv
|
|
11
|
+
source .venv/bin/activate
|
|
12
|
+
python -m pip install orchestral-client
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Sign in and confirm the active account:
|
|
16
|
+
|
|
17
|
+
```bash your computer
|
|
18
|
+
orc login
|
|
19
|
+
orc whoami
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 2. Enroll the robot
|
|
23
|
+
|
|
24
|
+
Install the client on the robot computer:
|
|
25
|
+
|
|
26
|
+
```text robot computer
|
|
27
|
+
python3 -m venv .venv
|
|
28
|
+
source .venv/bin/activate
|
|
29
|
+
python -m pip install orchestral-client
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Request enrollment from the robot computer. No user login is needed there. This command prints a short-lived code and waits while an organization administrator approves it:
|
|
33
|
+
|
|
34
|
+
```bash robot computer
|
|
35
|
+
orc agent install --name robot-1
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
From an organization administrator's signed-in computer, replace `CODE` with the code printed by the waiting command and approve it:
|
|
39
|
+
|
|
40
|
+
```bash your computer
|
|
41
|
+
orc robot approve CODE
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The waiting command finishes on the robot computer and saves its robot-scoped credential for predictions.
|
|
45
|
+
|
|
46
|
+
Check that the robot is enrolled:
|
|
47
|
+
|
|
48
|
+
```bash your computer
|
|
49
|
+
orc robot list
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 3. Choose and deploy a model
|
|
53
|
+
|
|
54
|
+
This walkthrough uses Pi 0.5. Inspect its checkpoint, import it, then deploy the imported model to the enrolled robot. Keep the `mdl_...` ID printed by import and the `dep_...` ID printed by deploy. Import waits for target preparation to finish before returning. To return while preparation continues, pass `--no-wait`; check progress with `orc model status MODEL_ID` or wait later with `orc model wait MODEL_ID`. For private or gated checkpoints, [connect your Hugging Face account](https://api.orchestrallabs.ai/account/huggingface) first and accept the model's access terms on Hugging Face.
|
|
55
|
+
|
|
56
|
+
```text your computer
|
|
57
|
+
orc model inspect hf://npow/pi05-yam-red-cap-full-7500
|
|
58
|
+
orc model import hf://npow/pi05-yam-red-cap-full-7500
|
|
59
|
+
MODEL_ID=mdl_123456789abc
|
|
60
|
+
orc model deploy "$MODEL_ID" --robot robot-1 --wait
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Replace the example `mdl_...` value with the ID returned by import. Pi 0.5 expects `middle`, `left`, and `right` as RGB `uint8` frames of shape `(224, 224, 3)`, plus `state` as `float32` with shape `(7,)`; it returns `actions` with shape `(15, 7)`. See the [Pi 0.5 model guide](/models/pi05) for the full contract and an SDK example.
|
|
64
|
+
|
|
65
|
+
The downloaded prediction script reads the deployed model's input contract and creates Pi 0.5's three `(224, 224, 3)` RGB camera frames and `(7,)` state without requiring you to rename or reshape them.
|
|
66
|
+
|
|
67
|
+
## 4. Predict an action chunk
|
|
68
|
+
|
|
69
|
+
On the robot computer, download `quickstart_predict.py` and run it with the deployment ID printed by the Pi 0.5 deploy command. It generates sample Pi 0.5 inputs with state values normalized to `[-1, 1]`.
|
|
70
|
+
|
|
71
|
+
```text robot computer
|
|
72
|
+
wget -O quickstart_predict.py https://api.orchestrallabs.ai/quickstart_predict.py
|
|
73
|
+
DEPLOYMENT_ID=dep_123456789abc
|
|
74
|
+
python quickstart_predict.py "$DEPLOYMENT_ID"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Set `DEPLOYMENT_ID` to the `dep_...` ID printed by the deploy command. The script reads the deployment's input contract and sends generated sample frames and state, so it can confirm prediction works before you connect `inputs` to your robot's cameras and state. Connect the script's `inputs` to those live sources for robot operation.
|
|
78
|
+
|
|
79
|
+
When OTLP is configured, the script prints the Tempo trace ID, whether Grafana returned the trace, and the p50 latency breakdown for encoding, wire time, decoding, queueing, inference, and total round trip.
|
|
80
|
+
|
|
81
|
+
## 5. Stop the deployment
|
|
82
|
+
|
|
83
|
+
When finished, stop the deployment from your computer. Set `DEPLOYMENT_ID` to the ID from step 3:
|
|
84
|
+
|
|
85
|
+
```text your computer
|
|
86
|
+
DEPLOYMENT_ID=dep_123456789abc
|
|
87
|
+
orc deployment stop "$DEPLOYMENT_ID"
|
|
88
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "orchestral-client"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Orchestral Labs — Real-time robotics & VLA model platform"
|
|
9
|
+
readme = "docs/quickstart.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
dependencies = [
|
|
12
|
+
"numpy>=1.26",
|
|
13
|
+
"httpx>=0.27",
|
|
14
|
+
"msgpack>=1.0.5",
|
|
15
|
+
"cryptography>=42.0",
|
|
16
|
+
"PyJWT>=2.8",
|
|
17
|
+
"omegaconf>=2.3.0",
|
|
18
|
+
"aioquic>=1.2.0",
|
|
19
|
+
"opentelemetry-api>=1.27.0",
|
|
20
|
+
"opentelemetry-sdk>=1.27.0",
|
|
21
|
+
"opentelemetry-exporter-otlp-proto-http>=1.27.0",
|
|
22
|
+
# Session.predict() defaults to H.264 for camera inputs.
|
|
23
|
+
"av>=12.0",
|
|
24
|
+
"pillow>=10.0",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.optional-dependencies]
|
|
28
|
+
cloud = ["boto3>=1.34"]
|
|
29
|
+
exp = ["wandb>=0.18"]
|
|
30
|
+
benchmark = ["boto3>=1.34", "wandb>=0.18"]
|
|
31
|
+
dev = ["pytest>=8.0,<9", "ruff>=0.6", "tach>=0.35", "boto3>=1.34", "wandb>=0.18"]
|
|
32
|
+
|
|
33
|
+
[project.scripts]
|
|
34
|
+
orc = "orchestral.ops.cli:main"
|
|
35
|
+
orchestral = "orchestral.ops.cli:main"
|
|
36
|
+
|
|
37
|
+
[tool.setuptools.packages.find]
|
|
38
|
+
where = ["src"]
|
|
39
|
+
include = ["orchestral*"]
|
|
40
|
+
|
|
41
|
+
[tool.setuptools]
|
|
42
|
+
include-package-data = true
|
|
43
|
+
|
|
44
|
+
[tool.setuptools.package-data]
|
|
45
|
+
orchestral = [
|
|
46
|
+
"entrypoint.sh",
|
|
47
|
+
"client/_native/TAILSCALE-LICENSE.txt",
|
|
48
|
+
"client/_native/*/tailscaled",
|
|
49
|
+
"client/_native/*/tailscale",
|
|
50
|
+
"client/_native/*/orchestral-action-session-quic",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
[tool.pytest.ini_options]
|
|
54
|
+
testpaths = ["tests"]
|
|
55
|
+
pythonpath = ["src"]
|
|
56
|
+
markers = [
|
|
57
|
+
"e2e: end-to-end journey or live infrastructure test; run on demand",
|
|
58
|
+
"gcp_e2e: opt-in real GCP/GKE quickstart and prediction test",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[tool.ruff]
|
|
62
|
+
line-length = 100
|
|
63
|
+
target-version = "py311"
|
|
64
|
+
|
|
65
|
+
[tool.ruff.lint]
|
|
66
|
+
select = ["E", "F", "I", "UP", "B"]
|
|
67
|
+
ignore = ["E501"]
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Setuptools wheel tags for platform-specific native client payloads."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
sys.path.insert(0, "src")
|
|
10
|
+
|
|
11
|
+
from setuptools import Distribution, setup
|
|
12
|
+
from wheel.bdist_wheel import bdist_wheel
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class NativeClientDistribution(Distribution):
|
|
16
|
+
def has_ext_modules(self) -> bool:
|
|
17
|
+
return True
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class NativeClientWheel(bdist_wheel):
|
|
21
|
+
def finalize_options(self) -> None:
|
|
22
|
+
super().finalize_options()
|
|
23
|
+
tag = os.environ.get("ORC_WHEEL_PLATFORM_TAG")
|
|
24
|
+
if not tag:
|
|
25
|
+
# Setuptools asks bdist_wheel for metadata while preparing editable installs.
|
|
26
|
+
# Keep that path lightweight; enforce the platform payload when a wheel is run.
|
|
27
|
+
return
|
|
28
|
+
target = {
|
|
29
|
+
"manylinux_2_28_x86_64": "linux_amd64",
|
|
30
|
+
"manylinux_2_28_aarch64": "linux_arm64",
|
|
31
|
+
"macosx_13_0_arm64": "macos_arm64",
|
|
32
|
+
}.get(tag)
|
|
33
|
+
if target is None:
|
|
34
|
+
raise RuntimeError(f"unsupported orchestral-client wheel platform tag {tag!r}")
|
|
35
|
+
native_directory = Path("src/orchestral/client/_native") / target
|
|
36
|
+
required = (
|
|
37
|
+
"tailscaled",
|
|
38
|
+
"tailscale",
|
|
39
|
+
"orchestral-action-session-quic",
|
|
40
|
+
)
|
|
41
|
+
missing = [name for name in required if not (native_directory / name).is_file()]
|
|
42
|
+
if missing:
|
|
43
|
+
raise RuntimeError(
|
|
44
|
+
f"platform wheel payload is incomplete in {native_directory}: {', '.join(missing)}"
|
|
45
|
+
)
|
|
46
|
+
self.root_is_pure = False
|
|
47
|
+
self.plat_name = tag
|
|
48
|
+
self.plat_name_supplied = True
|
|
49
|
+
|
|
50
|
+
def get_tag(self) -> tuple[str, str, str]:
|
|
51
|
+
tag = os.environ.get("ORC_WHEEL_PLATFORM_TAG")
|
|
52
|
+
if tag is None:
|
|
53
|
+
return super().get_tag()
|
|
54
|
+
return "py3", "none", tag
|
|
55
|
+
|
|
56
|
+
def run(self) -> None:
|
|
57
|
+
if not os.environ.get("ORC_WHEEL_PLATFORM_TAG"):
|
|
58
|
+
raise RuntimeError(
|
|
59
|
+
"set ORC_WHEEL_PLATFORM_TAG and run `make client-native-binaries` "
|
|
60
|
+
"before building an orchestral-client wheel"
|
|
61
|
+
)
|
|
62
|
+
super().run()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
setup(distclass=NativeClientDistribution, cmdclass={"bdist_wheel": NativeClientWheel})
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Orchestral Labs — Real-time robotics & VLA platform.
|
|
2
|
+
|
|
3
|
+
Lazy top-level exports keep `import orchestral` under 5ms.
|
|
4
|
+
Domain packages:
|
|
5
|
+
- `orchestral.core`: Contracts, plugin registry, and wire protocol (`contracts`, `registry`, `wire`)
|
|
6
|
+
- `orchestral.runtime`: Worker data-plane runtime, CAS hydration & custom kernels (`serve`, `cas`, `kernels`)
|
|
7
|
+
- `orchestral.control`: Cloud control plane, placement engine, auth/RBAC, state store & telemetry
|
|
8
|
+
- `orchestral.plugins`: Hardware accelerators, profiles, solvers, providers, models & simulators
|
|
9
|
+
- `orchestral.client`: Customer Python SDK (`sdk`)
|
|
10
|
+
- `orchestral.ops`: Operator CLI, model onboarding, benchmarks & closed-loop evaluation
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from typing import TYPE_CHECKING, Any
|
|
16
|
+
|
|
17
|
+
__version__ = "0.1.0"
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"ConnectGrant",
|
|
21
|
+
"Deployment",
|
|
22
|
+
"IOSpec",
|
|
23
|
+
"Orchestral",
|
|
24
|
+
"PluginKind",
|
|
25
|
+
"SensorModality",
|
|
26
|
+
"SensorSpec",
|
|
27
|
+
"Session",
|
|
28
|
+
"StepTimings",
|
|
29
|
+
"client",
|
|
30
|
+
"connect",
|
|
31
|
+
"control",
|
|
32
|
+
"core",
|
|
33
|
+
"deploy",
|
|
34
|
+
"model",
|
|
35
|
+
"offers",
|
|
36
|
+
"ops",
|
|
37
|
+
"plugins",
|
|
38
|
+
"register",
|
|
39
|
+
"runtime",
|
|
40
|
+
"session",
|
|
41
|
+
"simulator",
|
|
42
|
+
"usage",
|
|
43
|
+
"wire",
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
if TYPE_CHECKING:
|
|
47
|
+
from orchestral import client, control, core, ops, plugins, runtime
|
|
48
|
+
from orchestral.client.sdk import (
|
|
49
|
+
Deployment,
|
|
50
|
+
Orchestral,
|
|
51
|
+
Session,
|
|
52
|
+
connect,
|
|
53
|
+
deploy,
|
|
54
|
+
offers,
|
|
55
|
+
session,
|
|
56
|
+
usage,
|
|
57
|
+
)
|
|
58
|
+
from orchestral.core import wire
|
|
59
|
+
from orchestral.core.contracts import (
|
|
60
|
+
IOSpec,
|
|
61
|
+
PluginKind,
|
|
62
|
+
SensorModality,
|
|
63
|
+
SensorSpec,
|
|
64
|
+
StepTimings,
|
|
65
|
+
)
|
|
66
|
+
from orchestral.core.grants import ConnectGrant
|
|
67
|
+
from orchestral.core.registry import model, register, simulator
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def __getattr__(name: str) -> Any:
|
|
71
|
+
if name in {"core", "runtime", "control", "plugins", "client", "ops"}:
|
|
72
|
+
import importlib
|
|
73
|
+
|
|
74
|
+
return importlib.import_module(f"orchestral.{name}")
|
|
75
|
+
if name == "wire":
|
|
76
|
+
from orchestral.core import wire
|
|
77
|
+
|
|
78
|
+
return wire
|
|
79
|
+
if name in {"register", "model", "simulator"}:
|
|
80
|
+
from orchestral.core import registry
|
|
81
|
+
|
|
82
|
+
return getattr(registry, name)
|
|
83
|
+
if name in {"PluginKind", "SensorModality", "SensorSpec"}:
|
|
84
|
+
from orchestral.core import contracts
|
|
85
|
+
|
|
86
|
+
return getattr(contracts, name)
|
|
87
|
+
if name == "ConnectGrant":
|
|
88
|
+
from orchestral.core.grants import ConnectGrant
|
|
89
|
+
|
|
90
|
+
return ConnectGrant
|
|
91
|
+
if name in {"IOSpec", "StepTimings"}:
|
|
92
|
+
from orchestral.core import contracts
|
|
93
|
+
|
|
94
|
+
return getattr(contracts, name)
|
|
95
|
+
if name in {
|
|
96
|
+
"Orchestral",
|
|
97
|
+
"Deployment",
|
|
98
|
+
"Session",
|
|
99
|
+
"connect",
|
|
100
|
+
"deploy",
|
|
101
|
+
"session",
|
|
102
|
+
"offers",
|
|
103
|
+
"usage",
|
|
104
|
+
}:
|
|
105
|
+
from orchestral.client import sdk
|
|
106
|
+
|
|
107
|
+
return getattr(sdk, name)
|
|
108
|
+
raise AttributeError(f"module 'orchestral' has no attribute {name!r}")
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""Customer Python SDK (`orchestral.client`)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from orchestral.client.sdk import (
|
|
6
|
+
Deployment,
|
|
7
|
+
InputFeature,
|
|
8
|
+
Orchestral,
|
|
9
|
+
PolicyHandle,
|
|
10
|
+
PredictionResult,
|
|
11
|
+
Session,
|
|
12
|
+
clear_credentials,
|
|
13
|
+
connect,
|
|
14
|
+
deploy,
|
|
15
|
+
get_default_cloud,
|
|
16
|
+
load_credentials,
|
|
17
|
+
offers,
|
|
18
|
+
save_credentials,
|
|
19
|
+
session,
|
|
20
|
+
usage,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
__all__ = [
|
|
24
|
+
"Deployment",
|
|
25
|
+
"InputFeature",
|
|
26
|
+
"Orchestral",
|
|
27
|
+
"PolicyHandle",
|
|
28
|
+
"PredictionResult",
|
|
29
|
+
"Session",
|
|
30
|
+
"clear_credentials",
|
|
31
|
+
"connect",
|
|
32
|
+
"deploy",
|
|
33
|
+
"get_default_cloud",
|
|
34
|
+
"load_credentials",
|
|
35
|
+
"offers",
|
|
36
|
+
"save_credentials",
|
|
37
|
+
"session",
|
|
38
|
+
"usage",
|
|
39
|
+
]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Tailscale Inc & contributors.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
orchestral_client-0.1.0/src/orchestral/client/_native/linux_amd64/orchestral-action-session-quic
ADDED
|
Binary file
|